@claudinho/core 0.7.0 → 0.8.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/index.d.ts +159 -2
- package/dist/index.js +1379 -145
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -253,6 +253,153 @@ function nationToRegion(nameOrCode) {
|
|
|
253
253
|
return intlNameMap()[norm(nameOrCode)];
|
|
254
254
|
}
|
|
255
255
|
|
|
256
|
+
// src/i18n.ts
|
|
257
|
+
var EN = {
|
|
258
|
+
"bracket.title": "Knockout bracket",
|
|
259
|
+
"bracket.stageTitle": "Knockout \xB7 {stage}",
|
|
260
|
+
"bracket.shareTitle": "Knockout bracket \xB7 2026",
|
|
261
|
+
"bracket.degraded": "Live scores unavailable \u2014 bracket structure only, no confirmed advancement.",
|
|
262
|
+
"bracket.standingsDegraded": "Live standings unavailable \u2014 group slots stay TBD until groups finish.",
|
|
263
|
+
"bracket.treeFallback": "Terminal too narrow for tree view \u2014 showing staged list.",
|
|
264
|
+
"bracket.empty": "No bracket matches available.",
|
|
265
|
+
"bracket.projected": "(proj.)",
|
|
266
|
+
"bracket.invalidStage": "Stage must be one of: R32, R16, QF, SF, 3P, F",
|
|
267
|
+
"bracket.unknownStage": 'Unknown stage "{stage}". Use R32, R16, QF, SF, 3P, or F.',
|
|
268
|
+
"bracket.slot.groupWinner": "Group {group} winner",
|
|
269
|
+
"bracket.slot.groupSecond": "Group {group} 2nd",
|
|
270
|
+
"bracket.slot.third": "3rd ({groups})",
|
|
271
|
+
"bracket.slot.winner": "{stage} {n} winner",
|
|
272
|
+
"bracket.slot.loser": "{stage} {n} loser",
|
|
273
|
+
"bracket.slot.tbd": "TBD",
|
|
274
|
+
"live.data": "Live data: {source}",
|
|
275
|
+
"share.tryIt": "Try it: {line}",
|
|
276
|
+
"stage.group": "Group {group}",
|
|
277
|
+
"stage.groupStage": "Group stage",
|
|
278
|
+
"stage.r32": "Round of 32",
|
|
279
|
+
"stage.r16": "Round of 16",
|
|
280
|
+
"stage.qf": "Quarter-final",
|
|
281
|
+
"stage.sf": "Semi-final",
|
|
282
|
+
"stage.3p": "Third-place play-off",
|
|
283
|
+
"stage.f": "Final",
|
|
284
|
+
"stage.friendly": "Friendly"
|
|
285
|
+
};
|
|
286
|
+
var ES = {
|
|
287
|
+
"bracket.title": "Cuadro de eliminatorias",
|
|
288
|
+
"bracket.stageTitle": "Eliminatorias \xB7 {stage}",
|
|
289
|
+
"bracket.shareTitle": "Cuadro de eliminatorias \xB7 2026",
|
|
290
|
+
"bracket.degraded": "Marcadores en vivo no disponibles \u2014 solo estructura del cuadro, sin avances confirmados.",
|
|
291
|
+
"bracket.standingsDegraded": "Tabla en vivo no disponible \u2014 los cupos de grupo siguen por definir hasta que terminen los grupos.",
|
|
292
|
+
"bracket.treeFallback": "Terminal demasiado estrecha para el \xE1rbol \u2014 mostrando lista por fase.",
|
|
293
|
+
"bracket.empty": "No hay partidos de eliminatorias disponibles.",
|
|
294
|
+
"bracket.projected": "(proy.)",
|
|
295
|
+
"bracket.invalidStage": "La fase debe ser una de: R32, R16, QF, SF, 3P, F",
|
|
296
|
+
"bracket.unknownStage": 'Fase desconocida "{stage}". Usa R32, R16, QF, SF, 3P o F.',
|
|
297
|
+
"bracket.slot.groupWinner": "Ganador del grupo {group}",
|
|
298
|
+
"bracket.slot.groupSecond": "2.\xBA del grupo {group}",
|
|
299
|
+
"bracket.slot.third": "3.\xBA ({groups})",
|
|
300
|
+
"bracket.slot.winner": "Ganador {stage} {n}",
|
|
301
|
+
"bracket.slot.loser": "Perdedor {stage} {n}",
|
|
302
|
+
"bracket.slot.tbd": "Por definir",
|
|
303
|
+
"live.data": "Datos en vivo: {source}",
|
|
304
|
+
"share.tryIt": "Pru\xE9balo: {line}",
|
|
305
|
+
"stage.group": "Grupo {group}",
|
|
306
|
+
"stage.groupStage": "Fase de grupos",
|
|
307
|
+
"stage.r32": "Dieciseisavos de final",
|
|
308
|
+
"stage.r16": "Octavos de final",
|
|
309
|
+
"stage.qf": "Cuartos de final",
|
|
310
|
+
"stage.sf": "Semifinal",
|
|
311
|
+
"stage.3p": "Tercer puesto",
|
|
312
|
+
"stage.f": "Final",
|
|
313
|
+
"stage.friendly": "Amistoso"
|
|
314
|
+
};
|
|
315
|
+
var PT = {
|
|
316
|
+
"bracket.title": "Chave do mata-mata",
|
|
317
|
+
"bracket.stageTitle": "Mata-mata \xB7 {stage}",
|
|
318
|
+
"bracket.shareTitle": "Chave do mata-mata \xB7 2026",
|
|
319
|
+
"bracket.degraded": "Placar ao vivo indispon\xEDvel \u2014 apenas a estrutura da chave, sem avan\xE7os confirmados.",
|
|
320
|
+
"bracket.standingsDegraded": "Classifica\xE7\xE3o ao vivo indispon\xEDvel \u2014 vagas de grupo seguem a definir at\xE9 o fim dos grupos.",
|
|
321
|
+
"bracket.treeFallback": "Terminal estreito demais para a \xE1rvore \u2014 mostrando lista por fase.",
|
|
322
|
+
"bracket.empty": "Nenhum jogo do mata-mata dispon\xEDvel.",
|
|
323
|
+
"bracket.projected": "(proj.)",
|
|
324
|
+
"bracket.invalidStage": "A fase deve ser uma de: R32, R16, QF, SF, 3P, F",
|
|
325
|
+
"bracket.unknownStage": 'Fase desconhecida "{stage}". Use R32, R16, QF, SF, 3P ou F.',
|
|
326
|
+
"bracket.slot.groupWinner": "Vencedor do grupo {group}",
|
|
327
|
+
"bracket.slot.groupSecond": "2.\xBA do grupo {group}",
|
|
328
|
+
"bracket.slot.third": "3.\xBA ({groups})",
|
|
329
|
+
"bracket.slot.winner": "Vencedor {stage} {n}",
|
|
330
|
+
"bracket.slot.loser": "Perdedor {stage} {n}",
|
|
331
|
+
"bracket.slot.tbd": "A definir",
|
|
332
|
+
"live.data": "Dados ao vivo: {source}",
|
|
333
|
+
"share.tryIt": "Experimente: {line}",
|
|
334
|
+
"stage.group": "Grupo {group}",
|
|
335
|
+
"stage.groupStage": "Fase de grupos",
|
|
336
|
+
"stage.r32": "Fase de 32 equipes",
|
|
337
|
+
"stage.r16": "Oitavas de final",
|
|
338
|
+
"stage.qf": "Quartas de final",
|
|
339
|
+
"stage.sf": "Semifinal",
|
|
340
|
+
"stage.3p": "Disputa do 3.\xBA lugar",
|
|
341
|
+
"stage.f": "Final",
|
|
342
|
+
"stage.friendly": "Amistoso"
|
|
343
|
+
};
|
|
344
|
+
var FR = {
|
|
345
|
+
"bracket.title": "Tableau \xE0 \xE9limination directe",
|
|
346
|
+
"bracket.stageTitle": "\xC9liminatoires \xB7 {stage}",
|
|
347
|
+
"bracket.shareTitle": "Tableau \xE0 \xE9limination directe \xB7 2026",
|
|
348
|
+
"bracket.degraded": "Scores en direct indisponibles \u2014 structure du tableau seulement, aucune qualification confirm\xE9e.",
|
|
349
|
+
"bracket.standingsDegraded": "Classement en direct indisponible \u2014 les places de groupe restent \xE0 d\xE9finir jusqu\u2019\xE0 la fin des poules.",
|
|
350
|
+
"bracket.treeFallback": "Terminal trop \xE9troit pour l\u2019arbre \u2014 affichage par phase.",
|
|
351
|
+
"bracket.empty": "Aucun match \xE0 \xE9limination directe disponible.",
|
|
352
|
+
"bracket.projected": "(proj.)",
|
|
353
|
+
"bracket.invalidStage": "La phase doit \xEAtre l\u2019une de : R32, R16, QF, SF, 3P, F",
|
|
354
|
+
"bracket.unknownStage": "Phase inconnue \xAB {stage} \xBB. Utilisez R32, R16, QF, SF, 3P ou F.",
|
|
355
|
+
"bracket.slot.groupWinner": "Vainqueur du groupe {group}",
|
|
356
|
+
"bracket.slot.groupSecond": "2e du groupe {group}",
|
|
357
|
+
"bracket.slot.third": "3e ({groups})",
|
|
358
|
+
"bracket.slot.winner": "Vainqueur {stage} {n}",
|
|
359
|
+
"bracket.slot.loser": "Perdant {stage} {n}",
|
|
360
|
+
"bracket.slot.tbd": "\xC0 d\xE9finir",
|
|
361
|
+
"live.data": "Donn\xE9es en direct : {source}",
|
|
362
|
+
"share.tryIt": "Essayez : {line}",
|
|
363
|
+
"stage.group": "Groupe {group}",
|
|
364
|
+
"stage.groupStage": "Phase de groupes",
|
|
365
|
+
"stage.r32": "Seizi\xE8mes de finale",
|
|
366
|
+
"stage.r16": "Huiti\xE8mes de finale",
|
|
367
|
+
"stage.qf": "Quarts de finale",
|
|
368
|
+
"stage.sf": "Demi-finale",
|
|
369
|
+
"stage.3p": "Match pour la 3e place",
|
|
370
|
+
"stage.f": "Finale",
|
|
371
|
+
"stage.friendly": "Match amical"
|
|
372
|
+
};
|
|
373
|
+
var CATALOGS = { en: EN, es: ES, pt: PT, fr: FR };
|
|
374
|
+
function normalizeLang(lang) {
|
|
375
|
+
const code = (lang ?? "en").slice(0, 2).toLowerCase();
|
|
376
|
+
if (code === "es" || code === "pt" || code === "fr") return code;
|
|
377
|
+
return "en";
|
|
378
|
+
}
|
|
379
|
+
function t(lang, key, vars) {
|
|
380
|
+
const dict = CATALOGS[normalizeLang(lang)];
|
|
381
|
+
let s = dict[key] ?? EN[key] ?? key;
|
|
382
|
+
if (vars) {
|
|
383
|
+
for (const [k, v] of Object.entries(vars)) s = s.replaceAll(`{${k}}`, v);
|
|
384
|
+
}
|
|
385
|
+
return s;
|
|
386
|
+
}
|
|
387
|
+
var STAGE_KEYS = {
|
|
388
|
+
GROUP: "stage.groupStage",
|
|
389
|
+
R32: "stage.r32",
|
|
390
|
+
R16: "stage.r16",
|
|
391
|
+
QF: "stage.qf",
|
|
392
|
+
SF: "stage.sf",
|
|
393
|
+
"3P": "stage.3p",
|
|
394
|
+
F: "stage.f",
|
|
395
|
+
FRIENDLY: "stage.friendly"
|
|
396
|
+
};
|
|
397
|
+
function stageLabelI18n(lang, stage, group) {
|
|
398
|
+
if (group) return t(lang, "stage.group", { group });
|
|
399
|
+
const key = STAGE_KEYS[stage];
|
|
400
|
+
return key ? t(lang, key) : stage;
|
|
401
|
+
}
|
|
402
|
+
|
|
256
403
|
// src/validate.ts
|
|
257
404
|
function isValidTimeZone(tz) {
|
|
258
405
|
if (!tz) return false;
|
|
@@ -487,7 +634,7 @@ var schedule_2026_default = [
|
|
|
487
634
|
flag: "\u{1F1FF}\u{1F1E6}"
|
|
488
635
|
},
|
|
489
636
|
status: "SCHEDULED",
|
|
490
|
-
updatedAt: "2026-06-
|
|
637
|
+
updatedAt: "2026-06-24T01:20:06.301Z"
|
|
491
638
|
},
|
|
492
639
|
{
|
|
493
640
|
id: "760414",
|
|
@@ -508,7 +655,7 @@ var schedule_2026_default = [
|
|
|
508
655
|
flag: "\u{1F1E8}\u{1F1FF}"
|
|
509
656
|
},
|
|
510
657
|
status: "SCHEDULED",
|
|
511
|
-
updatedAt: "2026-06-
|
|
658
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
512
659
|
},
|
|
513
660
|
{
|
|
514
661
|
id: "760416",
|
|
@@ -529,7 +676,7 @@ var schedule_2026_default = [
|
|
|
529
676
|
flag: "\u{1F1E7}\u{1F1E6}"
|
|
530
677
|
},
|
|
531
678
|
status: "SCHEDULED",
|
|
532
|
-
updatedAt: "2026-06-
|
|
679
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
533
680
|
},
|
|
534
681
|
{
|
|
535
682
|
id: "760417",
|
|
@@ -550,7 +697,7 @@ var schedule_2026_default = [
|
|
|
550
697
|
flag: "\u{1F1F5}\u{1F1FE}"
|
|
551
698
|
},
|
|
552
699
|
status: "SCHEDULED",
|
|
553
|
-
updatedAt: "2026-06-
|
|
700
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
554
701
|
},
|
|
555
702
|
{
|
|
556
703
|
id: "760420",
|
|
@@ -571,7 +718,7 @@ var schedule_2026_default = [
|
|
|
571
718
|
flag: "\u{1F1E8}\u{1F1ED}"
|
|
572
719
|
},
|
|
573
720
|
status: "SCHEDULED",
|
|
574
|
-
updatedAt: "2026-06-
|
|
721
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
575
722
|
},
|
|
576
723
|
{
|
|
577
724
|
id: "760419",
|
|
@@ -592,7 +739,7 @@ var schedule_2026_default = [
|
|
|
592
739
|
flag: "\u{1F1F2}\u{1F1E6}"
|
|
593
740
|
},
|
|
594
741
|
status: "SCHEDULED",
|
|
595
|
-
updatedAt: "2026-06-
|
|
742
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
596
743
|
},
|
|
597
744
|
{
|
|
598
745
|
id: "760418",
|
|
@@ -613,7 +760,7 @@ var schedule_2026_default = [
|
|
|
613
760
|
flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}"
|
|
614
761
|
},
|
|
615
762
|
status: "SCHEDULED",
|
|
616
|
-
updatedAt: "2026-06-
|
|
763
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
617
764
|
},
|
|
618
765
|
{
|
|
619
766
|
id: "760421",
|
|
@@ -634,7 +781,7 @@ var schedule_2026_default = [
|
|
|
634
781
|
flag: "\u{1F1F9}\u{1F1F7}"
|
|
635
782
|
},
|
|
636
783
|
status: "SCHEDULED",
|
|
637
|
-
updatedAt: "2026-06-
|
|
784
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
638
785
|
},
|
|
639
786
|
{
|
|
640
787
|
id: "760422",
|
|
@@ -655,7 +802,7 @@ var schedule_2026_default = [
|
|
|
655
802
|
flag: "\u{1F1E8}\u{1F1FC}"
|
|
656
803
|
},
|
|
657
804
|
status: "SCHEDULED",
|
|
658
|
-
updatedAt: "2026-06-
|
|
805
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
659
806
|
},
|
|
660
807
|
{
|
|
661
808
|
id: "760425",
|
|
@@ -676,7 +823,7 @@ var schedule_2026_default = [
|
|
|
676
823
|
flag: "\u{1F1EF}\u{1F1F5}"
|
|
677
824
|
},
|
|
678
825
|
status: "SCHEDULED",
|
|
679
|
-
updatedAt: "2026-06-
|
|
826
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
680
827
|
},
|
|
681
828
|
{
|
|
682
829
|
id: "760423",
|
|
@@ -697,7 +844,7 @@ var schedule_2026_default = [
|
|
|
697
844
|
flag: "\u{1F1EA}\u{1F1E8}"
|
|
698
845
|
},
|
|
699
846
|
status: "SCHEDULED",
|
|
700
|
-
updatedAt: "2026-06-
|
|
847
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
701
848
|
},
|
|
702
849
|
{
|
|
703
850
|
id: "760424",
|
|
@@ -718,7 +865,7 @@ var schedule_2026_default = [
|
|
|
718
865
|
flag: "\u{1F1F9}\u{1F1F3}"
|
|
719
866
|
},
|
|
720
867
|
status: "SCHEDULED",
|
|
721
|
-
updatedAt: "2026-06-
|
|
868
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
722
869
|
},
|
|
723
870
|
{
|
|
724
871
|
id: "760428",
|
|
@@ -739,7 +886,7 @@ var schedule_2026_default = [
|
|
|
739
886
|
flag: "\u{1F1E8}\u{1F1FB}"
|
|
740
887
|
},
|
|
741
888
|
status: "SCHEDULED",
|
|
742
|
-
updatedAt: "2026-06-
|
|
889
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
743
890
|
},
|
|
744
891
|
{
|
|
745
892
|
id: "760426",
|
|
@@ -760,7 +907,7 @@ var schedule_2026_default = [
|
|
|
760
907
|
flag: "\u{1F1EA}\u{1F1EC}"
|
|
761
908
|
},
|
|
762
909
|
status: "SCHEDULED",
|
|
763
|
-
updatedAt: "2026-06-
|
|
910
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
764
911
|
},
|
|
765
912
|
{
|
|
766
913
|
id: "760429",
|
|
@@ -781,7 +928,7 @@ var schedule_2026_default = [
|
|
|
781
928
|
flag: "\u{1F1FA}\u{1F1FE}"
|
|
782
929
|
},
|
|
783
930
|
status: "SCHEDULED",
|
|
784
|
-
updatedAt: "2026-06-
|
|
931
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
785
932
|
},
|
|
786
933
|
{
|
|
787
934
|
id: "760427",
|
|
@@ -802,7 +949,7 @@ var schedule_2026_default = [
|
|
|
802
949
|
flag: "\u{1F1F3}\u{1F1FF}"
|
|
803
950
|
},
|
|
804
951
|
status: "SCHEDULED",
|
|
805
|
-
updatedAt: "2026-06-
|
|
952
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
806
953
|
},
|
|
807
954
|
{
|
|
808
955
|
id: "760432",
|
|
@@ -823,7 +970,7 @@ var schedule_2026_default = [
|
|
|
823
970
|
flag: "\u{1F1F8}\u{1F1F3}"
|
|
824
971
|
},
|
|
825
972
|
status: "SCHEDULED",
|
|
826
|
-
updatedAt: "2026-06-
|
|
973
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
827
974
|
},
|
|
828
975
|
{
|
|
829
976
|
id: "760430",
|
|
@@ -844,7 +991,7 @@ var schedule_2026_default = [
|
|
|
844
991
|
flag: "\u{1F1F3}\u{1F1F4}"
|
|
845
992
|
},
|
|
846
993
|
status: "SCHEDULED",
|
|
847
|
-
updatedAt: "2026-06-
|
|
994
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
848
995
|
},
|
|
849
996
|
{
|
|
850
997
|
id: "760433",
|
|
@@ -865,7 +1012,7 @@ var schedule_2026_default = [
|
|
|
865
1012
|
flag: "\u{1F1E9}\u{1F1FF}"
|
|
866
1013
|
},
|
|
867
1014
|
status: "SCHEDULED",
|
|
868
|
-
updatedAt: "2026-06-
|
|
1015
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
869
1016
|
},
|
|
870
1017
|
{
|
|
871
1018
|
id: "760431",
|
|
@@ -886,7 +1033,7 @@ var schedule_2026_default = [
|
|
|
886
1033
|
flag: "\u{1F1EF}\u{1F1F4}"
|
|
887
1034
|
},
|
|
888
1035
|
status: "SCHEDULED",
|
|
889
|
-
updatedAt: "2026-06-
|
|
1036
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
890
1037
|
},
|
|
891
1038
|
{
|
|
892
1039
|
id: "760435",
|
|
@@ -907,7 +1054,7 @@ var schedule_2026_default = [
|
|
|
907
1054
|
flag: "\u{1F1E8}\u{1F1E9}"
|
|
908
1055
|
},
|
|
909
1056
|
status: "SCHEDULED",
|
|
910
|
-
updatedAt: "2026-06-
|
|
1057
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
911
1058
|
},
|
|
912
1059
|
{
|
|
913
1060
|
id: "760437",
|
|
@@ -928,7 +1075,7 @@ var schedule_2026_default = [
|
|
|
928
1075
|
flag: "\u{1F1ED}\u{1F1F7}"
|
|
929
1076
|
},
|
|
930
1077
|
status: "SCHEDULED",
|
|
931
|
-
updatedAt: "2026-06-
|
|
1078
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
932
1079
|
},
|
|
933
1080
|
{
|
|
934
1081
|
id: "760434",
|
|
@@ -949,7 +1096,7 @@ var schedule_2026_default = [
|
|
|
949
1096
|
flag: "\u{1F1F5}\u{1F1E6}"
|
|
950
1097
|
},
|
|
951
1098
|
status: "SCHEDULED",
|
|
952
|
-
updatedAt: "2026-06-
|
|
1099
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
953
1100
|
},
|
|
954
1101
|
{
|
|
955
1102
|
id: "760436",
|
|
@@ -970,7 +1117,7 @@ var schedule_2026_default = [
|
|
|
970
1117
|
flag: "\u{1F1E8}\u{1F1F4}"
|
|
971
1118
|
},
|
|
972
1119
|
status: "SCHEDULED",
|
|
973
|
-
updatedAt: "2026-06-
|
|
1120
|
+
updatedAt: "2026-06-24T01:20:06.302Z"
|
|
974
1121
|
},
|
|
975
1122
|
{
|
|
976
1123
|
id: "760438",
|
|
@@ -991,7 +1138,7 @@ var schedule_2026_default = [
|
|
|
991
1138
|
flag: "\u{1F1FF}\u{1F1E6}"
|
|
992
1139
|
},
|
|
993
1140
|
status: "SCHEDULED",
|
|
994
|
-
updatedAt: "2026-06-
|
|
1141
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
995
1142
|
},
|
|
996
1143
|
{
|
|
997
1144
|
id: "760439",
|
|
@@ -1012,7 +1159,7 @@ var schedule_2026_default = [
|
|
|
1012
1159
|
flag: "\u{1F1E7}\u{1F1E6}"
|
|
1013
1160
|
},
|
|
1014
1161
|
status: "SCHEDULED",
|
|
1015
|
-
updatedAt: "2026-06-
|
|
1162
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1016
1163
|
},
|
|
1017
1164
|
{
|
|
1018
1165
|
id: "760440",
|
|
@@ -1033,7 +1180,7 @@ var schedule_2026_default = [
|
|
|
1033
1180
|
flag: "\u{1F1F6}\u{1F1E6}"
|
|
1034
1181
|
},
|
|
1035
1182
|
status: "SCHEDULED",
|
|
1036
|
-
updatedAt: "2026-06-
|
|
1183
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1037
1184
|
},
|
|
1038
1185
|
{
|
|
1039
1186
|
id: "760441",
|
|
@@ -1054,7 +1201,7 @@ var schedule_2026_default = [
|
|
|
1054
1201
|
flag: "\u{1F1F0}\u{1F1F7}"
|
|
1055
1202
|
},
|
|
1056
1203
|
status: "SCHEDULED",
|
|
1057
|
-
updatedAt: "2026-06-
|
|
1204
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1058
1205
|
},
|
|
1059
1206
|
{
|
|
1060
1207
|
id: "760442",
|
|
@@ -1075,7 +1222,7 @@ var schedule_2026_default = [
|
|
|
1075
1222
|
flag: "\u{1F1E6}\u{1F1FA}"
|
|
1076
1223
|
},
|
|
1077
1224
|
status: "SCHEDULED",
|
|
1078
|
-
updatedAt: "2026-06-
|
|
1225
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1079
1226
|
},
|
|
1080
1227
|
{
|
|
1081
1228
|
id: "760445",
|
|
@@ -1096,7 +1243,7 @@ var schedule_2026_default = [
|
|
|
1096
1243
|
flag: "\u{1F1F2}\u{1F1E6}"
|
|
1097
1244
|
},
|
|
1098
1245
|
status: "SCHEDULED",
|
|
1099
|
-
updatedAt: "2026-06-
|
|
1246
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1100
1247
|
},
|
|
1101
1248
|
{
|
|
1102
1249
|
id: "760444",
|
|
@@ -1117,7 +1264,7 @@ var schedule_2026_default = [
|
|
|
1117
1264
|
flag: "\u{1F1ED}\u{1F1F9}"
|
|
1118
1265
|
},
|
|
1119
1266
|
status: "SCHEDULED",
|
|
1120
|
-
updatedAt: "2026-06-
|
|
1267
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1121
1268
|
},
|
|
1122
1269
|
{
|
|
1123
1270
|
id: "760443",
|
|
@@ -1138,7 +1285,7 @@ var schedule_2026_default = [
|
|
|
1138
1285
|
flag: "\u{1F1F5}\u{1F1FE}"
|
|
1139
1286
|
},
|
|
1140
1287
|
status: "SCHEDULED",
|
|
1141
|
-
updatedAt: "2026-06-
|
|
1288
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1142
1289
|
},
|
|
1143
1290
|
{
|
|
1144
1291
|
id: "760447",
|
|
@@ -1159,7 +1306,7 @@ var schedule_2026_default = [
|
|
|
1159
1306
|
flag: "\u{1F1F8}\u{1F1EA}"
|
|
1160
1307
|
},
|
|
1161
1308
|
status: "SCHEDULED",
|
|
1162
|
-
updatedAt: "2026-06-
|
|
1309
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1163
1310
|
},
|
|
1164
1311
|
{
|
|
1165
1312
|
id: "760448",
|
|
@@ -1180,7 +1327,7 @@ var schedule_2026_default = [
|
|
|
1180
1327
|
flag: "\u{1F1E8}\u{1F1EE}"
|
|
1181
1328
|
},
|
|
1182
1329
|
status: "SCHEDULED",
|
|
1183
|
-
updatedAt: "2026-06-
|
|
1330
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1184
1331
|
},
|
|
1185
1332
|
{
|
|
1186
1333
|
id: "760446",
|
|
@@ -1201,7 +1348,7 @@ var schedule_2026_default = [
|
|
|
1201
1348
|
flag: "\u{1F1E8}\u{1F1FC}"
|
|
1202
1349
|
},
|
|
1203
1350
|
status: "SCHEDULED",
|
|
1204
|
-
updatedAt: "2026-06-
|
|
1351
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1205
1352
|
},
|
|
1206
1353
|
{
|
|
1207
1354
|
id: "760449",
|
|
@@ -1222,7 +1369,7 @@ var schedule_2026_default = [
|
|
|
1222
1369
|
flag: "\u{1F1EF}\u{1F1F5}"
|
|
1223
1370
|
},
|
|
1224
1371
|
status: "SCHEDULED",
|
|
1225
|
-
updatedAt: "2026-06-
|
|
1372
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1226
1373
|
},
|
|
1227
1374
|
{
|
|
1228
1375
|
id: "760453",
|
|
@@ -1243,7 +1390,7 @@ var schedule_2026_default = [
|
|
|
1243
1390
|
flag: "\u{1F1F8}\u{1F1E6}"
|
|
1244
1391
|
},
|
|
1245
1392
|
status: "SCHEDULED",
|
|
1246
|
-
updatedAt: "2026-06-
|
|
1393
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1247
1394
|
},
|
|
1248
1395
|
{
|
|
1249
1396
|
id: "760451",
|
|
@@ -1264,7 +1411,7 @@ var schedule_2026_default = [
|
|
|
1264
1411
|
flag: "\u{1F1EE}\u{1F1F7}"
|
|
1265
1412
|
},
|
|
1266
1413
|
status: "SCHEDULED",
|
|
1267
|
-
updatedAt: "2026-06-
|
|
1414
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1268
1415
|
},
|
|
1269
1416
|
{
|
|
1270
1417
|
id: "760450",
|
|
@@ -1285,7 +1432,7 @@ var schedule_2026_default = [
|
|
|
1285
1432
|
flag: "\u{1F1E8}\u{1F1FB}"
|
|
1286
1433
|
},
|
|
1287
1434
|
status: "SCHEDULED",
|
|
1288
|
-
updatedAt: "2026-06-
|
|
1435
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1289
1436
|
},
|
|
1290
1437
|
{
|
|
1291
1438
|
id: "760452",
|
|
@@ -1306,7 +1453,7 @@ var schedule_2026_default = [
|
|
|
1306
1453
|
flag: "\u{1F1EA}\u{1F1EC}"
|
|
1307
1454
|
},
|
|
1308
1455
|
status: "SCHEDULED",
|
|
1309
|
-
updatedAt: "2026-06-
|
|
1456
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1310
1457
|
},
|
|
1311
1458
|
{
|
|
1312
1459
|
id: "760456",
|
|
@@ -1327,7 +1474,7 @@ var schedule_2026_default = [
|
|
|
1327
1474
|
flag: "\u{1F1E6}\u{1F1F9}"
|
|
1328
1475
|
},
|
|
1329
1476
|
status: "SCHEDULED",
|
|
1330
|
-
updatedAt: "2026-06-
|
|
1477
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1331
1478
|
},
|
|
1332
1479
|
{
|
|
1333
1480
|
id: "760457",
|
|
@@ -1348,7 +1495,7 @@ var schedule_2026_default = [
|
|
|
1348
1495
|
flag: "\u{1F1EE}\u{1F1F6}"
|
|
1349
1496
|
},
|
|
1350
1497
|
status: "SCHEDULED",
|
|
1351
|
-
updatedAt: "2026-06-
|
|
1498
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1352
1499
|
},
|
|
1353
1500
|
{
|
|
1354
1501
|
id: "760454",
|
|
@@ -1369,7 +1516,7 @@ var schedule_2026_default = [
|
|
|
1369
1516
|
flag: "\u{1F1F8}\u{1F1F3}"
|
|
1370
1517
|
},
|
|
1371
1518
|
status: "SCHEDULED",
|
|
1372
|
-
updatedAt: "2026-06-
|
|
1519
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1373
1520
|
},
|
|
1374
1521
|
{
|
|
1375
1522
|
id: "760455",
|
|
@@ -1390,7 +1537,7 @@ var schedule_2026_default = [
|
|
|
1390
1537
|
flag: "\u{1F1E9}\u{1F1FF}"
|
|
1391
1538
|
},
|
|
1392
1539
|
status: "SCHEDULED",
|
|
1393
|
-
updatedAt: "2026-06-
|
|
1540
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1394
1541
|
},
|
|
1395
1542
|
{
|
|
1396
1543
|
id: "760461",
|
|
@@ -1411,7 +1558,7 @@ var schedule_2026_default = [
|
|
|
1411
1558
|
flag: "\u{1F1FA}\u{1F1FF}"
|
|
1412
1559
|
},
|
|
1413
1560
|
status: "SCHEDULED",
|
|
1414
|
-
updatedAt: "2026-06-
|
|
1561
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1415
1562
|
},
|
|
1416
1563
|
{
|
|
1417
1564
|
id: "760458",
|
|
@@ -1432,7 +1579,7 @@ var schedule_2026_default = [
|
|
|
1432
1579
|
flag: "\u{1F1EC}\u{1F1ED}"
|
|
1433
1580
|
},
|
|
1434
1581
|
status: "SCHEDULED",
|
|
1435
|
-
updatedAt: "2026-06-
|
|
1582
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1436
1583
|
},
|
|
1437
1584
|
{
|
|
1438
1585
|
id: "760460",
|
|
@@ -1453,7 +1600,7 @@ var schedule_2026_default = [
|
|
|
1453
1600
|
flag: "\u{1F1ED}\u{1F1F7}"
|
|
1454
1601
|
},
|
|
1455
1602
|
status: "SCHEDULED",
|
|
1456
|
-
updatedAt: "2026-06-
|
|
1603
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1457
1604
|
},
|
|
1458
1605
|
{
|
|
1459
1606
|
id: "760459",
|
|
@@ -1474,7 +1621,7 @@ var schedule_2026_default = [
|
|
|
1474
1621
|
flag: "\u{1F1E8}\u{1F1E9}"
|
|
1475
1622
|
},
|
|
1476
1623
|
status: "SCHEDULED",
|
|
1477
|
-
updatedAt: "2026-06-
|
|
1624
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1478
1625
|
},
|
|
1479
1626
|
{
|
|
1480
1627
|
id: "760462",
|
|
@@ -1495,7 +1642,7 @@ var schedule_2026_default = [
|
|
|
1495
1642
|
flag: "\u{1F1F6}\u{1F1E6}"
|
|
1496
1643
|
},
|
|
1497
1644
|
status: "SCHEDULED",
|
|
1498
|
-
updatedAt: "2026-06-
|
|
1645
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1499
1646
|
},
|
|
1500
1647
|
{
|
|
1501
1648
|
id: "760463",
|
|
@@ -1516,7 +1663,7 @@ var schedule_2026_default = [
|
|
|
1516
1663
|
flag: "\u{1F1E8}\u{1F1E6}"
|
|
1517
1664
|
},
|
|
1518
1665
|
status: "SCHEDULED",
|
|
1519
|
-
updatedAt: "2026-06-
|
|
1666
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1520
1667
|
},
|
|
1521
1668
|
{
|
|
1522
1669
|
id: "760464",
|
|
@@ -1537,7 +1684,7 @@ var schedule_2026_default = [
|
|
|
1537
1684
|
flag: "\u{1F1ED}\u{1F1F9}"
|
|
1538
1685
|
},
|
|
1539
1686
|
status: "SCHEDULED",
|
|
1540
|
-
updatedAt: "2026-06-
|
|
1687
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1541
1688
|
},
|
|
1542
1689
|
{
|
|
1543
1690
|
id: "760465",
|
|
@@ -1558,7 +1705,7 @@ var schedule_2026_default = [
|
|
|
1558
1705
|
flag: "\u{1F1E7}\u{1F1F7}"
|
|
1559
1706
|
},
|
|
1560
1707
|
status: "SCHEDULED",
|
|
1561
|
-
updatedAt: "2026-06-
|
|
1708
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1562
1709
|
},
|
|
1563
1710
|
{
|
|
1564
1711
|
id: "760467",
|
|
@@ -1579,7 +1726,7 @@ var schedule_2026_default = [
|
|
|
1579
1726
|
flag: "\u{1F1F2}\u{1F1FD}"
|
|
1580
1727
|
},
|
|
1581
1728
|
status: "SCHEDULED",
|
|
1582
|
-
updatedAt: "2026-06-
|
|
1729
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1583
1730
|
},
|
|
1584
1731
|
{
|
|
1585
1732
|
id: "760466",
|
|
@@ -1600,7 +1747,7 @@ var schedule_2026_default = [
|
|
|
1600
1747
|
flag: "\u{1F1F0}\u{1F1F7}"
|
|
1601
1748
|
},
|
|
1602
1749
|
status: "SCHEDULED",
|
|
1603
|
-
updatedAt: "2026-06-
|
|
1750
|
+
updatedAt: "2026-06-24T01:20:06.394Z"
|
|
1604
1751
|
},
|
|
1605
1752
|
{
|
|
1606
1753
|
id: "760473",
|
|
@@ -1621,7 +1768,7 @@ var schedule_2026_default = [
|
|
|
1621
1768
|
flag: "\u{1F1E8}\u{1F1EE}"
|
|
1622
1769
|
},
|
|
1623
1770
|
status: "SCHEDULED",
|
|
1624
|
-
updatedAt: "2026-06-
|
|
1771
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1625
1772
|
},
|
|
1626
1773
|
{
|
|
1627
1774
|
id: "760468",
|
|
@@ -1642,7 +1789,7 @@ var schedule_2026_default = [
|
|
|
1642
1789
|
flag: "\u{1F1E9}\u{1F1EA}"
|
|
1643
1790
|
},
|
|
1644
1791
|
status: "SCHEDULED",
|
|
1645
|
-
updatedAt: "2026-06-
|
|
1792
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1646
1793
|
},
|
|
1647
1794
|
{
|
|
1648
1795
|
id: "760471",
|
|
@@ -1663,7 +1810,7 @@ var schedule_2026_default = [
|
|
|
1663
1810
|
flag: "\u{1F1F8}\u{1F1EA}"
|
|
1664
1811
|
},
|
|
1665
1812
|
status: "SCHEDULED",
|
|
1666
|
-
updatedAt: "2026-06-
|
|
1813
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1667
1814
|
},
|
|
1668
1815
|
{
|
|
1669
1816
|
id: "760472",
|
|
@@ -1684,7 +1831,7 @@ var schedule_2026_default = [
|
|
|
1684
1831
|
flag: "\u{1F1F3}\u{1F1F1}"
|
|
1685
1832
|
},
|
|
1686
1833
|
status: "SCHEDULED",
|
|
1687
|
-
updatedAt: "2026-06-
|
|
1834
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1688
1835
|
},
|
|
1689
1836
|
{
|
|
1690
1837
|
id: "760469",
|
|
@@ -1705,7 +1852,7 @@ var schedule_2026_default = [
|
|
|
1705
1852
|
flag: "\u{1F1E6}\u{1F1FA}"
|
|
1706
1853
|
},
|
|
1707
1854
|
status: "SCHEDULED",
|
|
1708
|
-
updatedAt: "2026-06-
|
|
1855
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1709
1856
|
},
|
|
1710
1857
|
{
|
|
1711
1858
|
id: "760470",
|
|
@@ -1726,7 +1873,7 @@ var schedule_2026_default = [
|
|
|
1726
1873
|
flag: "\u{1F1FA}\u{1F1F8}"
|
|
1727
1874
|
},
|
|
1728
1875
|
status: "SCHEDULED",
|
|
1729
|
-
updatedAt: "2026-06-
|
|
1876
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1730
1877
|
},
|
|
1731
1878
|
{
|
|
1732
1879
|
id: "760475",
|
|
@@ -1747,7 +1894,7 @@ var schedule_2026_default = [
|
|
|
1747
1894
|
flag: "\u{1F1EB}\u{1F1F7}"
|
|
1748
1895
|
},
|
|
1749
1896
|
status: "SCHEDULED",
|
|
1750
|
-
updatedAt: "2026-06-
|
|
1897
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1751
1898
|
},
|
|
1752
1899
|
{
|
|
1753
1900
|
id: "760474",
|
|
@@ -1768,7 +1915,7 @@ var schedule_2026_default = [
|
|
|
1768
1915
|
flag: "\u{1F1EE}\u{1F1F6}"
|
|
1769
1916
|
},
|
|
1770
1917
|
status: "SCHEDULED",
|
|
1771
|
-
updatedAt: "2026-06-
|
|
1918
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1772
1919
|
},
|
|
1773
1920
|
{
|
|
1774
1921
|
id: "760478",
|
|
@@ -1789,7 +1936,7 @@ var schedule_2026_default = [
|
|
|
1789
1936
|
flag: "\u{1F1F8}\u{1F1E6}"
|
|
1790
1937
|
},
|
|
1791
1938
|
status: "SCHEDULED",
|
|
1792
|
-
updatedAt: "2026-06-
|
|
1939
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1793
1940
|
},
|
|
1794
1941
|
{
|
|
1795
1942
|
id: "760479",
|
|
@@ -1810,7 +1957,7 @@ var schedule_2026_default = [
|
|
|
1810
1957
|
flag: "\u{1F1EA}\u{1F1F8}"
|
|
1811
1958
|
},
|
|
1812
1959
|
status: "SCHEDULED",
|
|
1813
|
-
updatedAt: "2026-06-
|
|
1960
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1814
1961
|
},
|
|
1815
1962
|
{
|
|
1816
1963
|
id: "760476",
|
|
@@ -1831,7 +1978,7 @@ var schedule_2026_default = [
|
|
|
1831
1978
|
flag: "\u{1F1EE}\u{1F1F7}"
|
|
1832
1979
|
},
|
|
1833
1980
|
status: "SCHEDULED",
|
|
1834
|
-
updatedAt: "2026-06-
|
|
1981
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1835
1982
|
},
|
|
1836
1983
|
{
|
|
1837
1984
|
id: "760477",
|
|
@@ -1852,7 +1999,7 @@ var schedule_2026_default = [
|
|
|
1852
1999
|
flag: "\u{1F1E7}\u{1F1EA}"
|
|
1853
2000
|
},
|
|
1854
2001
|
status: "SCHEDULED",
|
|
1855
|
-
updatedAt: "2026-06-
|
|
2002
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1856
2003
|
},
|
|
1857
2004
|
{
|
|
1858
2005
|
id: "760480",
|
|
@@ -1873,7 +2020,7 @@ var schedule_2026_default = [
|
|
|
1873
2020
|
flag: "\u{1F1EC}\u{1F1ED}"
|
|
1874
2021
|
},
|
|
1875
2022
|
status: "SCHEDULED",
|
|
1876
|
-
updatedAt: "2026-06-
|
|
2023
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1877
2024
|
},
|
|
1878
2025
|
{
|
|
1879
2026
|
id: "760485",
|
|
@@ -1894,7 +2041,7 @@ var schedule_2026_default = [
|
|
|
1894
2041
|
flag: "\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}"
|
|
1895
2042
|
},
|
|
1896
2043
|
status: "SCHEDULED",
|
|
1897
|
-
updatedAt: "2026-06-
|
|
2044
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1898
2045
|
},
|
|
1899
2046
|
{
|
|
1900
2047
|
id: "760481",
|
|
@@ -1915,7 +2062,7 @@ var schedule_2026_default = [
|
|
|
1915
2062
|
flag: "\u{1F1F5}\u{1F1F9}"
|
|
1916
2063
|
},
|
|
1917
2064
|
status: "SCHEDULED",
|
|
1918
|
-
updatedAt: "2026-06-
|
|
2065
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1919
2066
|
},
|
|
1920
2067
|
{
|
|
1921
2068
|
id: "760482",
|
|
@@ -1936,7 +2083,7 @@ var schedule_2026_default = [
|
|
|
1936
2083
|
flag: "\u{1F1FA}\u{1F1FF}"
|
|
1937
2084
|
},
|
|
1938
2085
|
status: "SCHEDULED",
|
|
1939
|
-
updatedAt: "2026-06-
|
|
2086
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1940
2087
|
},
|
|
1941
2088
|
{
|
|
1942
2089
|
id: "760484",
|
|
@@ -1957,7 +2104,7 @@ var schedule_2026_default = [
|
|
|
1957
2104
|
flag: "\u{1F1E6}\u{1F1F9}"
|
|
1958
2105
|
},
|
|
1959
2106
|
status: "SCHEDULED",
|
|
1960
|
-
updatedAt: "2026-06-
|
|
2107
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1961
2108
|
},
|
|
1962
2109
|
{
|
|
1963
2110
|
id: "760483",
|
|
@@ -1978,7 +2125,7 @@ var schedule_2026_default = [
|
|
|
1978
2125
|
flag: "\u{1F1E6}\u{1F1F7}"
|
|
1979
2126
|
},
|
|
1980
2127
|
status: "SCHEDULED",
|
|
1981
|
-
updatedAt: "2026-06-
|
|
2128
|
+
updatedAt: "2026-06-24T01:20:06.523Z"
|
|
1982
2129
|
},
|
|
1983
2130
|
{
|
|
1984
2131
|
id: "760486",
|
|
@@ -1998,7 +2145,7 @@ var schedule_2026_default = [
|
|
|
1998
2145
|
flag: "\u{1F3F3}\uFE0F"
|
|
1999
2146
|
},
|
|
2000
2147
|
status: "SCHEDULED",
|
|
2001
|
-
updatedAt: "2026-06-
|
|
2148
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2002
2149
|
},
|
|
2003
2150
|
{
|
|
2004
2151
|
id: "760487",
|
|
@@ -2018,7 +2165,7 @@ var schedule_2026_default = [
|
|
|
2018
2165
|
flag: "\u{1F3F3}\uFE0F"
|
|
2019
2166
|
},
|
|
2020
2167
|
status: "SCHEDULED",
|
|
2021
|
-
updatedAt: "2026-06-
|
|
2168
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2022
2169
|
},
|
|
2023
2170
|
{
|
|
2024
2171
|
id: "760489",
|
|
@@ -2028,9 +2175,9 @@ var schedule_2026_default = [
|
|
|
2028
2175
|
city: "Foxborough, Massachusetts",
|
|
2029
2176
|
country: "USA",
|
|
2030
2177
|
home: {
|
|
2031
|
-
code: "
|
|
2178
|
+
code: "TBD",
|
|
2032
2179
|
name: "Germany",
|
|
2033
|
-
flag: "\u{
|
|
2180
|
+
flag: "\u{1F3F3}\uFE0F"
|
|
2034
2181
|
},
|
|
2035
2182
|
away: {
|
|
2036
2183
|
code: "3RD",
|
|
@@ -2038,7 +2185,7 @@ var schedule_2026_default = [
|
|
|
2038
2185
|
flag: "\u{1F3F3}\uFE0F"
|
|
2039
2186
|
},
|
|
2040
2187
|
status: "SCHEDULED",
|
|
2041
|
-
updatedAt: "2026-06-
|
|
2188
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2042
2189
|
},
|
|
2043
2190
|
{
|
|
2044
2191
|
id: "760488",
|
|
@@ -2058,7 +2205,7 @@ var schedule_2026_default = [
|
|
|
2058
2205
|
flag: "\u{1F3F3}\uFE0F"
|
|
2059
2206
|
},
|
|
2060
2207
|
status: "SCHEDULED",
|
|
2061
|
-
updatedAt: "2026-06-
|
|
2208
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2062
2209
|
},
|
|
2063
2210
|
{
|
|
2064
2211
|
id: "760490",
|
|
@@ -2078,7 +2225,7 @@ var schedule_2026_default = [
|
|
|
2078
2225
|
flag: "\u{1F3F3}\uFE0F"
|
|
2079
2226
|
},
|
|
2080
2227
|
status: "SCHEDULED",
|
|
2081
|
-
updatedAt: "2026-06-
|
|
2228
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2082
2229
|
},
|
|
2083
2230
|
{
|
|
2084
2231
|
id: "760492",
|
|
@@ -2098,7 +2245,7 @@ var schedule_2026_default = [
|
|
|
2098
2245
|
flag: "\u{1F3F3}\uFE0F"
|
|
2099
2246
|
},
|
|
2100
2247
|
status: "SCHEDULED",
|
|
2101
|
-
updatedAt: "2026-06-
|
|
2248
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2102
2249
|
},
|
|
2103
2250
|
{
|
|
2104
2251
|
id: "760491",
|
|
@@ -2108,9 +2255,9 @@ var schedule_2026_default = [
|
|
|
2108
2255
|
city: "Mexico City",
|
|
2109
2256
|
country: "Mexico",
|
|
2110
2257
|
home: {
|
|
2111
|
-
code: "
|
|
2258
|
+
code: "TBD",
|
|
2112
2259
|
name: "Mexico",
|
|
2113
|
-
flag: "\u{
|
|
2260
|
+
flag: "\u{1F3F3}\uFE0F"
|
|
2114
2261
|
},
|
|
2115
2262
|
away: {
|
|
2116
2263
|
code: "3RD",
|
|
@@ -2118,7 +2265,7 @@ var schedule_2026_default = [
|
|
|
2118
2265
|
flag: "\u{1F3F3}\uFE0F"
|
|
2119
2266
|
},
|
|
2120
2267
|
status: "SCHEDULED",
|
|
2121
|
-
updatedAt: "2026-06-
|
|
2268
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2122
2269
|
},
|
|
2123
2270
|
{
|
|
2124
2271
|
id: "760495",
|
|
@@ -2138,7 +2285,7 @@ var schedule_2026_default = [
|
|
|
2138
2285
|
flag: "\u{1F3F3}\uFE0F"
|
|
2139
2286
|
},
|
|
2140
2287
|
status: "SCHEDULED",
|
|
2141
|
-
updatedAt: "2026-06-
|
|
2288
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2142
2289
|
},
|
|
2143
2290
|
{
|
|
2144
2291
|
id: "760493",
|
|
@@ -2158,7 +2305,7 @@ var schedule_2026_default = [
|
|
|
2158
2305
|
flag: "\u{1F3F3}\uFE0F"
|
|
2159
2306
|
},
|
|
2160
2307
|
status: "SCHEDULED",
|
|
2161
|
-
updatedAt: "2026-06-
|
|
2308
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2162
2309
|
},
|
|
2163
2310
|
{
|
|
2164
2311
|
id: "760494",
|
|
@@ -2168,9 +2315,9 @@ var schedule_2026_default = [
|
|
|
2168
2315
|
city: "Santa Clara, California",
|
|
2169
2316
|
country: "USA",
|
|
2170
2317
|
home: {
|
|
2171
|
-
code: "
|
|
2318
|
+
code: "TBD",
|
|
2172
2319
|
name: "United States",
|
|
2173
|
-
flag: "\u{
|
|
2320
|
+
flag: "\u{1F3F3}\uFE0F"
|
|
2174
2321
|
},
|
|
2175
2322
|
away: {
|
|
2176
2323
|
code: "3RD",
|
|
@@ -2178,7 +2325,7 @@ var schedule_2026_default = [
|
|
|
2178
2325
|
flag: "\u{1F3F3}\uFE0F"
|
|
2179
2326
|
},
|
|
2180
2327
|
status: "SCHEDULED",
|
|
2181
|
-
updatedAt: "2026-06-
|
|
2328
|
+
updatedAt: "2026-06-24T01:20:06.529Z"
|
|
2182
2329
|
},
|
|
2183
2330
|
{
|
|
2184
2331
|
id: "760497",
|
|
@@ -2198,7 +2345,7 @@ var schedule_2026_default = [
|
|
|
2198
2345
|
flag: "\u{1F3F3}\uFE0F"
|
|
2199
2346
|
},
|
|
2200
2347
|
status: "SCHEDULED",
|
|
2201
|
-
updatedAt: "2026-06-
|
|
2348
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2202
2349
|
},
|
|
2203
2350
|
{
|
|
2204
2351
|
id: "760496",
|
|
@@ -2218,7 +2365,7 @@ var schedule_2026_default = [
|
|
|
2218
2365
|
flag: "\u{1F3F3}\uFE0F"
|
|
2219
2366
|
},
|
|
2220
2367
|
status: "SCHEDULED",
|
|
2221
|
-
updatedAt: "2026-06-
|
|
2368
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2222
2369
|
},
|
|
2223
2370
|
{
|
|
2224
2371
|
id: "760498",
|
|
@@ -2238,7 +2385,7 @@ var schedule_2026_default = [
|
|
|
2238
2385
|
flag: "\u{1F3F3}\uFE0F"
|
|
2239
2386
|
},
|
|
2240
2387
|
status: "SCHEDULED",
|
|
2241
|
-
updatedAt: "2026-06-
|
|
2388
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2242
2389
|
},
|
|
2243
2390
|
{
|
|
2244
2391
|
id: "760499",
|
|
@@ -2258,7 +2405,7 @@ var schedule_2026_default = [
|
|
|
2258
2405
|
flag: "\u{1F3F3}\uFE0F"
|
|
2259
2406
|
},
|
|
2260
2407
|
status: "SCHEDULED",
|
|
2261
|
-
updatedAt: "2026-06-
|
|
2408
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2262
2409
|
},
|
|
2263
2410
|
{
|
|
2264
2411
|
id: "760500",
|
|
@@ -2268,9 +2415,9 @@ var schedule_2026_default = [
|
|
|
2268
2415
|
city: "Miami Gardens, Florida",
|
|
2269
2416
|
country: "USA",
|
|
2270
2417
|
home: {
|
|
2271
|
-
code: "
|
|
2418
|
+
code: "TBD",
|
|
2272
2419
|
name: "Argentina",
|
|
2273
|
-
flag: "\u{
|
|
2420
|
+
flag: "\u{1F3F3}\uFE0F"
|
|
2274
2421
|
},
|
|
2275
2422
|
away: {
|
|
2276
2423
|
code: "2H",
|
|
@@ -2278,7 +2425,7 @@ var schedule_2026_default = [
|
|
|
2278
2425
|
flag: "\u{1F3F3}\uFE0F"
|
|
2279
2426
|
},
|
|
2280
2427
|
status: "SCHEDULED",
|
|
2281
|
-
updatedAt: "2026-06-
|
|
2428
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2282
2429
|
},
|
|
2283
2430
|
{
|
|
2284
2431
|
id: "760501",
|
|
@@ -2298,7 +2445,7 @@ var schedule_2026_default = [
|
|
|
2298
2445
|
flag: "\u{1F3F3}\uFE0F"
|
|
2299
2446
|
},
|
|
2300
2447
|
status: "SCHEDULED",
|
|
2301
|
-
updatedAt: "2026-06-
|
|
2448
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2302
2449
|
},
|
|
2303
2450
|
{
|
|
2304
2451
|
id: "760502",
|
|
@@ -2318,7 +2465,7 @@ var schedule_2026_default = [
|
|
|
2318
2465
|
flag: "\u{1F3F3}\uFE0F"
|
|
2319
2466
|
},
|
|
2320
2467
|
status: "SCHEDULED",
|
|
2321
|
-
updatedAt: "2026-06-
|
|
2468
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2322
2469
|
},
|
|
2323
2470
|
{
|
|
2324
2471
|
id: "760503",
|
|
@@ -2338,7 +2485,7 @@ var schedule_2026_default = [
|
|
|
2338
2485
|
flag: "\u{1F3F3}\uFE0F"
|
|
2339
2486
|
},
|
|
2340
2487
|
status: "SCHEDULED",
|
|
2341
|
-
updatedAt: "2026-06-
|
|
2488
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2342
2489
|
},
|
|
2343
2490
|
{
|
|
2344
2491
|
id: "760504",
|
|
@@ -2358,7 +2505,7 @@ var schedule_2026_default = [
|
|
|
2358
2505
|
flag: "\u{1F3F3}\uFE0F"
|
|
2359
2506
|
},
|
|
2360
2507
|
status: "SCHEDULED",
|
|
2361
|
-
updatedAt: "2026-06-
|
|
2508
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2362
2509
|
},
|
|
2363
2510
|
{
|
|
2364
2511
|
id: "760505",
|
|
@@ -2378,7 +2525,7 @@ var schedule_2026_default = [
|
|
|
2378
2525
|
flag: "\u{1F3F3}\uFE0F"
|
|
2379
2526
|
},
|
|
2380
2527
|
status: "SCHEDULED",
|
|
2381
|
-
updatedAt: "2026-06-
|
|
2528
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2382
2529
|
},
|
|
2383
2530
|
{
|
|
2384
2531
|
id: "760506",
|
|
@@ -2398,7 +2545,7 @@ var schedule_2026_default = [
|
|
|
2398
2545
|
flag: "\u{1F3F3}\uFE0F"
|
|
2399
2546
|
},
|
|
2400
2547
|
status: "SCHEDULED",
|
|
2401
|
-
updatedAt: "2026-06-
|
|
2548
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2402
2549
|
},
|
|
2403
2550
|
{
|
|
2404
2551
|
id: "760507",
|
|
@@ -2418,7 +2565,7 @@ var schedule_2026_default = [
|
|
|
2418
2565
|
flag: "\u{1F3F3}\uFE0F"
|
|
2419
2566
|
},
|
|
2420
2567
|
status: "SCHEDULED",
|
|
2421
|
-
updatedAt: "2026-06-
|
|
2568
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2422
2569
|
},
|
|
2423
2570
|
{
|
|
2424
2571
|
id: "760509",
|
|
@@ -2438,7 +2585,7 @@ var schedule_2026_default = [
|
|
|
2438
2585
|
flag: "\u{1F3F3}\uFE0F"
|
|
2439
2586
|
},
|
|
2440
2587
|
status: "SCHEDULED",
|
|
2441
|
-
updatedAt: "2026-06-
|
|
2588
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2442
2589
|
},
|
|
2443
2590
|
{
|
|
2444
2591
|
id: "760508",
|
|
@@ -2458,7 +2605,7 @@ var schedule_2026_default = [
|
|
|
2458
2605
|
flag: "\u{1F3F3}\uFE0F"
|
|
2459
2606
|
},
|
|
2460
2607
|
status: "SCHEDULED",
|
|
2461
|
-
updatedAt: "2026-06-
|
|
2608
|
+
updatedAt: "2026-06-24T01:20:06.593Z"
|
|
2462
2609
|
},
|
|
2463
2610
|
{
|
|
2464
2611
|
id: "760510",
|
|
@@ -2468,17 +2615,17 @@ var schedule_2026_default = [
|
|
|
2468
2615
|
city: "Foxborough, Massachusetts",
|
|
2469
2616
|
country: "USA",
|
|
2470
2617
|
home: {
|
|
2471
|
-
code: "
|
|
2618
|
+
code: "RD32",
|
|
2472
2619
|
name: "Round of 16 1 Winner",
|
|
2473
2620
|
flag: "\u{1F3F3}\uFE0F"
|
|
2474
2621
|
},
|
|
2475
2622
|
away: {
|
|
2476
|
-
code: "
|
|
2623
|
+
code: "RD32",
|
|
2477
2624
|
name: "Round of 16 2 Winner",
|
|
2478
2625
|
flag: "\u{1F3F3}\uFE0F"
|
|
2479
2626
|
},
|
|
2480
2627
|
status: "SCHEDULED",
|
|
2481
|
-
updatedAt: "2026-06-
|
|
2628
|
+
updatedAt: "2026-06-24T01:20:06.650Z"
|
|
2482
2629
|
},
|
|
2483
2630
|
{
|
|
2484
2631
|
id: "760511",
|
|
@@ -2488,17 +2635,17 @@ var schedule_2026_default = [
|
|
|
2488
2635
|
city: "Inglewood, California",
|
|
2489
2636
|
country: "USA",
|
|
2490
2637
|
home: {
|
|
2491
|
-
code: "
|
|
2638
|
+
code: "RD32",
|
|
2492
2639
|
name: "Round of 16 5 Winner",
|
|
2493
2640
|
flag: "\u{1F3F3}\uFE0F"
|
|
2494
2641
|
},
|
|
2495
2642
|
away: {
|
|
2496
|
-
code: "
|
|
2643
|
+
code: "RD32",
|
|
2497
2644
|
name: "Round of 16 6 Winner",
|
|
2498
2645
|
flag: "\u{1F3F3}\uFE0F"
|
|
2499
2646
|
},
|
|
2500
2647
|
status: "SCHEDULED",
|
|
2501
|
-
updatedAt: "2026-06-
|
|
2648
|
+
updatedAt: "2026-06-24T01:20:06.650Z"
|
|
2502
2649
|
},
|
|
2503
2650
|
{
|
|
2504
2651
|
id: "760512",
|
|
@@ -2508,17 +2655,17 @@ var schedule_2026_default = [
|
|
|
2508
2655
|
city: "Miami Gardens, Florida",
|
|
2509
2656
|
country: "USA",
|
|
2510
2657
|
home: {
|
|
2511
|
-
code: "
|
|
2658
|
+
code: "RD32",
|
|
2512
2659
|
name: "Round of 16 3 Winner",
|
|
2513
2660
|
flag: "\u{1F3F3}\uFE0F"
|
|
2514
2661
|
},
|
|
2515
2662
|
away: {
|
|
2516
|
-
code: "
|
|
2663
|
+
code: "RD32",
|
|
2517
2664
|
name: "Round of 16 4 Winner",
|
|
2518
2665
|
flag: "\u{1F3F3}\uFE0F"
|
|
2519
2666
|
},
|
|
2520
2667
|
status: "SCHEDULED",
|
|
2521
|
-
updatedAt: "2026-06-
|
|
2668
|
+
updatedAt: "2026-06-24T01:20:06.650Z"
|
|
2522
2669
|
},
|
|
2523
2670
|
{
|
|
2524
2671
|
id: "760513",
|
|
@@ -2528,17 +2675,17 @@ var schedule_2026_default = [
|
|
|
2528
2675
|
city: "Kansas City, Missouri",
|
|
2529
2676
|
country: "USA",
|
|
2530
2677
|
home: {
|
|
2531
|
-
code: "
|
|
2678
|
+
code: "RD32",
|
|
2532
2679
|
name: "Round of 16 7 Winner",
|
|
2533
2680
|
flag: "\u{1F3F3}\uFE0F"
|
|
2534
2681
|
},
|
|
2535
2682
|
away: {
|
|
2536
|
-
code: "
|
|
2683
|
+
code: "RD32",
|
|
2537
2684
|
name: "Round of 16 8 Winner",
|
|
2538
2685
|
flag: "\u{1F3F3}\uFE0F"
|
|
2539
2686
|
},
|
|
2540
2687
|
status: "SCHEDULED",
|
|
2541
|
-
updatedAt: "2026-06-
|
|
2688
|
+
updatedAt: "2026-06-24T01:20:06.650Z"
|
|
2542
2689
|
},
|
|
2543
2690
|
{
|
|
2544
2691
|
id: "760514",
|
|
@@ -2548,17 +2695,17 @@ var schedule_2026_default = [
|
|
|
2548
2695
|
city: "Arlington, Texas",
|
|
2549
2696
|
country: "USA",
|
|
2550
2697
|
home: {
|
|
2551
|
-
code: "
|
|
2698
|
+
code: "RD32",
|
|
2552
2699
|
name: "Quarterfinal 1 Winner",
|
|
2553
2700
|
flag: "\u{1F3F3}\uFE0F"
|
|
2554
2701
|
},
|
|
2555
2702
|
away: {
|
|
2556
|
-
code: "
|
|
2703
|
+
code: "RD32",
|
|
2557
2704
|
name: "Quarterfinal 2 Winner",
|
|
2558
2705
|
flag: "\u{1F3F3}\uFE0F"
|
|
2559
2706
|
},
|
|
2560
2707
|
status: "SCHEDULED",
|
|
2561
|
-
updatedAt: "2026-06-
|
|
2708
|
+
updatedAt: "2026-06-24T01:20:06.650Z"
|
|
2562
2709
|
},
|
|
2563
2710
|
{
|
|
2564
2711
|
id: "760515",
|
|
@@ -2568,17 +2715,17 @@ var schedule_2026_default = [
|
|
|
2568
2715
|
city: "Atlanta, Georgia",
|
|
2569
2716
|
country: "USA",
|
|
2570
2717
|
home: {
|
|
2571
|
-
code: "
|
|
2718
|
+
code: "RD32",
|
|
2572
2719
|
name: "Quarterfinal 3 Winner",
|
|
2573
2720
|
flag: "\u{1F3F3}\uFE0F"
|
|
2574
2721
|
},
|
|
2575
2722
|
away: {
|
|
2576
|
-
code: "
|
|
2723
|
+
code: "RD32",
|
|
2577
2724
|
name: "Quarterfinal 4 Winner",
|
|
2578
2725
|
flag: "\u{1F3F3}\uFE0F"
|
|
2579
2726
|
},
|
|
2580
2727
|
status: "SCHEDULED",
|
|
2581
|
-
updatedAt: "2026-06-
|
|
2728
|
+
updatedAt: "2026-06-24T01:20:06.650Z"
|
|
2582
2729
|
},
|
|
2583
2730
|
{
|
|
2584
2731
|
id: "760516",
|
|
@@ -2588,17 +2735,17 @@ var schedule_2026_default = [
|
|
|
2588
2735
|
city: "Miami Gardens, Florida",
|
|
2589
2736
|
country: "USA",
|
|
2590
2737
|
home: {
|
|
2591
|
-
code: "
|
|
2738
|
+
code: "RD32",
|
|
2592
2739
|
name: "Semifinal 1 Loser",
|
|
2593
2740
|
flag: "\u{1F3F3}\uFE0F"
|
|
2594
2741
|
},
|
|
2595
2742
|
away: {
|
|
2596
|
-
code: "
|
|
2743
|
+
code: "RD32",
|
|
2597
2744
|
name: "Semifinal 2 Loser",
|
|
2598
2745
|
flag: "\u{1F3F3}\uFE0F"
|
|
2599
2746
|
},
|
|
2600
2747
|
status: "SCHEDULED",
|
|
2601
|
-
updatedAt: "2026-06-
|
|
2748
|
+
updatedAt: "2026-06-24T01:20:06.749Z"
|
|
2602
2749
|
},
|
|
2603
2750
|
{
|
|
2604
2751
|
id: "760517",
|
|
@@ -2608,24 +2755,72 @@ var schedule_2026_default = [
|
|
|
2608
2755
|
city: "East Rutherford, New Jersey",
|
|
2609
2756
|
country: "USA",
|
|
2610
2757
|
home: {
|
|
2611
|
-
code: "
|
|
2758
|
+
code: "RD32",
|
|
2612
2759
|
name: "Semifinal 1 Winner",
|
|
2613
2760
|
flag: "\u{1F3F3}\uFE0F"
|
|
2614
2761
|
},
|
|
2615
2762
|
away: {
|
|
2616
|
-
code: "
|
|
2763
|
+
code: "RD32",
|
|
2617
2764
|
name: "Semifinal 2 Winner",
|
|
2618
2765
|
flag: "\u{1F3F3}\uFE0F"
|
|
2619
2766
|
},
|
|
2620
2767
|
status: "SCHEDULED",
|
|
2621
|
-
updatedAt: "2026-06-
|
|
2768
|
+
updatedAt: "2026-06-24T01:20:06.749Z"
|
|
2622
2769
|
}
|
|
2623
2770
|
];
|
|
2624
2771
|
|
|
2772
|
+
// src/bracket/placeholders.ts
|
|
2773
|
+
var PLACEHOLDER_FLAG = "\u{1F3F3}\uFE0F";
|
|
2774
|
+
function winnerName(stage, index) {
|
|
2775
|
+
switch (stage) {
|
|
2776
|
+
case "R32":
|
|
2777
|
+
return `Round of 32 ${index} Winner`;
|
|
2778
|
+
case "R16":
|
|
2779
|
+
return `Round of 16 ${index} Winner`;
|
|
2780
|
+
case "QF":
|
|
2781
|
+
return `Quarterfinal ${index} Winner`;
|
|
2782
|
+
case "SF":
|
|
2783
|
+
return `Semifinal ${index} Winner`;
|
|
2784
|
+
default:
|
|
2785
|
+
return `${stage}-${index} Winner`;
|
|
2786
|
+
}
|
|
2787
|
+
}
|
|
2788
|
+
function slotRefToTeam(ref) {
|
|
2789
|
+
switch (ref.kind) {
|
|
2790
|
+
case "group":
|
|
2791
|
+
return {
|
|
2792
|
+
code: ref.position === 1 ? `1${ref.group}` : `2${ref.group}`,
|
|
2793
|
+
name: ref.position === 1 ? `Group ${ref.group} Winner` : `Group ${ref.group} 2nd Place`,
|
|
2794
|
+
flag: PLACEHOLDER_FLAG
|
|
2795
|
+
};
|
|
2796
|
+
case "third":
|
|
2797
|
+
return {
|
|
2798
|
+
code: "3RD",
|
|
2799
|
+
name: `Third Place Group ${ref.groups.join("/")}`,
|
|
2800
|
+
flag: PLACEHOLDER_FLAG
|
|
2801
|
+
};
|
|
2802
|
+
case "winner":
|
|
2803
|
+
return { code: "RD32", name: winnerName(ref.stage, ref.index), flag: PLACEHOLDER_FLAG };
|
|
2804
|
+
case "loser":
|
|
2805
|
+
return {
|
|
2806
|
+
code: "RD32",
|
|
2807
|
+
name: `Semifinal ${ref.index} Loser`,
|
|
2808
|
+
flag: PLACEHOLDER_FLAG
|
|
2809
|
+
};
|
|
2810
|
+
case "seed":
|
|
2811
|
+
return { code: "TBD", name: ref.label, flag: PLACEHOLDER_FLAG };
|
|
2812
|
+
default:
|
|
2813
|
+
return { code: "TBD", name: "TBD", flag: PLACEHOLDER_FLAG };
|
|
2814
|
+
}
|
|
2815
|
+
}
|
|
2816
|
+
function isResolvedNation(team) {
|
|
2817
|
+
return team.flag !== PLACEHOLDER_FLAG;
|
|
2818
|
+
}
|
|
2819
|
+
|
|
2625
2820
|
// src/schedule.ts
|
|
2626
2821
|
var SCHEDULE = schedule_2026_default;
|
|
2627
|
-
function sanitizeBundledFixture(m) {
|
|
2628
|
-
|
|
2822
|
+
function sanitizeBundledFixture(m, node) {
|
|
2823
|
+
const base = {
|
|
2629
2824
|
id: m.id,
|
|
2630
2825
|
stage: m.stage,
|
|
2631
2826
|
group: m.group,
|
|
@@ -2638,6 +2833,14 @@ function sanitizeBundledFixture(m) {
|
|
|
2638
2833
|
status: "SCHEDULED",
|
|
2639
2834
|
updatedAt: m.updatedAt
|
|
2640
2835
|
};
|
|
2836
|
+
if (node && m.stage !== "GROUP" && m.stage !== "FRIENDLY") {
|
|
2837
|
+
return {
|
|
2838
|
+
...base,
|
|
2839
|
+
home: slotRefToTeam(node.home),
|
|
2840
|
+
away: slotRefToTeam(node.away)
|
|
2841
|
+
};
|
|
2842
|
+
}
|
|
2843
|
+
return base;
|
|
2641
2844
|
}
|
|
2642
2845
|
function allFixtures() {
|
|
2643
2846
|
return SCHEDULE;
|
|
@@ -2698,11 +2901,11 @@ function blankRow(team) {
|
|
|
2698
2901
|
}
|
|
2699
2902
|
function computeStandings(matches) {
|
|
2700
2903
|
const rows = /* @__PURE__ */ new Map();
|
|
2701
|
-
const ensure = (
|
|
2702
|
-
let r = rows.get(
|
|
2904
|
+
const ensure = (t2) => {
|
|
2905
|
+
let r = rows.get(t2.code);
|
|
2703
2906
|
if (!r) {
|
|
2704
|
-
r = blankRow(
|
|
2705
|
-
rows.set(
|
|
2907
|
+
r = blankRow(t2);
|
|
2908
|
+
rows.set(t2.code, r);
|
|
2706
2909
|
}
|
|
2707
2910
|
return r;
|
|
2708
2911
|
};
|
|
@@ -2793,10 +2996,10 @@ function toInt(s) {
|
|
|
2793
2996
|
const n = parseInt(s, 10);
|
|
2794
2997
|
return Number.isFinite(n) ? n : void 0;
|
|
2795
2998
|
}
|
|
2796
|
-
function toTeam(
|
|
2797
|
-
const name =
|
|
2798
|
-
const code = (
|
|
2799
|
-
return { code, name, flag: nationToFlag(
|
|
2999
|
+
function toTeam(t2) {
|
|
3000
|
+
const name = t2?.displayName ?? t2?.name ?? t2?.location ?? t2?.shortDisplayName ?? "TBD";
|
|
3001
|
+
const code = (t2?.abbreviation ?? name.slice(0, 3)).toUpperCase();
|
|
3002
|
+
return { code, name, flag: nationToFlag(t2?.displayName ?? t2?.abbreviation ?? name) };
|
|
2800
3003
|
}
|
|
2801
3004
|
function mapEspnEvent(ev, ctx = {}) {
|
|
2802
3005
|
const comp = ev.competitions?.[0];
|
|
@@ -2814,6 +3017,11 @@ function mapEspnEvent(ev, ctx = {}) {
|
|
|
2814
3017
|
const hs = toInt(homeC?.score);
|
|
2815
3018
|
const as = toInt(awayC?.score);
|
|
2816
3019
|
const hasScore = status !== "SCHEDULED" && hs !== void 0 && as !== void 0;
|
|
3020
|
+
let winnerCode;
|
|
3021
|
+
if (isFinished(status)) {
|
|
3022
|
+
if (homeC?.winner) winnerCode = home.code;
|
|
3023
|
+
else if (awayC?.winner) winnerCode = away.code;
|
|
3024
|
+
}
|
|
2817
3025
|
return {
|
|
2818
3026
|
id: ev.id,
|
|
2819
3027
|
stage,
|
|
@@ -2827,6 +3035,7 @@ function mapEspnEvent(ev, ctx = {}) {
|
|
|
2827
3035
|
score: hasScore ? { home: hs, away: as } : void 0,
|
|
2828
3036
|
minute: parseMinute(ev.status ?? comp?.status),
|
|
2829
3037
|
status,
|
|
3038
|
+
winnerCode,
|
|
2830
3039
|
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2831
3040
|
};
|
|
2832
3041
|
}
|
|
@@ -2918,7 +3127,7 @@ var EspnAdapter = class {
|
|
|
2918
3127
|
const map = {};
|
|
2919
3128
|
try {
|
|
2920
3129
|
const tables = parseStandings(await this.get(this.standingsUrl()));
|
|
2921
|
-
for (const
|
|
3130
|
+
for (const t2 of tables) for (const r of t2.rows) map[r.team.code] = t2.group;
|
|
2922
3131
|
} catch {
|
|
2923
3132
|
}
|
|
2924
3133
|
this.groupMap = map;
|
|
@@ -2955,6 +3164,854 @@ var EspnAdapter = class {
|
|
|
2955
3164
|
}
|
|
2956
3165
|
};
|
|
2957
3166
|
|
|
3167
|
+
// src/bracket/parse.ts
|
|
3168
|
+
var PLACEHOLDER_FLAG2 = "\u{1F3F3}\uFE0F";
|
|
3169
|
+
function parseTeamSlot(team) {
|
|
3170
|
+
const name = team.name;
|
|
3171
|
+
let m = name.match(/^Group ([A-L]) Winner$/);
|
|
3172
|
+
if (m) return { kind: "group", position: 1, group: m[1] };
|
|
3173
|
+
m = name.match(/^Group ([A-L]) 2nd Place$/);
|
|
3174
|
+
if (m) return { kind: "group", position: 2, group: m[1] };
|
|
3175
|
+
m = name.match(/^Third Place Group ([A-L](?:\/[A-L])+)$/);
|
|
3176
|
+
if (m) return { kind: "third", groups: m[1].split("/") };
|
|
3177
|
+
m = name.match(/^Round of 32 (\d+) Winner$/);
|
|
3178
|
+
if (m) return { kind: "winner", stage: "R32", index: Number(m[1]) };
|
|
3179
|
+
m = name.match(/^Round of 16 (\d+) Winner$/);
|
|
3180
|
+
if (m) return { kind: "winner", stage: "R16", index: Number(m[1]) };
|
|
3181
|
+
m = name.match(/^Quarterfinal (\d+) Winner$/);
|
|
3182
|
+
if (m) return { kind: "winner", stage: "QF", index: Number(m[1]) };
|
|
3183
|
+
m = name.match(/^Semifinal (\d+) Winner$/);
|
|
3184
|
+
if (m) return { kind: "winner", stage: "SF", index: Number(m[1]) };
|
|
3185
|
+
m = name.match(/^Semifinal (\d+) Loser$/);
|
|
3186
|
+
if (m) return { kind: "loser", stage: "SF", index: Number(m[1]) };
|
|
3187
|
+
if (isResolvedNation(team)) {
|
|
3188
|
+
return { kind: "seed", label: team.name, code: "TBD" };
|
|
3189
|
+
}
|
|
3190
|
+
if (team.flag === PLACEHOLDER_FLAG2 && team.code === "TBD") {
|
|
3191
|
+
return { kind: "seed", label: team.name, code: "TBD" };
|
|
3192
|
+
}
|
|
3193
|
+
return null;
|
|
3194
|
+
}
|
|
3195
|
+
|
|
3196
|
+
// src/bracket/types.ts
|
|
3197
|
+
var BRACKET_STAGE_ORDER = ["R32", "R16", "QF", "SF", "3P", "F"];
|
|
3198
|
+
var EXPECTED_KNOCKOUT_COUNTS = {
|
|
3199
|
+
R32: 16,
|
|
3200
|
+
R16: 8,
|
|
3201
|
+
QF: 4,
|
|
3202
|
+
SF: 2,
|
|
3203
|
+
"3P": 1,
|
|
3204
|
+
F: 1
|
|
3205
|
+
};
|
|
3206
|
+
function teamFromMatch(match, code) {
|
|
3207
|
+
if (match.home.code === code) return match.home;
|
|
3208
|
+
if (match.away.code === code) return match.away;
|
|
3209
|
+
return void 0;
|
|
3210
|
+
}
|
|
3211
|
+
|
|
3212
|
+
// src/bracket/build.ts
|
|
3213
|
+
function matchKey(stage, index) {
|
|
3214
|
+
return `${stage}:${index}`;
|
|
3215
|
+
}
|
|
3216
|
+
function orderByBracketIndex(matches) {
|
|
3217
|
+
return [...matches].sort((a, b) => Number(a.id) - Number(b.id));
|
|
3218
|
+
}
|
|
3219
|
+
function buildBracketTopology(matches, generatedAt) {
|
|
3220
|
+
const knockout = matches.filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
|
|
3221
|
+
const problems = [];
|
|
3222
|
+
const nodes = [];
|
|
3223
|
+
for (const stage of BRACKET_STAGE_ORDER) {
|
|
3224
|
+
const stageMatches = orderByBracketIndex(knockout.filter((m) => m.stage === stage));
|
|
3225
|
+
const expected = EXPECTED_KNOCKOUT_COUNTS[stage];
|
|
3226
|
+
if (expected != null && stageMatches.length !== expected) {
|
|
3227
|
+
problems.push(`stage ${stage}: expected ${expected}, got ${stageMatches.length}`);
|
|
3228
|
+
}
|
|
3229
|
+
stageMatches.forEach((m, i) => {
|
|
3230
|
+
const home = parseTeamSlot(m.home);
|
|
3231
|
+
const away = parseTeamSlot(m.away);
|
|
3232
|
+
if (!home) problems.push(`${m.id}: unparsed home slot "${m.home.name}"`);
|
|
3233
|
+
if (!away) problems.push(`${m.id}: unparsed away slot "${m.away.name}"`);
|
|
3234
|
+
if (home && away) {
|
|
3235
|
+
nodes.push({ matchId: m.id, stage, index: i + 1, home, away });
|
|
3236
|
+
}
|
|
3237
|
+
});
|
|
3238
|
+
}
|
|
3239
|
+
const knockoutIds = new Set(knockout.map((m) => m.id));
|
|
3240
|
+
const topologyIds = new Set(nodes.map((n) => n.matchId));
|
|
3241
|
+
for (const id of knockoutIds) {
|
|
3242
|
+
if (!topologyIds.has(id)) problems.push(`knockout fixture ${id} missing from topology`);
|
|
3243
|
+
}
|
|
3244
|
+
for (const id of topologyIds) {
|
|
3245
|
+
if (!knockoutIds.has(id)) problems.push(`topology match ${id} not in knockout schedule`);
|
|
3246
|
+
}
|
|
3247
|
+
validateWinnerChain(nodes, problems);
|
|
3248
|
+
validateThirdPlace(nodes, problems);
|
|
3249
|
+
validateBracketIndexing(knockout, nodes, problems);
|
|
3250
|
+
if (problems.length > 0) {
|
|
3251
|
+
throw new Error(
|
|
3252
|
+
`bracket topology validation failed:
|
|
3253
|
+
${problems.map((p) => ` - ${p}`).join("\n")}`
|
|
3254
|
+
);
|
|
3255
|
+
}
|
|
3256
|
+
return { generatedAt, stages: [...BRACKET_STAGE_ORDER], matches: nodes };
|
|
3257
|
+
}
|
|
3258
|
+
function validateBracketIndexing(knockout, nodes, problems) {
|
|
3259
|
+
for (const stage of ["R32", "R16"]) {
|
|
3260
|
+
const byKickoff2 = [...knockout.filter((m) => m.stage === stage)].sort(
|
|
3261
|
+
(a, b) => a.kickoff.localeCompare(b.kickoff)
|
|
3262
|
+
);
|
|
3263
|
+
const byId = orderByBracketIndex(knockout.filter((m) => m.stage === stage));
|
|
3264
|
+
const kickoffIds = byKickoff2.map((m) => m.id).join(",");
|
|
3265
|
+
const idIds = byId.map((m) => m.id).join(",");
|
|
3266
|
+
if (kickoffIds !== idIds) {
|
|
3267
|
+
const diverged = byKickoff2.map((m, i) => ({ kickoffRank: i + 1, idRank: byId.findIndex((x) => x.id === m.id) + 1, id: m.id })).filter((x) => x.kickoffRank !== x.idRank);
|
|
3268
|
+
if (diverged.length > 0 && stage === "R32") {
|
|
3269
|
+
const r32ById = new Map(nodes.filter((n) => n.stage === "R32").map((n) => [n.index, n.matchId]));
|
|
3270
|
+
const r16First = nodes.find((n) => n.stage === "R16" && n.index === 1);
|
|
3271
|
+
if (r16First) {
|
|
3272
|
+
const home = r16First.home;
|
|
3273
|
+
const away = r16First.away;
|
|
3274
|
+
if (home.kind === "winner" && home.stage === "R32") {
|
|
3275
|
+
const expectedId = r32ById.get(home.index);
|
|
3276
|
+
if (!expectedId) {
|
|
3277
|
+
problems.push(`R32 index ${home.index} missing for R16-1 home ref`);
|
|
3278
|
+
}
|
|
3279
|
+
}
|
|
3280
|
+
if (away.kind === "winner" && away.stage === "R32") {
|
|
3281
|
+
const expectedId = r32ById.get(away.index);
|
|
3282
|
+
if (!expectedId) {
|
|
3283
|
+
problems.push(`R32 index ${away.index} missing for R16-1 away ref`);
|
|
3284
|
+
}
|
|
3285
|
+
}
|
|
3286
|
+
}
|
|
3287
|
+
}
|
|
3288
|
+
}
|
|
3289
|
+
}
|
|
3290
|
+
}
|
|
3291
|
+
function validateWinnerChain(nodes, problems) {
|
|
3292
|
+
const indexMap = new Map(nodes.map((n) => [matchKey(n.stage, n.index), n]));
|
|
3293
|
+
const chains = [
|
|
3294
|
+
{ from: "R32", to: "R16", count: 16 },
|
|
3295
|
+
{ from: "R16", to: "QF", count: 8 },
|
|
3296
|
+
{ from: "QF", to: "SF", count: 4 },
|
|
3297
|
+
{ from: "SF", to: "F", count: 2 }
|
|
3298
|
+
];
|
|
3299
|
+
for (const { from, to, count } of chains) {
|
|
3300
|
+
const refs = nodes.filter((n) => n.stage === to).flatMap((n) => [n.home, n.away]).filter((r) => r.kind === "winner" && r.stage === from);
|
|
3301
|
+
const indices = refs.map((r) => r.index);
|
|
3302
|
+
if (indices.length !== count) {
|
|
3303
|
+
problems.push(`${to}: expected ${count} ${from} winner refs, got ${indices.length}`);
|
|
3304
|
+
}
|
|
3305
|
+
const unique = new Set(indices);
|
|
3306
|
+
if (unique.size !== count) {
|
|
3307
|
+
problems.push(`${to}: ${from} winner indices must be unique 1..${count}`);
|
|
3308
|
+
}
|
|
3309
|
+
for (let i = 1; i <= count; i++) {
|
|
3310
|
+
if (!unique.has(i)) problems.push(`${to}: missing ${from} winner index ${i}`);
|
|
3311
|
+
if (!indexMap.has(matchKey(from, i))) problems.push(`missing ${from} match index ${i}`);
|
|
3312
|
+
}
|
|
3313
|
+
}
|
|
3314
|
+
}
|
|
3315
|
+
function validateThirdPlace(nodes, problems) {
|
|
3316
|
+
const third = nodes.find((n) => n.stage === "3P");
|
|
3317
|
+
if (!third) {
|
|
3318
|
+
problems.push("missing third-place play-off node");
|
|
3319
|
+
return;
|
|
3320
|
+
}
|
|
3321
|
+
const slots = [third.home, third.away];
|
|
3322
|
+
const indices = /* @__PURE__ */ new Set();
|
|
3323
|
+
for (const slot of slots) {
|
|
3324
|
+
if (slot.kind !== "loser" || slot.stage !== "SF") {
|
|
3325
|
+
problems.push("3P slots must reference SF losers");
|
|
3326
|
+
return;
|
|
3327
|
+
}
|
|
3328
|
+
indices.add(slot.index);
|
|
3329
|
+
}
|
|
3330
|
+
if (!indices.has(1) || !indices.has(2)) {
|
|
3331
|
+
problems.push("3P must reference Semifinal 1 Loser and Semifinal 2 Loser");
|
|
3332
|
+
}
|
|
3333
|
+
}
|
|
3334
|
+
|
|
3335
|
+
// src/bracket/resolve.ts
|
|
3336
|
+
function isGroupComplete(group, tables, standingsDegraded) {
|
|
3337
|
+
if (standingsDegraded) return false;
|
|
3338
|
+
const table = tables.find((t2) => t2.group === group);
|
|
3339
|
+
if (!table?.rows.length || table.rows.length !== 4) return false;
|
|
3340
|
+
return table.rows.every((r) => r.played >= 3);
|
|
3341
|
+
}
|
|
3342
|
+
function teamFromStandings(group, position, tables) {
|
|
3343
|
+
const table = tables.find((t2) => t2.group === group);
|
|
3344
|
+
if (!table) return void 0;
|
|
3345
|
+
const row = table.rows[position - 1];
|
|
3346
|
+
return row?.team;
|
|
3347
|
+
}
|
|
3348
|
+
function resolveWinner(match) {
|
|
3349
|
+
if (!isFinished(match.status)) return void 0;
|
|
3350
|
+
if (match.winnerCode) {
|
|
3351
|
+
const w = teamFromMatch(match, match.winnerCode);
|
|
3352
|
+
if (w && w.flag !== "\u{1F3F3}\uFE0F") return w;
|
|
3353
|
+
}
|
|
3354
|
+
if (!match.score) return void 0;
|
|
3355
|
+
const outcome = outcomeFromScore(match.score.home, match.score.away);
|
|
3356
|
+
if (outcome === "H") return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
|
|
3357
|
+
if (outcome === "A") return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
|
|
3358
|
+
return void 0;
|
|
3359
|
+
}
|
|
3360
|
+
function resolveLoser(match) {
|
|
3361
|
+
if (!isFinished(match.status)) return void 0;
|
|
3362
|
+
if (match.winnerCode) {
|
|
3363
|
+
const winner = teamFromMatch(match, match.winnerCode);
|
|
3364
|
+
if (winner?.code === match.home.code) {
|
|
3365
|
+
return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
|
|
3366
|
+
}
|
|
3367
|
+
if (winner?.code === match.away.code) {
|
|
3368
|
+
return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
|
|
3369
|
+
}
|
|
3370
|
+
}
|
|
3371
|
+
if (!match.score) return void 0;
|
|
3372
|
+
const outcome = outcomeFromScore(match.score.home, match.score.away);
|
|
3373
|
+
if (outcome === "H") return match.away.flag !== "\u{1F3F3}\uFE0F" ? match.away : void 0;
|
|
3374
|
+
if (outcome === "A") return match.home.flag !== "\u{1F3F3}\uFE0F" ? match.home : void 0;
|
|
3375
|
+
return void 0;
|
|
3376
|
+
}
|
|
3377
|
+
function participant(team, status) {
|
|
3378
|
+
return { label: team.name, flag: team.flag, code: team.code, status };
|
|
3379
|
+
}
|
|
3380
|
+
function tbd(label) {
|
|
3381
|
+
return { label, flag: "\u{1F3F3}\uFE0F", status: "tbd" };
|
|
3382
|
+
}
|
|
3383
|
+
function winnerLabel(ctx, stage, index) {
|
|
3384
|
+
return t(ctx.lang, "bracket.slot.winner", {
|
|
3385
|
+
stage: stageLabelI18n(ctx.lang, stage),
|
|
3386
|
+
n: String(index)
|
|
3387
|
+
});
|
|
3388
|
+
}
|
|
3389
|
+
function resolveSlot(ref, ctx) {
|
|
3390
|
+
switch (ref.kind) {
|
|
3391
|
+
case "seed":
|
|
3392
|
+
return tbd(ref.label);
|
|
3393
|
+
case "group": {
|
|
3394
|
+
if (isGroupComplete(ref.group, ctx.tables, ctx.standingsDegraded)) {
|
|
3395
|
+
const team = teamFromStandings(ref.group, ref.position, ctx.tables);
|
|
3396
|
+
if (team) return participant(team, "projected");
|
|
3397
|
+
}
|
|
3398
|
+
const label = ref.position === 1 ? t(ctx.lang, "bracket.slot.groupWinner", { group: ref.group }) : t(ctx.lang, "bracket.slot.groupSecond", { group: ref.group });
|
|
3399
|
+
return tbd(label);
|
|
3400
|
+
}
|
|
3401
|
+
case "third":
|
|
3402
|
+
return tbd(t(ctx.lang, "bracket.slot.third", { groups: ref.groups.join("/") }));
|
|
3403
|
+
case "winner": {
|
|
3404
|
+
const node = ctx.nodesByKey.get(matchKey(ref.stage, ref.index));
|
|
3405
|
+
const match = node ? ctx.matchesById.get(node.matchId) : void 0;
|
|
3406
|
+
if (match) {
|
|
3407
|
+
const winner = resolveWinner(match);
|
|
3408
|
+
if (winner) return participant(winner, "confirmed");
|
|
3409
|
+
}
|
|
3410
|
+
return tbd(winnerLabel(ctx, ref.stage, ref.index));
|
|
3411
|
+
}
|
|
3412
|
+
case "loser": {
|
|
3413
|
+
const node = ctx.nodesByKey.get(matchKey(ref.stage, ref.index));
|
|
3414
|
+
const match = node ? ctx.matchesById.get(node.matchId) : void 0;
|
|
3415
|
+
if (match) {
|
|
3416
|
+
const loser = resolveLoser(match);
|
|
3417
|
+
if (loser) return participant(loser, "confirmed");
|
|
3418
|
+
}
|
|
3419
|
+
return tbd(
|
|
3420
|
+
t(ctx.lang, "bracket.slot.loser", {
|
|
3421
|
+
stage: stageLabelI18n(ctx.lang, ref.stage),
|
|
3422
|
+
n: String(ref.index)
|
|
3423
|
+
})
|
|
3424
|
+
);
|
|
3425
|
+
}
|
|
3426
|
+
default:
|
|
3427
|
+
return tbd(t(ctx.lang, "bracket.slot.tbd"));
|
|
3428
|
+
}
|
|
3429
|
+
}
|
|
3430
|
+
function buildBracketView(topology, matches, tables, standingsDegraded, liveDegraded, filterStage, lang) {
|
|
3431
|
+
const knockout = matches.filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
|
|
3432
|
+
const matchesById = new Map(knockout.map((m) => [m.id, m]));
|
|
3433
|
+
const nodesByKey = new Map(topology.matches.map((n) => [matchKey(n.stage, n.index), n]));
|
|
3434
|
+
const ctx = { nodesByKey, matchesById, tables, standingsDegraded, lang };
|
|
3435
|
+
const want = filterStage?.toUpperCase();
|
|
3436
|
+
const stages = [];
|
|
3437
|
+
for (const stage of topology.stages) {
|
|
3438
|
+
if (want && stage !== want) continue;
|
|
3439
|
+
const nodes = topology.matches.filter((n) => n.stage === stage);
|
|
3440
|
+
const matchViews = nodes.map((node) => {
|
|
3441
|
+
const match = matchesById.get(node.matchId) ?? {
|
|
3442
|
+
id: node.matchId,
|
|
3443
|
+
stage: node.stage,
|
|
3444
|
+
kickoff: "",
|
|
3445
|
+
venue: "",
|
|
3446
|
+
home: { code: "?", name: "TBD", flag: "\u{1F3F3}\uFE0F" },
|
|
3447
|
+
away: { code: "?", name: "TBD", flag: "\u{1F3F3}\uFE0F" },
|
|
3448
|
+
status: "SCHEDULED",
|
|
3449
|
+
updatedAt: ""
|
|
3450
|
+
};
|
|
3451
|
+
return {
|
|
3452
|
+
matchId: node.matchId,
|
|
3453
|
+
stage: node.stage,
|
|
3454
|
+
index: node.index,
|
|
3455
|
+
kickoff: match.kickoff,
|
|
3456
|
+
home: resolveSlot(node.home, ctx),
|
|
3457
|
+
away: resolveSlot(node.away, ctx),
|
|
3458
|
+
match
|
|
3459
|
+
};
|
|
3460
|
+
});
|
|
3461
|
+
stages.push({
|
|
3462
|
+
stage,
|
|
3463
|
+
label: stageLabelI18n(lang, stage),
|
|
3464
|
+
matches: matchViews
|
|
3465
|
+
});
|
|
3466
|
+
}
|
|
3467
|
+
return {
|
|
3468
|
+
stages,
|
|
3469
|
+
degraded: liveDegraded,
|
|
3470
|
+
standingsDegraded
|
|
3471
|
+
};
|
|
3472
|
+
}
|
|
3473
|
+
|
|
3474
|
+
// src/data/bracket.2026.json
|
|
3475
|
+
var bracket_2026_default = {
|
|
3476
|
+
generatedAt: "2026-06-24T01:20:06.749Z",
|
|
3477
|
+
stages: [
|
|
3478
|
+
"R32",
|
|
3479
|
+
"R16",
|
|
3480
|
+
"QF",
|
|
3481
|
+
"SF",
|
|
3482
|
+
"3P",
|
|
3483
|
+
"F"
|
|
3484
|
+
],
|
|
3485
|
+
matches: [
|
|
3486
|
+
{
|
|
3487
|
+
matchId: "760486",
|
|
3488
|
+
stage: "R32",
|
|
3489
|
+
index: 1,
|
|
3490
|
+
home: {
|
|
3491
|
+
kind: "group",
|
|
3492
|
+
position: 2,
|
|
3493
|
+
group: "A"
|
|
3494
|
+
},
|
|
3495
|
+
away: {
|
|
3496
|
+
kind: "group",
|
|
3497
|
+
position: 2,
|
|
3498
|
+
group: "B"
|
|
3499
|
+
}
|
|
3500
|
+
},
|
|
3501
|
+
{
|
|
3502
|
+
matchId: "760487",
|
|
3503
|
+
stage: "R32",
|
|
3504
|
+
index: 2,
|
|
3505
|
+
home: {
|
|
3506
|
+
kind: "group",
|
|
3507
|
+
position: 1,
|
|
3508
|
+
group: "C"
|
|
3509
|
+
},
|
|
3510
|
+
away: {
|
|
3511
|
+
kind: "group",
|
|
3512
|
+
position: 2,
|
|
3513
|
+
group: "F"
|
|
3514
|
+
}
|
|
3515
|
+
},
|
|
3516
|
+
{
|
|
3517
|
+
matchId: "760488",
|
|
3518
|
+
stage: "R32",
|
|
3519
|
+
index: 3,
|
|
3520
|
+
home: {
|
|
3521
|
+
kind: "group",
|
|
3522
|
+
position: 1,
|
|
3523
|
+
group: "F"
|
|
3524
|
+
},
|
|
3525
|
+
away: {
|
|
3526
|
+
kind: "group",
|
|
3527
|
+
position: 2,
|
|
3528
|
+
group: "C"
|
|
3529
|
+
}
|
|
3530
|
+
},
|
|
3531
|
+
{
|
|
3532
|
+
matchId: "760489",
|
|
3533
|
+
stage: "R32",
|
|
3534
|
+
index: 4,
|
|
3535
|
+
home: {
|
|
3536
|
+
kind: "seed",
|
|
3537
|
+
label: "Germany",
|
|
3538
|
+
code: "TBD"
|
|
3539
|
+
},
|
|
3540
|
+
away: {
|
|
3541
|
+
kind: "third",
|
|
3542
|
+
groups: [
|
|
3543
|
+
"A",
|
|
3544
|
+
"B",
|
|
3545
|
+
"C",
|
|
3546
|
+
"D",
|
|
3547
|
+
"F"
|
|
3548
|
+
]
|
|
3549
|
+
}
|
|
3550
|
+
},
|
|
3551
|
+
{
|
|
3552
|
+
matchId: "760490",
|
|
3553
|
+
stage: "R32",
|
|
3554
|
+
index: 5,
|
|
3555
|
+
home: {
|
|
3556
|
+
kind: "group",
|
|
3557
|
+
position: 2,
|
|
3558
|
+
group: "E"
|
|
3559
|
+
},
|
|
3560
|
+
away: {
|
|
3561
|
+
kind: "group",
|
|
3562
|
+
position: 2,
|
|
3563
|
+
group: "I"
|
|
3564
|
+
}
|
|
3565
|
+
},
|
|
3566
|
+
{
|
|
3567
|
+
matchId: "760491",
|
|
3568
|
+
stage: "R32",
|
|
3569
|
+
index: 6,
|
|
3570
|
+
home: {
|
|
3571
|
+
kind: "seed",
|
|
3572
|
+
label: "Mexico",
|
|
3573
|
+
code: "TBD"
|
|
3574
|
+
},
|
|
3575
|
+
away: {
|
|
3576
|
+
kind: "third",
|
|
3577
|
+
groups: [
|
|
3578
|
+
"C",
|
|
3579
|
+
"E",
|
|
3580
|
+
"F",
|
|
3581
|
+
"H",
|
|
3582
|
+
"I"
|
|
3583
|
+
]
|
|
3584
|
+
}
|
|
3585
|
+
},
|
|
3586
|
+
{
|
|
3587
|
+
matchId: "760492",
|
|
3588
|
+
stage: "R32",
|
|
3589
|
+
index: 7,
|
|
3590
|
+
home: {
|
|
3591
|
+
kind: "group",
|
|
3592
|
+
position: 1,
|
|
3593
|
+
group: "I"
|
|
3594
|
+
},
|
|
3595
|
+
away: {
|
|
3596
|
+
kind: "third",
|
|
3597
|
+
groups: [
|
|
3598
|
+
"C",
|
|
3599
|
+
"D",
|
|
3600
|
+
"F",
|
|
3601
|
+
"G",
|
|
3602
|
+
"H"
|
|
3603
|
+
]
|
|
3604
|
+
}
|
|
3605
|
+
},
|
|
3606
|
+
{
|
|
3607
|
+
matchId: "760493",
|
|
3608
|
+
stage: "R32",
|
|
3609
|
+
index: 8,
|
|
3610
|
+
home: {
|
|
3611
|
+
kind: "group",
|
|
3612
|
+
position: 1,
|
|
3613
|
+
group: "G"
|
|
3614
|
+
},
|
|
3615
|
+
away: {
|
|
3616
|
+
kind: "third",
|
|
3617
|
+
groups: [
|
|
3618
|
+
"A",
|
|
3619
|
+
"E",
|
|
3620
|
+
"H",
|
|
3621
|
+
"I",
|
|
3622
|
+
"J"
|
|
3623
|
+
]
|
|
3624
|
+
}
|
|
3625
|
+
},
|
|
3626
|
+
{
|
|
3627
|
+
matchId: "760494",
|
|
3628
|
+
stage: "R32",
|
|
3629
|
+
index: 9,
|
|
3630
|
+
home: {
|
|
3631
|
+
kind: "seed",
|
|
3632
|
+
label: "United States",
|
|
3633
|
+
code: "TBD"
|
|
3634
|
+
},
|
|
3635
|
+
away: {
|
|
3636
|
+
kind: "third",
|
|
3637
|
+
groups: [
|
|
3638
|
+
"B",
|
|
3639
|
+
"E",
|
|
3640
|
+
"F",
|
|
3641
|
+
"I",
|
|
3642
|
+
"J"
|
|
3643
|
+
]
|
|
3644
|
+
}
|
|
3645
|
+
},
|
|
3646
|
+
{
|
|
3647
|
+
matchId: "760495",
|
|
3648
|
+
stage: "R32",
|
|
3649
|
+
index: 10,
|
|
3650
|
+
home: {
|
|
3651
|
+
kind: "group",
|
|
3652
|
+
position: 1,
|
|
3653
|
+
group: "L"
|
|
3654
|
+
},
|
|
3655
|
+
away: {
|
|
3656
|
+
kind: "third",
|
|
3657
|
+
groups: [
|
|
3658
|
+
"E",
|
|
3659
|
+
"H",
|
|
3660
|
+
"I",
|
|
3661
|
+
"J",
|
|
3662
|
+
"K"
|
|
3663
|
+
]
|
|
3664
|
+
}
|
|
3665
|
+
},
|
|
3666
|
+
{
|
|
3667
|
+
matchId: "760496",
|
|
3668
|
+
stage: "R32",
|
|
3669
|
+
index: 11,
|
|
3670
|
+
home: {
|
|
3671
|
+
kind: "group",
|
|
3672
|
+
position: 2,
|
|
3673
|
+
group: "K"
|
|
3674
|
+
},
|
|
3675
|
+
away: {
|
|
3676
|
+
kind: "group",
|
|
3677
|
+
position: 2,
|
|
3678
|
+
group: "L"
|
|
3679
|
+
}
|
|
3680
|
+
},
|
|
3681
|
+
{
|
|
3682
|
+
matchId: "760497",
|
|
3683
|
+
stage: "R32",
|
|
3684
|
+
index: 12,
|
|
3685
|
+
home: {
|
|
3686
|
+
kind: "group",
|
|
3687
|
+
position: 1,
|
|
3688
|
+
group: "H"
|
|
3689
|
+
},
|
|
3690
|
+
away: {
|
|
3691
|
+
kind: "group",
|
|
3692
|
+
position: 2,
|
|
3693
|
+
group: "J"
|
|
3694
|
+
}
|
|
3695
|
+
},
|
|
3696
|
+
{
|
|
3697
|
+
matchId: "760498",
|
|
3698
|
+
stage: "R32",
|
|
3699
|
+
index: 13,
|
|
3700
|
+
home: {
|
|
3701
|
+
kind: "group",
|
|
3702
|
+
position: 1,
|
|
3703
|
+
group: "B"
|
|
3704
|
+
},
|
|
3705
|
+
away: {
|
|
3706
|
+
kind: "third",
|
|
3707
|
+
groups: [
|
|
3708
|
+
"E",
|
|
3709
|
+
"F",
|
|
3710
|
+
"G",
|
|
3711
|
+
"I",
|
|
3712
|
+
"J"
|
|
3713
|
+
]
|
|
3714
|
+
}
|
|
3715
|
+
},
|
|
3716
|
+
{
|
|
3717
|
+
matchId: "760499",
|
|
3718
|
+
stage: "R32",
|
|
3719
|
+
index: 14,
|
|
3720
|
+
home: {
|
|
3721
|
+
kind: "group",
|
|
3722
|
+
position: 2,
|
|
3723
|
+
group: "D"
|
|
3724
|
+
},
|
|
3725
|
+
away: {
|
|
3726
|
+
kind: "group",
|
|
3727
|
+
position: 2,
|
|
3728
|
+
group: "G"
|
|
3729
|
+
}
|
|
3730
|
+
},
|
|
3731
|
+
{
|
|
3732
|
+
matchId: "760500",
|
|
3733
|
+
stage: "R32",
|
|
3734
|
+
index: 15,
|
|
3735
|
+
home: {
|
|
3736
|
+
kind: "seed",
|
|
3737
|
+
label: "Argentina",
|
|
3738
|
+
code: "TBD"
|
|
3739
|
+
},
|
|
3740
|
+
away: {
|
|
3741
|
+
kind: "group",
|
|
3742
|
+
position: 2,
|
|
3743
|
+
group: "H"
|
|
3744
|
+
}
|
|
3745
|
+
},
|
|
3746
|
+
{
|
|
3747
|
+
matchId: "760501",
|
|
3748
|
+
stage: "R32",
|
|
3749
|
+
index: 16,
|
|
3750
|
+
home: {
|
|
3751
|
+
kind: "group",
|
|
3752
|
+
position: 1,
|
|
3753
|
+
group: "K"
|
|
3754
|
+
},
|
|
3755
|
+
away: {
|
|
3756
|
+
kind: "third",
|
|
3757
|
+
groups: [
|
|
3758
|
+
"D",
|
|
3759
|
+
"E",
|
|
3760
|
+
"I",
|
|
3761
|
+
"J",
|
|
3762
|
+
"L"
|
|
3763
|
+
]
|
|
3764
|
+
}
|
|
3765
|
+
},
|
|
3766
|
+
{
|
|
3767
|
+
matchId: "760502",
|
|
3768
|
+
stage: "R16",
|
|
3769
|
+
index: 1,
|
|
3770
|
+
home: {
|
|
3771
|
+
kind: "winner",
|
|
3772
|
+
stage: "R32",
|
|
3773
|
+
index: 1
|
|
3774
|
+
},
|
|
3775
|
+
away: {
|
|
3776
|
+
kind: "winner",
|
|
3777
|
+
stage: "R32",
|
|
3778
|
+
index: 3
|
|
3779
|
+
}
|
|
3780
|
+
},
|
|
3781
|
+
{
|
|
3782
|
+
matchId: "760503",
|
|
3783
|
+
stage: "R16",
|
|
3784
|
+
index: 2,
|
|
3785
|
+
home: {
|
|
3786
|
+
kind: "winner",
|
|
3787
|
+
stage: "R32",
|
|
3788
|
+
index: 2
|
|
3789
|
+
},
|
|
3790
|
+
away: {
|
|
3791
|
+
kind: "winner",
|
|
3792
|
+
stage: "R32",
|
|
3793
|
+
index: 5
|
|
3794
|
+
}
|
|
3795
|
+
},
|
|
3796
|
+
{
|
|
3797
|
+
matchId: "760504",
|
|
3798
|
+
stage: "R16",
|
|
3799
|
+
index: 3,
|
|
3800
|
+
home: {
|
|
3801
|
+
kind: "winner",
|
|
3802
|
+
stage: "R32",
|
|
3803
|
+
index: 4
|
|
3804
|
+
},
|
|
3805
|
+
away: {
|
|
3806
|
+
kind: "winner",
|
|
3807
|
+
stage: "R32",
|
|
3808
|
+
index: 6
|
|
3809
|
+
}
|
|
3810
|
+
},
|
|
3811
|
+
{
|
|
3812
|
+
matchId: "760505",
|
|
3813
|
+
stage: "R16",
|
|
3814
|
+
index: 4,
|
|
3815
|
+
home: {
|
|
3816
|
+
kind: "winner",
|
|
3817
|
+
stage: "R32",
|
|
3818
|
+
index: 7
|
|
3819
|
+
},
|
|
3820
|
+
away: {
|
|
3821
|
+
kind: "winner",
|
|
3822
|
+
stage: "R32",
|
|
3823
|
+
index: 8
|
|
3824
|
+
}
|
|
3825
|
+
},
|
|
3826
|
+
{
|
|
3827
|
+
matchId: "760506",
|
|
3828
|
+
stage: "R16",
|
|
3829
|
+
index: 5,
|
|
3830
|
+
home: {
|
|
3831
|
+
kind: "winner",
|
|
3832
|
+
stage: "R32",
|
|
3833
|
+
index: 11
|
|
3834
|
+
},
|
|
3835
|
+
away: {
|
|
3836
|
+
kind: "winner",
|
|
3837
|
+
stage: "R32",
|
|
3838
|
+
index: 12
|
|
3839
|
+
}
|
|
3840
|
+
},
|
|
3841
|
+
{
|
|
3842
|
+
matchId: "760507",
|
|
3843
|
+
stage: "R16",
|
|
3844
|
+
index: 6,
|
|
3845
|
+
home: {
|
|
3846
|
+
kind: "winner",
|
|
3847
|
+
stage: "R32",
|
|
3848
|
+
index: 9
|
|
3849
|
+
},
|
|
3850
|
+
away: {
|
|
3851
|
+
kind: "winner",
|
|
3852
|
+
stage: "R32",
|
|
3853
|
+
index: 10
|
|
3854
|
+
}
|
|
3855
|
+
},
|
|
3856
|
+
{
|
|
3857
|
+
matchId: "760508",
|
|
3858
|
+
stage: "R16",
|
|
3859
|
+
index: 7,
|
|
3860
|
+
home: {
|
|
3861
|
+
kind: "winner",
|
|
3862
|
+
stage: "R32",
|
|
3863
|
+
index: 13
|
|
3864
|
+
},
|
|
3865
|
+
away: {
|
|
3866
|
+
kind: "winner",
|
|
3867
|
+
stage: "R32",
|
|
3868
|
+
index: 15
|
|
3869
|
+
}
|
|
3870
|
+
},
|
|
3871
|
+
{
|
|
3872
|
+
matchId: "760509",
|
|
3873
|
+
stage: "R16",
|
|
3874
|
+
index: 8,
|
|
3875
|
+
home: {
|
|
3876
|
+
kind: "winner",
|
|
3877
|
+
stage: "R32",
|
|
3878
|
+
index: 14
|
|
3879
|
+
},
|
|
3880
|
+
away: {
|
|
3881
|
+
kind: "winner",
|
|
3882
|
+
stage: "R32",
|
|
3883
|
+
index: 16
|
|
3884
|
+
}
|
|
3885
|
+
},
|
|
3886
|
+
{
|
|
3887
|
+
matchId: "760510",
|
|
3888
|
+
stage: "QF",
|
|
3889
|
+
index: 1,
|
|
3890
|
+
home: {
|
|
3891
|
+
kind: "winner",
|
|
3892
|
+
stage: "R16",
|
|
3893
|
+
index: 1
|
|
3894
|
+
},
|
|
3895
|
+
away: {
|
|
3896
|
+
kind: "winner",
|
|
3897
|
+
stage: "R16",
|
|
3898
|
+
index: 2
|
|
3899
|
+
}
|
|
3900
|
+
},
|
|
3901
|
+
{
|
|
3902
|
+
matchId: "760511",
|
|
3903
|
+
stage: "QF",
|
|
3904
|
+
index: 2,
|
|
3905
|
+
home: {
|
|
3906
|
+
kind: "winner",
|
|
3907
|
+
stage: "R16",
|
|
3908
|
+
index: 5
|
|
3909
|
+
},
|
|
3910
|
+
away: {
|
|
3911
|
+
kind: "winner",
|
|
3912
|
+
stage: "R16",
|
|
3913
|
+
index: 6
|
|
3914
|
+
}
|
|
3915
|
+
},
|
|
3916
|
+
{
|
|
3917
|
+
matchId: "760512",
|
|
3918
|
+
stage: "QF",
|
|
3919
|
+
index: 3,
|
|
3920
|
+
home: {
|
|
3921
|
+
kind: "winner",
|
|
3922
|
+
stage: "R16",
|
|
3923
|
+
index: 3
|
|
3924
|
+
},
|
|
3925
|
+
away: {
|
|
3926
|
+
kind: "winner",
|
|
3927
|
+
stage: "R16",
|
|
3928
|
+
index: 4
|
|
3929
|
+
}
|
|
3930
|
+
},
|
|
3931
|
+
{
|
|
3932
|
+
matchId: "760513",
|
|
3933
|
+
stage: "QF",
|
|
3934
|
+
index: 4,
|
|
3935
|
+
home: {
|
|
3936
|
+
kind: "winner",
|
|
3937
|
+
stage: "R16",
|
|
3938
|
+
index: 7
|
|
3939
|
+
},
|
|
3940
|
+
away: {
|
|
3941
|
+
kind: "winner",
|
|
3942
|
+
stage: "R16",
|
|
3943
|
+
index: 8
|
|
3944
|
+
}
|
|
3945
|
+
},
|
|
3946
|
+
{
|
|
3947
|
+
matchId: "760514",
|
|
3948
|
+
stage: "SF",
|
|
3949
|
+
index: 1,
|
|
3950
|
+
home: {
|
|
3951
|
+
kind: "winner",
|
|
3952
|
+
stage: "QF",
|
|
3953
|
+
index: 1
|
|
3954
|
+
},
|
|
3955
|
+
away: {
|
|
3956
|
+
kind: "winner",
|
|
3957
|
+
stage: "QF",
|
|
3958
|
+
index: 2
|
|
3959
|
+
}
|
|
3960
|
+
},
|
|
3961
|
+
{
|
|
3962
|
+
matchId: "760515",
|
|
3963
|
+
stage: "SF",
|
|
3964
|
+
index: 2,
|
|
3965
|
+
home: {
|
|
3966
|
+
kind: "winner",
|
|
3967
|
+
stage: "QF",
|
|
3968
|
+
index: 3
|
|
3969
|
+
},
|
|
3970
|
+
away: {
|
|
3971
|
+
kind: "winner",
|
|
3972
|
+
stage: "QF",
|
|
3973
|
+
index: 4
|
|
3974
|
+
}
|
|
3975
|
+
},
|
|
3976
|
+
{
|
|
3977
|
+
matchId: "760516",
|
|
3978
|
+
stage: "3P",
|
|
3979
|
+
index: 1,
|
|
3980
|
+
home: {
|
|
3981
|
+
kind: "loser",
|
|
3982
|
+
stage: "SF",
|
|
3983
|
+
index: 1
|
|
3984
|
+
},
|
|
3985
|
+
away: {
|
|
3986
|
+
kind: "loser",
|
|
3987
|
+
stage: "SF",
|
|
3988
|
+
index: 2
|
|
3989
|
+
}
|
|
3990
|
+
},
|
|
3991
|
+
{
|
|
3992
|
+
matchId: "760517",
|
|
3993
|
+
stage: "F",
|
|
3994
|
+
index: 1,
|
|
3995
|
+
home: {
|
|
3996
|
+
kind: "winner",
|
|
3997
|
+
stage: "SF",
|
|
3998
|
+
index: 1
|
|
3999
|
+
},
|
|
4000
|
+
away: {
|
|
4001
|
+
kind: "winner",
|
|
4002
|
+
stage: "SF",
|
|
4003
|
+
index: 2
|
|
4004
|
+
}
|
|
4005
|
+
}
|
|
4006
|
+
]
|
|
4007
|
+
};
|
|
4008
|
+
|
|
4009
|
+
// src/bracket/topology.ts
|
|
4010
|
+
var TOPOLOGY = bracket_2026_default;
|
|
4011
|
+
function loadBracketTopology() {
|
|
4012
|
+
return TOPOLOGY;
|
|
4013
|
+
}
|
|
4014
|
+
|
|
2958
4015
|
// src/live.ts
|
|
2959
4016
|
function resolveCompetition(explicit) {
|
|
2960
4017
|
if (explicit) return explicit;
|
|
@@ -2996,7 +4053,7 @@ async function getStandings(adapter, group) {
|
|
|
2996
4053
|
if (adapter.fetchStandings) {
|
|
2997
4054
|
try {
|
|
2998
4055
|
const all = await adapter.fetchStandings();
|
|
2999
|
-
const tables2 = (want ? all.filter((
|
|
4056
|
+
const tables2 = (want ? all.filter((t2) => t2.group === want) : all).sort(
|
|
3000
4057
|
(a, b) => a.group.localeCompare(b.group)
|
|
3001
4058
|
);
|
|
3002
4059
|
return { tables: tables2, degraded: false, source: adapter.name };
|
|
@@ -3004,9 +4061,45 @@ async function getStandings(adapter, group) {
|
|
|
3004
4061
|
}
|
|
3005
4062
|
}
|
|
3006
4063
|
const letters = want ? [want] : groups();
|
|
3007
|
-
const tables = letters.map((g) => ({ group: g, rows: rosterAtZero(fixturesByGroup(g)) })).filter((
|
|
4064
|
+
const tables = letters.map((g) => ({ group: g, rows: rosterAtZero(fixturesByGroup(g)) })).filter((t2) => t2.rows.length > 0);
|
|
3008
4065
|
return { tables, degraded: true };
|
|
3009
4066
|
}
|
|
4067
|
+
var KNOCKOUT_WINDOW_START = "20260628";
|
|
4068
|
+
var KNOCKOUT_WINDOW_END = "20260719";
|
|
4069
|
+
async function getBracket(adapter, opts = {}) {
|
|
4070
|
+
const topology = loadBracketTopology();
|
|
4071
|
+
const base = allFixtures().filter((m) => m.stage !== "GROUP" && m.stage !== "FRIENDLY");
|
|
4072
|
+
let matches = base;
|
|
4073
|
+
let liveDegraded = true;
|
|
4074
|
+
let source;
|
|
4075
|
+
try {
|
|
4076
|
+
const live = adapter.fetchWindow ? await adapter.fetchWindow(KNOCKOUT_WINDOW_START, KNOCKOUT_WINDOW_END) : [];
|
|
4077
|
+
matches = mergeLive(base, live);
|
|
4078
|
+
liveDegraded = false;
|
|
4079
|
+
source = adapter.name;
|
|
4080
|
+
} catch {
|
|
4081
|
+
}
|
|
4082
|
+
const standings = await getStandings(adapter);
|
|
4083
|
+
if (!source && !standings.degraded && standings.source) {
|
|
4084
|
+
source = standings.source;
|
|
4085
|
+
}
|
|
4086
|
+
const view = buildBracketView(
|
|
4087
|
+
topology,
|
|
4088
|
+
matches,
|
|
4089
|
+
standings.tables,
|
|
4090
|
+
standings.degraded,
|
|
4091
|
+
liveDegraded,
|
|
4092
|
+
opts.stage,
|
|
4093
|
+
opts.lang
|
|
4094
|
+
);
|
|
4095
|
+
if (source) view.source = source;
|
|
4096
|
+
return {
|
|
4097
|
+
view,
|
|
4098
|
+
degraded: liveDegraded,
|
|
4099
|
+
standingsDegraded: standings.degraded,
|
|
4100
|
+
source
|
|
4101
|
+
};
|
|
4102
|
+
}
|
|
3010
4103
|
function shiftUtcDate(dateISO, days) {
|
|
3011
4104
|
const [y, m, d] = dateISO.slice(0, 10).split("-").map(Number);
|
|
3012
4105
|
return new Date(Date.UTC(y ?? 1970, (m ?? 1) - 1, (d ?? 1) + days)).toISOString().slice(0, 10);
|
|
@@ -3164,9 +4257,9 @@ function outcomeLabel(o, match) {
|
|
|
3164
4257
|
return o.label;
|
|
3165
4258
|
}
|
|
3166
4259
|
function utcHhmm(iso) {
|
|
3167
|
-
const
|
|
3168
|
-
if (!Number.isFinite(
|
|
3169
|
-
return `${new Date(
|
|
4260
|
+
const t2 = Date.parse(iso);
|
|
4261
|
+
if (!Number.isFinite(t2)) return "";
|
|
4262
|
+
return `${new Date(t2).toISOString().slice(11, 16)} UTC`;
|
|
3170
4263
|
}
|
|
3171
4264
|
function marketFavoriteText(signal, match) {
|
|
3172
4265
|
const fav = signal.favorite;
|
|
@@ -3614,7 +4707,134 @@ function formatShareTable(input, options = {}) {
|
|
|
3614
4707
|
);
|
|
3615
4708
|
return blocks.join("\n\n");
|
|
3616
4709
|
}
|
|
4710
|
+
|
|
4711
|
+
// src/bracket/format.ts
|
|
4712
|
+
function formatParticipant(p, side, flags, locale) {
|
|
4713
|
+
const suffix = p.status === "projected" ? ` ${t(locale, "bracket.projected")}` : "";
|
|
4714
|
+
if (!flags || p.flag === "\u{1F3F3}\uFE0F") {
|
|
4715
|
+
if (p.code && p.code !== "TBD") return `${p.code}${suffix}`;
|
|
4716
|
+
return `${p.label}${suffix}`;
|
|
4717
|
+
}
|
|
4718
|
+
if (side === "home") return `${p.flag} ${p.label}${suffix}`;
|
|
4719
|
+
return `${p.label}${suffix} ${p.flag}`;
|
|
4720
|
+
}
|
|
4721
|
+
function statusTail2(m) {
|
|
4722
|
+
if (m.status === "LIVE" && m.minute) return ` ${m.minute}'`;
|
|
4723
|
+
if (m.status === "HT") return " HT";
|
|
4724
|
+
if (m.status === "FT") return " FT";
|
|
4725
|
+
if (isLive(m.status)) return " LIVE";
|
|
4726
|
+
return "";
|
|
4727
|
+
}
|
|
4728
|
+
function formatBracketMatchLine(mv, opts = {}) {
|
|
4729
|
+
const flags = opts.flags !== false;
|
|
4730
|
+
const home = formatParticipant(mv.home, "home", flags, opts.locale);
|
|
4731
|
+
const away = formatParticipant(mv.away, "away", flags, opts.locale);
|
|
4732
|
+
const m = mv.match;
|
|
4733
|
+
if (isFinished(m.status) || isLive(m.status)) {
|
|
4734
|
+
return ` ${home} ${scoreline(m)} ${away}${statusTail2(m)}`;
|
|
4735
|
+
}
|
|
4736
|
+
const kickoff = mv.kickoff ? formatKickoff(mv.kickoff, { tz: opts.tz, locale: opts.locale }) : "";
|
|
4737
|
+
return ` ${home} vs ${away}${kickoff ? ` \xB7 ${kickoff}` : ""}`;
|
|
4738
|
+
}
|
|
4739
|
+
function formatBracketList(view, opts = {}) {
|
|
4740
|
+
const blocks = [];
|
|
4741
|
+
for (const stage of view.stages) {
|
|
4742
|
+
blocks.push(stage.label);
|
|
4743
|
+
for (const mv of stage.matches) {
|
|
4744
|
+
blocks.push(formatBracketMatchLine(mv, opts));
|
|
4745
|
+
}
|
|
4746
|
+
blocks.push("");
|
|
4747
|
+
}
|
|
4748
|
+
if (opts.footer !== false) {
|
|
4749
|
+
if (view.degraded) {
|
|
4750
|
+
blocks.push(`(${t(opts.locale, "bracket.degraded")})`);
|
|
4751
|
+
} else if (view.standingsDegraded) {
|
|
4752
|
+
blocks.push(`(${t(opts.locale, "bracket.standingsDegraded")})`);
|
|
4753
|
+
}
|
|
4754
|
+
if (view.source) {
|
|
4755
|
+
blocks.push(t(opts.locale, "live.data", { source: liveSourceLabel(view.source) }));
|
|
4756
|
+
}
|
|
4757
|
+
}
|
|
4758
|
+
return blocks.join("\n").trimEnd();
|
|
4759
|
+
}
|
|
4760
|
+
var MIN_TREE_WIDTH = 80;
|
|
4761
|
+
function formatBracketTree(view, opts = {}) {
|
|
4762
|
+
const width = opts.width ?? 80;
|
|
4763
|
+
if (width < MIN_TREE_WIDTH) return null;
|
|
4764
|
+
const blocks = [];
|
|
4765
|
+
for (let i = 0; i < view.stages.length; i++) {
|
|
4766
|
+
const stage = view.stages[i];
|
|
4767
|
+
blocks.push(`\u2501\u2501\u2501 ${stage.label} \u2501\u2501\u2501`);
|
|
4768
|
+
for (const mv of stage.matches) {
|
|
4769
|
+
blocks.push(formatBracketMatchLine(mv, opts));
|
|
4770
|
+
}
|
|
4771
|
+
if (i < view.stages.length - 1) {
|
|
4772
|
+
blocks.push(" \u2502");
|
|
4773
|
+
blocks.push(" \u25BC");
|
|
4774
|
+
}
|
|
4775
|
+
blocks.push("");
|
|
4776
|
+
}
|
|
4777
|
+
if (opts.footer !== false) {
|
|
4778
|
+
if (view.degraded) {
|
|
4779
|
+
blocks.push(`(${t(opts.locale, "bracket.degraded")})`);
|
|
4780
|
+
} else if (view.standingsDegraded) {
|
|
4781
|
+
blocks.push(`(${t(opts.locale, "bracket.standingsDegraded")})`);
|
|
4782
|
+
}
|
|
4783
|
+
if (view.source) {
|
|
4784
|
+
blocks.push(t(opts.locale, "live.data", { source: liveSourceLabel(view.source) }));
|
|
4785
|
+
}
|
|
4786
|
+
}
|
|
4787
|
+
return blocks.join("\n").trimEnd();
|
|
4788
|
+
}
|
|
4789
|
+
function formatShareBracket(input, options = {}) {
|
|
4790
|
+
const includeHashtag = options.includeHashtag !== false;
|
|
4791
|
+
const includeInstall = options.includeInstallLine !== false;
|
|
4792
|
+
const locale = options.locale;
|
|
4793
|
+
const blocks = [t(locale, "bracket.shareTitle"), ""];
|
|
4794
|
+
if (input.view.stages.length === 0) {
|
|
4795
|
+
blocks.push(input.emptyNote ?? t(locale, "bracket.empty"));
|
|
4796
|
+
} else if ((options.style ?? "social") === "compact") {
|
|
4797
|
+
const fmtOpts = { locale, tz: options.tz };
|
|
4798
|
+
const lines = input.view.stages.flatMap(
|
|
4799
|
+
(stage) => stage.matches.map((mv) => formatBracketCompactLine(mv, fmtOpts))
|
|
4800
|
+
);
|
|
4801
|
+
blocks.push(lines.join("\n"));
|
|
4802
|
+
if (input.view.degraded) {
|
|
4803
|
+
blocks.push(`(${t(locale, "bracket.degraded")})`);
|
|
4804
|
+
} else if (input.view.standingsDegraded) {
|
|
4805
|
+
blocks.push(`(${t(locale, "bracket.standingsDegraded")})`);
|
|
4806
|
+
}
|
|
4807
|
+
} else {
|
|
4808
|
+
blocks.push(formatBracketList(input.view, { footer: false, locale, tz: options.tz }));
|
|
4809
|
+
if (input.view.degraded) {
|
|
4810
|
+
blocks.push(`(${t(locale, "bracket.degraded")})`);
|
|
4811
|
+
} else if (input.view.standingsDegraded) {
|
|
4812
|
+
blocks.push(`(${t(locale, "bracket.standingsDegraded")})`);
|
|
4813
|
+
}
|
|
4814
|
+
}
|
|
4815
|
+
const footer = [];
|
|
4816
|
+
const src = input.source ?? input.view.source;
|
|
4817
|
+
if (src) footer.push(t(locale, "live.data", { source: liveSourceLabel(src) }));
|
|
4818
|
+
footer.push(
|
|
4819
|
+
[includeHashtag ? SHARE_HASHTAG : "", SHARE_DISCLAIMER].filter(Boolean).join(" \xB7 ")
|
|
4820
|
+
);
|
|
4821
|
+
if (includeInstall && input.installLine) {
|
|
4822
|
+
footer.push(t(locale, "share.tryIt", { line: input.installLine }));
|
|
4823
|
+
}
|
|
4824
|
+
blocks.push("", footer.join("\n"));
|
|
4825
|
+
return blocks.join("\n");
|
|
4826
|
+
}
|
|
4827
|
+
function formatBracketCompactLine(mv, opts = {}) {
|
|
4828
|
+
const flags = opts.flags !== false;
|
|
4829
|
+
const home = formatParticipant(mv.home, "home", flags, opts.locale);
|
|
4830
|
+
const away = formatParticipant(mv.away, "away", flags, opts.locale);
|
|
4831
|
+
const m = mv.match;
|
|
4832
|
+
const mid2 = isFinished(m.status) || isLive(m.status) ? scoreline(m) : "vs";
|
|
4833
|
+
const tail = m.status === "SCHEDULED" && mv.kickoff ? ` \xB7 ${formatKickoff(mv.kickoff, { tz: opts.tz, locale: opts.locale })}` : statusTail2(m);
|
|
4834
|
+
return `${stageLabelI18n(opts.locale, mv.stage)} \xB7 ${home} ${mid2} ${away}${tail}`;
|
|
4835
|
+
}
|
|
3617
4836
|
export {
|
|
4837
|
+
BRACKET_STAGE_ORDER,
|
|
3618
4838
|
DEFAULT_COMPETITION,
|
|
3619
4839
|
DEFAULT_FLAVOR,
|
|
3620
4840
|
DEFAULT_MAX_AGE_MS,
|
|
@@ -3627,6 +4847,8 @@ export {
|
|
|
3627
4847
|
SHARE_HASHTAG,
|
|
3628
4848
|
allFixtures,
|
|
3629
4849
|
asFlavorLevel,
|
|
4850
|
+
buildBracketTopology,
|
|
4851
|
+
buildBracketView,
|
|
3630
4852
|
buildMarketSignal,
|
|
3631
4853
|
byKickoff,
|
|
3632
4854
|
competitionBase,
|
|
@@ -3640,11 +4862,17 @@ export {
|
|
|
3640
4862
|
fixturesByTeam,
|
|
3641
4863
|
fixturesInLiveWindow,
|
|
3642
4864
|
flagEmoji,
|
|
4865
|
+
formatBracketCompactLine,
|
|
4866
|
+
formatBracketList,
|
|
4867
|
+
formatBracketMatchLine,
|
|
4868
|
+
formatBracketTree,
|
|
3643
4869
|
formatDate,
|
|
3644
4870
|
formatKickoff,
|
|
4871
|
+
formatShareBracket,
|
|
3645
4872
|
formatShareSnippet,
|
|
3646
4873
|
formatShareTable,
|
|
3647
4874
|
formatTime,
|
|
4875
|
+
getBracket,
|
|
3648
4876
|
getLiveMatches,
|
|
3649
4877
|
getMarketSignal,
|
|
3650
4878
|
getMarketSignals,
|
|
@@ -3661,6 +4889,7 @@ export {
|
|
|
3661
4889
|
isValidDate,
|
|
3662
4890
|
isValidTimeZone,
|
|
3663
4891
|
liveSourceLabel,
|
|
4892
|
+
loadBracketTopology,
|
|
3664
4893
|
localDate,
|
|
3665
4894
|
makeAdapter,
|
|
3666
4895
|
makeMarketProvider,
|
|
@@ -3675,18 +4904,23 @@ export {
|
|
|
3675
4904
|
marketRelevant,
|
|
3676
4905
|
marketSourceLabel,
|
|
3677
4906
|
matchFlavor,
|
|
4907
|
+
matchKey,
|
|
3678
4908
|
matchLocation,
|
|
3679
4909
|
mergeLive,
|
|
3680
4910
|
nationToFlag,
|
|
3681
4911
|
nationToRegion,
|
|
3682
4912
|
nextFixtureForTeam,
|
|
4913
|
+
normalizeLang,
|
|
3683
4914
|
normalizeOutcomes,
|
|
3684
4915
|
outcomeFromScore,
|
|
3685
4916
|
parseStandings,
|
|
4917
|
+
parseTeamSlot,
|
|
3686
4918
|
resolveCompetition,
|
|
3687
4919
|
resolveMarketSource,
|
|
3688
4920
|
resolveTz,
|
|
3689
4921
|
sanitizeBundledFixture,
|
|
3690
4922
|
scoreline,
|
|
3691
|
-
stageLabel
|
|
4923
|
+
stageLabel,
|
|
4924
|
+
stageLabelI18n,
|
|
4925
|
+
t
|
|
3692
4926
|
};
|