diff --git a/.gitignore b/.gitignore index 5329a1b8f..d91ecfdb2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ cache/*.* +coverage/ +dist/ node_modules/ diff --git a/docs/general/AFG.ics b/docs/general/AFG.ics index 1660ed74d..21e0817c6 100644 --- a/docs/general/AFG.ics +++ b/docs/general/AFG.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T123000Z-cycling-road-WOMENS-INDIVIDUAL-TIME-TRIAL @@ -48,6 +48,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ALB.ics b/docs/general/ALB.ics index 22d6c8ac6..f6999d132 100644 --- a/docs/general/ALB.ics +++ b/docs/general/ALB.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T103000Z-shooting-10M-AIR-PISTOL-WOMENS-QUALIFICATION @@ -64,6 +64,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ALG.ics b/docs/general/ALG.ics index ff18eccd7..e81fd4fbe 100644 --- a/docs/general/ALG.ics +++ b/docs/general/ALG.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T063000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-B-KOR-A @@ -662,6 +662,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/AND.ics b/docs/general/AND.ics index e669c7735..2ebbdb335 100644 --- a/docs/general/AND.ics +++ b/docs/general/AND.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T140000Z-canoe-slalom-WOMENS-KAYAK-SINGLE-HEATS-1ST-RUN @@ -121,6 +121,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ANG.ics b/docs/general/ANG.ics index dafc375bd..64225c04f 100644 --- a/docs/general/ANG.ics +++ b/docs/general/ANG.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T090000Z-judo-MEN-66-KG-ELIMINATION-ROUND-OF-32-ANG-TKM @@ -93,6 +93,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ARG.ics b/docs/general/ARG.ics index 4dfae1261..028c4d598 100644 --- a/docs/general/ARG.ics +++ b/docs/general/ARG.ics @@ -84,7 +84,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -1322,6 +1322,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ARM.ics b/docs/general/ARM.ics index 55f1d80e3..a4eb3b97f 100644 --- a/docs/general/ARM.ics +++ b/docs/general/ARM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T103000Z-shooting-10M-AIR-PISTOL-WOMENS-QUALIFICATION @@ -51,6 +51,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ARU.ics b/docs/general/ARU.ics index 9c9215fca..d68767f52 100644 --- a/docs/general/ARU.ics +++ b/docs/general/ARU.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -359,6 +359,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/AUS.ics b/docs/general/AUS.ics index 19c9b8e91..47724aece 100644 --- a/docs/general/AUS.ics +++ b/docs/general/AUS.ics @@ -114,7 +114,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -2698,6 +2698,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/AUT.ics b/docs/general/AUT.ics index b8af6b7d3..682cd1e06 100644 --- a/docs/general/AUT.ics +++ b/docs/general/AUT.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -1327,6 +1327,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/AZE.ics b/docs/general/AZE.ics index bcc69fa74..281a1cc83 100644 --- a/docs/general/AZE.ics +++ b/docs/general/AZE.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T063000Z-badminton-WOMENS-SINGLES-GROUP-PLAY-STAGE-GROUP-N-CHN- @@ -403,6 +403,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BAN.ics b/docs/general/BAN.ics index 174c66e57..cce69fe5f 100644 --- a/docs/general/BAN.ics +++ b/docs/general/BAN.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T091500Z-shooting-10M-AIR-RIFLE-MENS-QUALIFICATION @@ -82,6 +82,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BAR.ics b/docs/general/BAR.ics index 8127fca58..65eeefbbe 100644 --- a/docs/general/BAR.ics +++ b/docs/general/BAR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T060000Z-triathlon-MENS-INDIVIDUAL @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BDI.ics b/docs/general/BDI.ics index 5fffca534..b4d42478e 100644 --- a/docs/general/BDI.ics +++ b/docs/general/BDI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240801T083000Z-judo-WOMEN-78-KG-ELIMINATION-ROUND-OF-32-POL-BDI @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BEL.ics b/docs/general/BEL.ics index aed390cb3..04a80eadc 100644 --- a/docs/general/BEL.ics +++ b/docs/general/BEL.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -988,6 +988,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BEN.ics b/docs/general/BEN.ics index d2103f9ae..668692390 100644 --- a/docs/general/BEN.ics +++ b/docs/general/BEN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T083600Z-judo-MEN-81-KG-ELIMINATION-ROUND-OF-32-ITA-BEN @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BER.ics b/docs/general/BER.ics index eaf8658e0..a48ba2e58 100644 --- a/docs/general/BER.ics +++ b/docs/general/BER.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T074200Z-rowing-MENS-SINGLE-SCULLS-SEMIFINAL-EF-2 @@ -94,6 +94,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BHU.ics b/docs/general/BHU.ics index 1a3d7c91c..c0364812f 100644 --- a/docs/general/BHU.ics +++ b/docs/general/BHU.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240731T124900Z-archery-MENS-INDIVIDUAL-132-ELIMINATION-ROUND-ITA-BHU @@ -57,6 +57,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BIH.ics b/docs/general/BIH.ics index d7d3820c0..3524ee4fe 100644 --- a/docs/general/BIH.ics +++ b/docs/general/BIH.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240731T081200Z-judo-WOMEN-70-KG-ELIMINATION-ROUND-OF-32-BIH-DEN @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BRA.ics b/docs/general/BRA.ics index 3d8fef279..3a23c992f 100644 --- a/docs/general/BRA.ics +++ b/docs/general/BRA.ics @@ -87,7 +87,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -2397,6 +2397,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BRN.ics b/docs/general/BRN.ics index d995eb013..dd3c153c4 100644 --- a/docs/general/BRN.ics +++ b/docs/general/BRN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T082400Z-judo-MEN-81-KG-ELIMINATION-ROUND-OF-32-BRN-TUR @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BUL.ics b/docs/general/BUL.ics index 40ef76542..63bf98b66 100644 --- a/docs/general/BUL.ics +++ b/docs/general/BUL.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -267,6 +267,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/BUR.ics b/docs/general/BUR.ics index 626acf030..a91376277 100644 --- a/docs/general/BUR.ics +++ b/docs/general/BUR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240731T081200Z-judo-MEN-90-KG-ELIMINATION-ROUND-OF-32-KOR-BUR @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CAF.ics b/docs/general/CAF.ics index 91ac40596..89a2a121b 100644 --- a/docs/general/CAF.ics +++ b/docs/general/CAF.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T081200Z-judo-WOMEN-63-KG-ELIMINATION-ROUND-OF-32-CAF-CRO @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CAN.ics b/docs/general/CAN.ics index 054bd18ce..4e4f130db 100644 --- a/docs/general/CAN.ics +++ b/docs/general/CAN.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T072000Z-badminton-MENS-DOUBLES-GROUP-PLAY-STAGE-GROUP-A-CHN-CA @@ -2150,6 +2150,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CGO.ics b/docs/general/CGO.ics index fbd86b0a2..ed48939d5 100644 --- a/docs/general/CGO.ics +++ b/docs/general/CGO.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T093000Z-table-tennis-MENS-SINGLES-ROUND-OF-64-CGO-SWE @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CHA.ics b/docs/general/CHA.ics index 1982a782a..38821a259 100644 --- a/docs/general/CHA.ics +++ b/docs/general/CHA.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T123600Z-archery-MENS-INDIVIDUAL-132-ELIMINATION-ROUND-KOR-CHA @@ -66,6 +66,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CHI.ics b/docs/general/CHI.ics index 5527cfe3f..ddf6cd47a 100644 --- a/docs/general/CHI.ics +++ b/docs/general/CHI.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -304,6 +304,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CHN.ics b/docs/general/CHN.ics index 60bfca2f3..d2b221ba7 100644 --- a/docs/general/CHN.ics +++ b/docs/general/CHN.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T063000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-D-CHN-U @@ -3398,6 +3398,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CIV.ics b/docs/general/CIV.ics index be2e25bcd..5cc1127e0 100644 --- a/docs/general/CIV.ics +++ b/docs/general/CIV.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T092500Z-fencing-WOMENS-FOIL-INDIVIDUAL-TABLE-OF-32-CIV-FRA @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CMR.ics b/docs/general/CMR.ics index ed2050d84..c04c94214 100644 --- a/docs/general/CMR.ics +++ b/docs/general/CMR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T130000Z-table-tennis-WOMENS-SINGLES-PRELIMINARY-ROUND-CMR-GUY @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/COD.ics b/docs/general/COD.ics index a2eeb4940..96d321b05 100644 --- a/docs/general/COD.ics +++ b/docs/general/COD.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-COD-ISR @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/COL.ics b/docs/general/COL.ics index 07a34d9e7..21659a26e 100644 --- a/docs/general/COL.ics +++ b/docs/general/COL.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T091200Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-TPE-COL @@ -379,6 +379,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/COM.ics b/docs/general/COM.ics index 94640b953..47a9cac69 100644 --- a/docs/general/COM.ics +++ b/docs/general/COM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T140000Z-canoe-slalom-MENS-KAYAK-SINGLE-HEATS-1ST-RUN @@ -71,6 +71,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CPV.ics b/docs/general/CPV.ics index 44f9e230a..d1d3c1408 100644 --- a/docs/general/CPV.ics +++ b/docs/general/CPV.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T082400Z-judo-WOMEN-52-KG-ELIMINATION-ROUND-OF-32-BRA-CPV @@ -55,6 +55,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CRC.ics b/docs/general/CRC.ics index 291a2a6c8..9a7b3c0b5 100644 --- a/docs/general/CRC.ics +++ b/docs/general/CRC.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T082400Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-CRC-BRA @@ -47,6 +47,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CRO.ics b/docs/general/CRO.ics index da1b438eb..f1aa8b52e 100644 --- a/docs/general/CRO.ics +++ b/docs/general/CRO.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T120000Z-handball-MENS-PRELIMINARY-ROUND-GROUP-A-CRO-JPN @@ -982,6 +982,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CUB.ics b/docs/general/CUB.ics index 674346b6f..e07b166b5 100644 --- a/docs/general/CUB.ics +++ b/docs/general/CUB.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T103000Z-shooting-10M-AIR-PISTOL-WOMENS-QUALIFICATION @@ -367,6 +367,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CYP.ics b/docs/general/CYP.ics index 051a01182..937e30ff8 100644 --- a/docs/general/CYP.ics +++ b/docs/general/CYP.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T081800Z-judo-WOMEN-52-KG-ELIMINATION-ROUND-OF-32-MAR-CYP @@ -414,6 +414,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/CZE.ics b/docs/general/CZE.ics index fd460b856..858f3241c 100644 --- a/docs/general/CZE.ics +++ b/docs/general/CZE.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -1672,6 +1672,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/DEN.ics b/docs/general/DEN.ics index b6f58b417..a187a80f0 100644 --- a/docs/general/DEN.ics +++ b/docs/general/DEN.ics @@ -49,7 +49,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -1341,6 +1341,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/DJI.ics b/docs/general/DJI.ics index abd13478d..fccd7adc5 100644 --- a/docs/general/DJI.ics +++ b/docs/general/DJI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T084200Z-judo-MEN-73-KG-ELIMINATION-ROUND-OF-32-BUL-DJI @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/DOM.ics b/docs/general/DOM.ics index ad294f7ff..9cb61d913 100644 --- a/docs/general/DOM.ics +++ b/docs/general/DOM.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T130000Z-football-MENS-GROUP-C-DOM-ESP @@ -201,6 +201,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ECU.ics b/docs/general/ECU.ics index a88374b10..1b4bc6413 100644 --- a/docs/general/ECU.ics +++ b/docs/general/ECU.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -249,6 +249,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/EGY.ics b/docs/general/EGY.ics index f62116204..d6f0d0a74 100644 --- a/docs/general/EGY.ics +++ b/docs/general/EGY.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -962,6 +962,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/EOR.ics b/docs/general/EOR.ics index c630b12b5..1d07d8bbd 100644 --- a/docs/general/EOR.ics +++ b/docs/general/EOR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T072000Z-badminton-WOMENS-SINGLES-GROUP-PLAY-STAGE-GROUP-I-SGP- @@ -232,6 +232,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ERI.ics b/docs/general/ERI.ics index a86fb5032..ca6f5686a 100644 --- a/docs/general/ERI.ics +++ b/docs/general/ERI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T143200Z-cycling-road-MENS-INDIVIDUAL-TIME-TRIAL @@ -39,6 +39,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ESA.ics b/docs/general/ESA.ics index 54eee2ea1..5c1f1c0c1 100644 --- a/docs/general/ESA.ics +++ b/docs/general/ESA.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T081800Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-ESA-BEL @@ -152,6 +152,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ESP.ics b/docs/general/ESP.ics index dd4cbb1fa..7afae9b79 100644 --- a/docs/general/ESP.ics +++ b/docs/general/ESP.ics @@ -96,7 +96,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-handball-MENS-PRELIMINARY-ROUND-GROUP-A-ESP-SLO @@ -2783,6 +2783,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/EST.ics b/docs/general/EST.ics index 88ff70eda..055e6a42b 100644 --- a/docs/general/EST.ics +++ b/docs/general/EST.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T091500Z-fencing-WOMENS-PE-INDIVIDUAL-TABLE-OF-32-KOR-EST @@ -550,6 +550,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/FIJ.ics b/docs/general/FIJ.ics index c689c7fe6..6f0a21290 100644 --- a/docs/general/FIJ.ics +++ b/docs/general/FIJ.ics @@ -46,7 +46,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T140000Z-rugby-sevens-MENS-SEMI-FINAL-FIJ-AUS @@ -136,6 +136,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/FIN.ics b/docs/general/FIN.ics index 93e098089..591de8786 100644 --- a/docs/general/FIN.ics +++ b/docs/general/FIN.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -848,6 +848,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/FRA.ics b/docs/general/FRA.ics index 77be24dae..b02dea7b7 100644 --- a/docs/general/FRA.ics +++ b/docs/general/FRA.ics @@ -132,7 +132,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -4358,6 +4358,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GAB.ics b/docs/general/GAB.ics index 85c14916f..e3d7dec36 100644 --- a/docs/general/GAB.ics +++ b/docs/general/GAB.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T090000Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-PAR-GAB @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GAM.ics b/docs/general/GAM.ics index c518d0ee4..0cae1ef15 100644 --- a/docs/general/GAM.ics +++ b/docs/general/GAM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T090600Z-judo-MEN-73-KG-ELIMINATION-ROUND-OF-32-ESP-GAM @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GBR.ics b/docs/general/GBR.ics index ceff6e00d..c7966f978 100644 --- a/docs/general/GBR.ics +++ b/docs/general/GBR.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -2547,6 +2547,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GBS.ics b/docs/general/GBS.ics index 04bafc25b..1fe8ef027 100644 --- a/docs/general/GBS.ics +++ b/docs/general/GBS.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240802T083000Z-judo-MEN-100-KG-ELIMINATION-ROUND-OF-32-SEN-GBS @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GEO.ics b/docs/general/GEO.ics index 1e537cec7..72e4218f9 100644 --- a/docs/general/GEO.ics +++ b/docs/general/GEO.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T091800Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-16-GEO-ISR @@ -273,6 +273,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GER.ics b/docs/general/GER.ics index b5c1afe31..269a0867d 100644 --- a/docs/general/GER.ics +++ b/docs/general/GER.ics @@ -87,7 +87,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -3235,6 +3235,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GRE.ics b/docs/general/GRE.ics index b501b167d..f58f1f080 100644 --- a/docs/general/GRE.ics +++ b/docs/general/GRE.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T103000Z-shooting-10M-AIR-PISTOL-WOMENS-QUALIFICATION @@ -717,6 +717,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GUA.ics b/docs/general/GUA.ics index 2906f387c..1a8643c97 100644 --- a/docs/general/GUA.ics +++ b/docs/general/GUA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T082400Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-GUA-RSA @@ -131,6 +131,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GUI.ics b/docs/general/GUI.ics index 5b773b6eb..cda1f35df 100644 --- a/docs/general/GUI.ics +++ b/docs/general/GUI.ics @@ -49,7 +49,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T190000Z-football-MENS-GROUP-A-FRA-GUI @@ -112,6 +112,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GUM.ics b/docs/general/GUM.ics index 2a2b57816..a30825c1e 100644 --- a/docs/general/GUM.ics +++ b/docs/general/GUM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T081800Z-judo-WOMEN-57-KG-ELIMINATION-ROUND-OF-32-GUM-GUI @@ -54,6 +54,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/GUY.ics b/docs/general/GUY.ics index 38859737b..7b39ac95a 100644 --- a/docs/general/GUY.ics +++ b/docs/general/GUY.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T130000Z-table-tennis-WOMENS-SINGLES-PRELIMINARY-ROUND-CMR-GUY @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/HAI.ics b/docs/general/HAI.ics index 3ac96b3b1..cdb29818a 100644 --- a/docs/general/HAI.ics +++ b/docs/general/HAI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T082400Z-judo-MEN-73-KG-ELIMINATION-ROUND-OF-32-THA-HAI @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/HKG.ics b/docs/general/HKG.ics index 732f04f9b..186ed837e 100644 --- a/docs/general/HKG.ics +++ b/docs/general/HKG.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T084800Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-HKG-AUT @@ -1195,6 +1195,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/HUN.ics b/docs/general/HUN.ics index c2cff9db0..1a454b65b 100644 --- a/docs/general/HUN.ics +++ b/docs/general/HUN.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -1039,6 +1039,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/INA.ics b/docs/general/INA.ics index de93f32d0..3acfa80e3 100644 --- a/docs/general/INA.ics +++ b/docs/general/INA.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T090000Z-badminton-WOMENS-DOUBLES-GROUP-PLAY-STAGE-GROUP-A-JPN- @@ -392,6 +392,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/IND.ics b/docs/general/IND.ics index c8a1e3350..371a923d6 100644 --- a/docs/general/IND.ics +++ b/docs/general/IND.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -842,6 +842,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/IRI.ics b/docs/general/IRI.ics index 44e895df9..a51ecde85 100644 --- a/docs/general/IRI.ics +++ b/docs/general/IRI.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T082500Z-fencing-MENS-SABRE-INDIVIDUAL-TABLE-OF-64-MEX-IRI @@ -256,6 +256,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/IRL.ics b/docs/general/IRL.ics index 065ddee5a..298d13fd7 100644 --- a/docs/general/IRL.ics +++ b/docs/general/IRL.ics @@ -46,7 +46,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -970,6 +970,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/IRQ.ics b/docs/general/IRQ.ics index da267621f..8ffb18bf8 100644 --- a/docs/general/IRQ.ics +++ b/docs/general/IRQ.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T130000Z-football-MENS-GROUP-B-ARG-IRQ @@ -55,6 +55,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ISL.ics b/docs/general/ISL.ics index 63b065bec..b6c706003 100644 --- a/docs/general/ISL.ics +++ b/docs/general/ISL.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240731T060000Z-triathlon-WOMENS-INDIVIDUAL @@ -64,6 +64,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ISR.ics b/docs/general/ISR.ics index b24770e6a..13e440ff3 100644 --- a/docs/general/ISR.ics +++ b/docs/general/ISR.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-COD-ISR @@ -1100,6 +1100,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ISV.ics b/docs/general/ISV.ics index 3fc1700eb..c283e8d6c 100644 --- a/docs/general/ISV.ics +++ b/docs/general/ISV.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T072500Z-fencing-MENS-FOIL-INDIVIDUAL-TABLE-OF-64-CAN-ISV @@ -66,6 +66,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ITA.ics b/docs/general/ITA.ics index 8ca7e8074..d187a74c9 100644 --- a/docs/general/ITA.ics +++ b/docs/general/ITA.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -3167,6 +3167,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/JAM.ics b/docs/general/JAM.ics index a8e7ffffb..1ee005bf6 100644 --- a/docs/general/JAM.ics +++ b/docs/general/JAM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083600Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-YEM-JAM @@ -54,6 +54,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/JOR.ics b/docs/general/JOR.ics index cae116f0a..05bf65e52 100644 --- a/docs/general/JOR.ics +++ b/docs/general/JOR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T134500Z-table-tennis-MENS-SINGLES-PRELIMINARY-ROUND-IND-JOR @@ -73,6 +73,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/JPN.ics b/docs/general/JPN.ics index 3e6b64c96..8f91c41ff 100644 --- a/docs/general/JPN.ics +++ b/docs/general/JPN.ics @@ -123,7 +123,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -2856,6 +2856,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KAZ.ics b/docs/general/KAZ.ics index 9d79ff403..5a93b7bb9 100644 --- a/docs/general/KAZ.ics +++ b/docs/general/KAZ.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -868,6 +868,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KEN.ics b/docs/general/KEN.ics index 42bf35829..aaf228d3d 100644 --- a/docs/general/KEN.ics +++ b/docs/general/KEN.ics @@ -46,7 +46,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T094000Z-fencing-WOMENS-PE-INDIVIDUAL-TABLE-OF-32-KEN-UKR @@ -109,6 +109,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KGZ.ics b/docs/general/KGZ.ics index 6b1325599..48a0991b9 100644 --- a/docs/general/KGZ.ics +++ b/docs/general/KGZ.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T084800Z-judo-MEN-66-KG-ELIMINATION-ROUND-OF-32-KGZ-UKR @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KIR.ics b/docs/general/KIR.ics index 5d6c20448..f8386ab54 100644 --- a/docs/general/KIR.ics +++ b/docs/general/KIR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T083000Z-judo-WOMEN-57-KG-ELIMINATION-ROUND-OF-32-KIR-UKR @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KOR.ics b/docs/general/KOR.ics index 23d3ee1a7..1fed3acc5 100644 --- a/docs/general/KOR.ics +++ b/docs/general/KOR.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T063000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-B-KOR-A @@ -1366,6 +1366,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KOS.ics b/docs/general/KOS.ics index 87bd3f836..72a488213 100644 --- a/docs/general/KOS.ics +++ b/docs/general/KOS.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T190400Z-boxing-WOMENS-60KG-PRELIMINARIES-ROUND-OF-32-THA-KOS @@ -145,6 +145,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/KUW.ics b/docs/general/KUW.ics index 5f863d12f..0a85b19dd 100644 --- a/docs/general/KUW.ics +++ b/docs/general/KUW.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T112000Z-fencing-MENS-SABRE-INDIVIDUAL-TABLE-OF-32-KUW-GER @@ -107,6 +107,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/LAT.ics b/docs/general/LAT.ics index 9250e1475..ba57c478a 100644 --- a/docs/general/LAT.ics +++ b/docs/general/LAT.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -248,6 +248,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/LBA.ics b/docs/general/LBA.ics index 015f52cfd..9567db10b 100644 --- a/docs/general/LBA.ics +++ b/docs/general/LBA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -60,6 +60,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/LBN.ics b/docs/general/LBN.ics index 2a8a3d5ad..2bfeb9e5f 100644 --- a/docs/general/LBN.ics +++ b/docs/general/LBN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T100000Z-tennis-MENS-SINGLES-FIRST-ROUND-LBN-ESP @@ -110,6 +110,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/LIE.ics b/docs/general/LIE.ics index 7ab7316e3..e60e824ee 100644 --- a/docs/general/LIE.ics +++ b/docs/general/LIE.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T121000Z-cycling-mountain-bike-MENS-CROSS-COUNTRY @@ -40,6 +40,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/LTU.ics b/docs/general/LTU.ics index 39114fcd0..508f6a113 100644 --- a/docs/general/LTU.ics +++ b/docs/general/LTU.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T130000Z-beach-volleyball-WOMENS-PRELIMINARY-PHASE-POOL-E-NED-L @@ -461,6 +461,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/LUX.ics b/docs/general/LUX.ics index a1e2a6ee6..17be018b3 100644 --- a/docs/general/LUX.ics +++ b/docs/general/LUX.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T184500Z-table-tennis-MENS-SINGLES-ROUND-OF-64-LUX-DEN @@ -119,6 +119,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MAD.ics b/docs/general/MAD.ics index cd5e6df01..d5fe17e25 100644 --- a/docs/general/MAD.ics +++ b/docs/general/MAD.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T080000Z-table-tennis-MENS-SINGLES-ROUND-OF-64-EGY-MAD @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MAR.ics b/docs/general/MAR.ics index 5ff504a7f..93925e997 100644 --- a/docs/general/MAR.ics +++ b/docs/general/MAR.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -417,6 +417,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MAS.ics b/docs/general/MAS.ics index 10d761db9..2620f67b3 100644 --- a/docs/general/MAS.ics +++ b/docs/general/MAS.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T072000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-D-MAS-S @@ -257,6 +257,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MDA.ics b/docs/general/MDA.ics index 660849a3f..24ab364ca 100644 --- a/docs/general/MDA.ics +++ b/docs/general/MDA.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T103000Z-shooting-10M-AIR-PISTOL-WOMENS-QUALIFICATION @@ -218,6 +218,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MDV.ics b/docs/general/MDV.ics index a44263646..6038aef07 100644 --- a/docs/general/MDV.ics +++ b/docs/general/MDV.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T130000Z-table-tennis-WOMENS-SINGLES-PRELIMINARY-ROUND-POL-MDV @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MEX.ics b/docs/general/MEX.ics index 2d9d1305b..26158ac1b 100644 --- a/docs/general/MEX.ics +++ b/docs/general/MEX.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -1075,6 +1075,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MGL.ics b/docs/general/MGL.ics index ebe8c58db..2ac5565b9 100644 --- a/docs/general/MGL.ics +++ b/docs/general/MGL.ics @@ -39,7 +39,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -486,6 +486,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MKD.ics b/docs/general/MKD.ics index e923ba7ce..6dd8a2331 100644 --- a/docs/general/MKD.ics +++ b/docs/general/MKD.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T071500Z-shooting-10M-AIR-RIFLE-WOMENS-QUALIFICATION @@ -52,6 +52,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MLI.ics b/docs/general/MLI.ics index fd6cf48ad..463ff750c 100644 --- a/docs/general/MLI.ics +++ b/docs/general/MLI.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T190000Z-football-MENS-GROUP-D-JPN-MLI @@ -55,6 +55,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MLT.ics b/docs/general/MLT.ics index c1fdd3cd3..bcfa3b09f 100644 --- a/docs/general/MLT.ics +++ b/docs/general/MLT.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T084200Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-MGL-MLT @@ -66,6 +66,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MNE.ics b/docs/general/MNE.ics index 86ace7a68..49d0ab1b7 100644 --- a/docs/general/MNE.ics +++ b/docs/general/MNE.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T133000Z-boxing-WOMENS-54KG-PRELIMINARIES-ROUND-OF-32-TPE-MNE @@ -82,6 +82,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MON.ics b/docs/general/MON.ics index 8b940f230..c9e1f4fe3 100644 --- a/docs/general/MON.ics +++ b/docs/general/MON.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T190000Z-table-tennis-WOMENS-SINGLES-ROUND-OF-64-MON-CZE @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MOZ.ics b/docs/general/MOZ.ics index 0a6d6f1e3..4afdf45ce 100644 --- a/docs/general/MOZ.ics +++ b/docs/general/MOZ.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T083000Z-judo-WOMEN-52-KG-ELIMINATION-ROUND-OF-32-INA-MOZ @@ -64,6 +64,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MRI.ics b/docs/general/MRI.ics index efb89e6ab..6d49e6ee6 100644 --- a/docs/general/MRI.ics +++ b/docs/general/MRI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T090000Z-badminton-MENS-SINGLES-GROUP-PLAY-STAGE-GROUP-C-THA-MR @@ -112,6 +112,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/MYA.ics b/docs/general/MYA.ics index 28e5599f8..e3b6cc976 100644 --- a/docs/general/MYA.ics +++ b/docs/general/MYA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T173000Z-badminton-WOMENS-SINGLES-GROUP-PLAY-STAGE-GROUP-C-JPN- @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NAM.ics b/docs/general/NAM.ics index 8fd9873a2..6fb5f1ecc 100644 --- a/docs/general/NAM.ics +++ b/docs/general/NAM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T121000Z-cycling-mountain-bike-MENS-CROSS-COUNTRY @@ -40,6 +40,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NCA.ics b/docs/general/NCA.ics index 00126f6c1..3cd3bffda 100644 --- a/docs/general/NCA.ics +++ b/docs/general/NCA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T001200Z-surfing-WOMENS-ROUND-1-HEAT-5 @@ -93,6 +93,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NED.ics b/docs/general/NED.ics index 144d4a54a..917ba701f 100644 --- a/docs/general/NED.ics +++ b/docs/general/NED.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -2287,6 +2287,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NEP.ics b/docs/general/NEP.ics index 107f6d821..f0a379992 100644 --- a/docs/general/NEP.ics +++ b/docs/general/NEP.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T134500Z-table-tennis-MENS-SINGLES-PRELIMINARY-ROUND-SEN-NEP @@ -88,6 +88,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NGR.ics b/docs/general/NGR.ics index 690fe8369..9ded71194 100644 --- a/docs/general/NGR.ics +++ b/docs/general/NGR.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T180000Z-table-tennis-MENS-SINGLES-ROUND-OF-64-NGR-IRI @@ -145,6 +145,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NIG.ics b/docs/general/NIG.ics index 6e8489f9e..4d1bf9f5f 100644 --- a/docs/general/NIG.ics +++ b/docs/general/NIG.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T103000Z-fencing-MENS-SABRE-INDIVIDUAL-TABLE-OF-32-NIG-KOR @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NOR.ics b/docs/general/NOR.ics index f8d26e563..e0388a959 100644 --- a/docs/general/NOR.ics +++ b/docs/general/NOR.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -993,6 +993,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/NZL.ics b/docs/general/NZL.ics index d51703e6a..44043840b 100644 --- a/docs/general/NZL.ics +++ b/docs/general/NZL.ics @@ -64,7 +64,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -1872,6 +1872,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/OMA.ics b/docs/general/OMA.ics index a5b4d0946..8dc04baed 100644 --- a/docs/general/OMA.ics +++ b/docs/general/OMA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T073000Z-shooting-TRAP-MENS-QUALIFICATION-DAY-1 @@ -57,6 +57,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PAK.ics b/docs/general/PAK.ics index 1c7e9e435..95fa4e825 100644 --- a/docs/general/PAK.ics +++ b/docs/general/PAK.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -115,6 +115,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PAN.ics b/docs/general/PAN.ics index ba6577055..ad0681be4 100644 --- a/docs/general/PAN.ics +++ b/docs/general/PAN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T080000Z-judo-WOMEN-57-KG-ELIMINATION-ROUND-OF-32-PAN-EOR @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PAR.ics b/docs/general/PAR.ics index 42276ea68..d63fd751b 100644 --- a/docs/general/PAR.ics +++ b/docs/general/PAR.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T090000Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-PAR-GAB @@ -109,6 +109,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PER.ics b/docs/general/PER.ics index f89817062..26ed2ad4e 100644 --- a/docs/general/PER.ics +++ b/docs/general/PER.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T080000Z-fencing-WOMENS-PE-INDIVIDUAL-TABLE-OF-64-PER-SGP @@ -509,6 +509,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PHI.ics b/docs/general/PHI.ics index 848d8c667..3b3db7ade 100644 --- a/docs/general/PHI.ics +++ b/docs/general/PHI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T073000Z-fencing-WOMENS-FOIL-INDIVIDUAL-TABLE-OF-64-BRA-PHI @@ -100,6 +100,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PLE.ics b/docs/general/PLE.ics index 95f0a6a3f..477eb57da 100644 --- a/docs/general/PLE.ics +++ b/docs/general/PLE.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T133000Z-boxing-MENS-57KG-PRELIMINARIES-ROUND-OF-32-SWE-PLE @@ -56,6 +56,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PNG.ics b/docs/general/PNG.ics index d27fb012f..20b48a999 100644 --- a/docs/general/PNG.ics +++ b/docs/general/PNG.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T193600Z-boxing-MENS-635KG-PRELIMINARIES-ROUND-OF-32-CUB-PNG @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/POL.ics b/docs/general/POL.ics index 90213f0da..b7981c0ee 100644 --- a/docs/general/POL.ics +++ b/docs/general/POL.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-shooting-10M-AIR-RIFLE-MIXED-TEAM-QUALIFICATION @@ -2235,6 +2235,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/POR.ics b/docs/general/POR.ics index d9244a09d..71da4363b 100644 --- a/docs/general/POR.ics +++ b/docs/general/POR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -425,6 +425,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PRK.ics b/docs/general/PRK.ics index 7f0f65515..7a998ee12 100644 --- a/docs/general/PRK.ics +++ b/docs/general/PRK.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T143000Z-table-tennis-MIXED-DOUBLES-ROUND-OF-16-PRK-JPN @@ -147,6 +147,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/PUR.ics b/docs/general/PUR.ics index ac8b2aaf6..4b4571879 100644 --- a/docs/general/PUR.ics +++ b/docs/general/PUR.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T184500Z-table-tennis-WOMENS-SINGLES-ROUND-OF-64-PUR-SRB @@ -246,6 +246,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/QAT.ics b/docs/general/QAT.ics index 2dce0bf82..973fb27b1 100644 --- a/docs/general/QAT.ics +++ b/docs/general/QAT.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T210000Z-beach-volleyball-MENS-PRELIMINARY-PHASE-POOL-A-ITA-QAT @@ -103,6 +103,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ROU.ics b/docs/general/ROU.ics index 8d31e01cd..e478c07c1 100644 --- a/docs/general/ROU.ics +++ b/docs/general/ROU.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T100000Z-tennis-WOMENS-SINGLES-FIRST-ROUND-FRA-ROU @@ -413,6 +413,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/RSA.ics b/docs/general/RSA.ics index a5b90ac48..c656acf73 100644 --- a/docs/general/RSA.ics +++ b/docs/general/RSA.ics @@ -75,7 +75,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -644,6 +644,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/RWA.ics b/docs/general/RWA.ics index f2881b195..54fa9be0a 100644 --- a/docs/general/RWA.ics +++ b/docs/general/RWA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T080000Z-fencing-WOMENS-PE-INDIVIDUAL-TABLE-OF-64-JPN-RWA @@ -69,6 +69,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SAM.ics b/docs/general/SAM.ics index f1c3eb70b..377f15463 100644 --- a/docs/general/SAM.ics +++ b/docs/general/SAM.ics @@ -46,7 +46,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T150000Z-rugby-sevens-MENS-PLACING-9-10-SAM-KEN @@ -82,6 +82,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SEN.ics b/docs/general/SEN.ics index 0d1e2193d..554a439e0 100644 --- a/docs/general/SEN.ics +++ b/docs/general/SEN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T080000Z-fencing-WOMENS-PE-INDIVIDUAL-TABLE-OF-64-EGY-SEN @@ -164,6 +164,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SGP.ics b/docs/general/SGP.ics index 1e076bf90..0f1da8c9b 100644 --- a/docs/general/SGP.ics +++ b/docs/general/SGP.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T072000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-D-MAS-S @@ -212,6 +212,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SLE.ics b/docs/general/SLE.ics index 0bdf8eb6d..d60a0b32e 100644 --- a/docs/general/SLE.ics +++ b/docs/general/SLE.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T081200Z-judo-WOMEN-57-KG-ELIMINATION-ROUND-OF-32-SLE-TPE @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SLO.ics b/docs/general/SLO.ics index 944f57caf..e0aec7cd9 100644 --- a/docs/general/SLO.ics +++ b/docs/general/SLO.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T070000Z-handball-MENS-PRELIMINARY-ROUND-GROUP-A-ESP-SLO @@ -937,6 +937,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SMR.ics b/docs/general/SMR.ics index 745e8f635..0782deba1 100644 --- a/docs/general/SMR.ics +++ b/docs/general/SMR.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240730T070000Z-shooting-TRAP-WOMENS-QUALIFICATION-DAY-1 @@ -77,6 +77,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SRB.ics b/docs/general/SRB.ics index 91266bc4d..233192d58 100644 --- a/docs/general/SRB.ics +++ b/docs/general/SRB.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -576,6 +576,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SRI.ics b/docs/general/SRI.ics index 07e9411f2..e8b278391 100644 --- a/docs/general/SRI.ics +++ b/docs/general/SRI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T081000Z-badminton-MENS-SINGLES-GROUP-PLAY-STAGE-GROUP-G-MAS-SR @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SSD.ics b/docs/general/SSD.ics index 5bdcd008f..fc615bcd3 100644 --- a/docs/general/SSD.ics +++ b/docs/general/SSD.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T090000Z-basketball-MENS-GROUP-PHASE-GROUP-C-SSD-PUR @@ -46,6 +46,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/STP.ics b/docs/general/STP.ics index 0e237873e..e4c401770 100644 --- a/docs/general/STP.ics +++ b/docs/general/STP.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T081200Z-judo-MEN-73-KG-ELIMINATION-ROUND-OF-32-GER-STP @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SUD.ics b/docs/general/SUD.ics index 10bc1c0ea..c0069ba3c 100644 --- a/docs/general/SUD.ics +++ b/docs/general/SUD.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T074200Z-rowing-MENS-SINGLE-SCULLS-SEMIFINAL-EF-2 @@ -40,6 +40,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SUI.ics b/docs/general/SUI.ics index 6b718fbd0..4b04cb0cb 100644 --- a/docs/general/SUI.ics +++ b/docs/general/SUI.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -1278,6 +1278,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SUR.ics b/docs/general/SUR.ics index c1d32ed23..3219795fc 100644 --- a/docs/general/SUR.ics +++ b/docs/general/SUR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T090000Z-badminton-MENS-SINGLES-GROUP-PLAY-STAGE-GROUP-A-CHN-SU @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SVK.ics b/docs/general/SVK.ics index 36b9fab4e..834bdb747 100644 --- a/docs/general/SVK.ics +++ b/docs/general/SVK.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-shooting-10M-AIR-PISTOL-MENS-QUALIFICATION @@ -848,6 +848,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SWE.ics b/docs/general/SWE.ics index fbd799665..df4fcc8e5 100644 --- a/docs/general/SWE.ics +++ b/docs/general/SWE.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T073000Z-equestrian-EVENTING-INDIVIDUAL-DRESSAGE @@ -1283,6 +1283,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/SYR.ics b/docs/general/SYR.ics index 01af3a2ed..c726b5502 100644 --- a/docs/general/SYR.ics +++ b/docs/general/SYR.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T083600Z-judo-MEN-73-KG-ELIMINATION-ROUND-OF-32-AUT-SYR @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TAN.ics b/docs/general/TAN.ics index 0e9ceaf22..f80991fef 100644 --- a/docs/general/TAN.ics +++ b/docs/general/TAN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T085400Z-judo-MEN-73-KG-ELIMINATION-ROUND-OF-32-TAN-SAM @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TGA.ics b/docs/general/TGA.ics index efcf92226..7ad027446 100644 --- a/docs/general/TGA.ics +++ b/docs/general/TGA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T141800Z-boxing-WOMENS-60KG-PRELIMINARIES-ROUND-OF-32-TGA-VIE @@ -28,6 +28,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/THA.ics b/docs/general/THA.ics index 4dc8a97d0..0f8a46dc8 100644 --- a/docs/general/THA.ics +++ b/docs/general/THA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T081000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-B-THA-N @@ -416,6 +416,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TJK.ics b/docs/general/TJK.ics index c3b6f0f1a..3215dfc54 100644 --- a/docs/general/TJK.ics +++ b/docs/general/TJK.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T150600Z-boxing-MENS-635KG-PRELIMINARIES-ROUND-OF-32-TJK-BUL @@ -127,6 +127,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TKM.ics b/docs/general/TKM.ics index a7ac21cc6..369ea4872 100644 --- a/docs/general/TKM.ics +++ b/docs/general/TKM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T090000Z-judo-MEN-66-KG-ELIMINATION-ROUND-OF-32-ANG-TKM @@ -55,6 +55,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TOG.ics b/docs/general/TOG.ics index 1ba961ceb..ee4287b3e 100644 --- a/docs/general/TOG.ics +++ b/docs/general/TOG.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T075400Z-rowing-WOMENS-SINGLE-SCULLS-SEMIFINAL-EF-1 @@ -66,6 +66,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TPE.ics b/docs/general/TPE.ics index b257ce2fb..cf8081135 100644 --- a/docs/general/TPE.ics +++ b/docs/general/TPE.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T085400Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-16-TPE-ITA @@ -792,6 +792,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TUN.ics b/docs/general/TUN.ics index a01c1c6c2..dc3ddd998 100644 --- a/docs/general/TUN.ics +++ b/docs/general/TUN.ics @@ -40,7 +40,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083600Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-VIE-TUN @@ -315,6 +315,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/TUR.ics b/docs/general/TUR.ics index b2531acc9..03b843b36 100644 --- a/docs/general/TUR.ics +++ b/docs/general/TUR.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083000Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-FRA-TUR @@ -942,6 +942,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/UAE.ics b/docs/general/UAE.ics index 6f7d6b691..cbbdb3fc4 100644 --- a/docs/general/UAE.ics +++ b/docs/general/UAE.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T081200Z-judo-WOMEN-52-KG-ELIMINATION-ROUND-OF-32-UAE-CHN @@ -82,6 +82,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/UGA.ics b/docs/general/UGA.ics index 1c09cb4e8..e6adab9f6 100644 --- a/docs/general/UGA.ics +++ b/docs/general/UGA.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T080600Z-rowing-WOMENS-SINGLE-SCULLS-SEMIFINAL-EF-2 @@ -41,6 +41,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/UKR.ics b/docs/general/UKR.ics index 8a11dcc30..b65df2513 100644 --- a/docs/general/UKR.ics +++ b/docs/general/UKR.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T080600Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-UKR-UZB @@ -973,6 +973,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/URU.ics b/docs/general/URU.ics index 69a9de1ec..046dcf2d7 100644 --- a/docs/general/URU.ics +++ b/docs/general/URU.ics @@ -46,7 +46,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T143000Z-rugby-sevens-MENS-PLACING-11-12-JPN-URU @@ -253,6 +253,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/USA.ics b/docs/general/USA.ics index 0b923936c..3e6c17f48 100644 --- a/docs/general/USA.ics +++ b/docs/general/USA.ics @@ -123,7 +123,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T063000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-D-CHN-U @@ -3862,6 +3862,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/UZB.ics b/docs/general/UZB.ics index d614f9887..b111a497e 100644 --- a/docs/general/UZB.ics +++ b/docs/general/UZB.ics @@ -78,7 +78,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T080600Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-UKR-UZB @@ -496,6 +496,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/VAN.ics b/docs/general/VAN.ics index 7978d9009..02e0139c7 100644 --- a/docs/general/VAN.ics +++ b/docs/general/VAN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T180000Z-table-tennis-WOMENS-SINGLES-ROUND-OF-64-VAN-USA @@ -37,6 +37,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/VEN.ics b/docs/general/VEN.ics index 1af2e6876..1cce3f07e 100644 --- a/docs/general/VEN.ics +++ b/docs/general/VEN.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240728T080000Z-fencing-MENS-PE-INDIVIDUAL-TABLE-OF-64-VEN-CAN @@ -166,6 +166,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/VIE.ics b/docs/general/VIE.ics index 8b60b6147..c3ffb135f 100644 --- a/docs/general/VIE.ics +++ b/docs/general/VIE.ics @@ -69,7 +69,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083600Z-judo-WOMEN-48-KG-ELIMINATION-ROUND-OF-32-VIE-TUN @@ -248,6 +248,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/YEM.ics b/docs/general/YEM.ics index 9625e392a..b1fd03b77 100644 --- a/docs/general/YEM.ics +++ b/docs/general/YEM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T083600Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-YEM-JAM @@ -51,6 +51,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ZAM.ics b/docs/general/ZAM.ics index 8044fe44e..fd8c856d2 100644 --- a/docs/general/ZAM.ics +++ b/docs/general/ZAM.ics @@ -19,7 +19,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T084800Z-judo-MEN-60-KG-ELIMINATION-ROUND-OF-32-ZAM-KOR @@ -73,6 +73,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/ZIM.ics b/docs/general/ZIM.ics index 538b022c8..84712544e 100644 --- a/docs/general/ZIM.ics +++ b/docs/general/ZIM.ics @@ -10,7 +10,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240729T074200Z-rowing-MENS-SINGLE-SCULLS-SEMIFINAL-EF-2 @@ -41,6 +41,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/docs/general/general.ics b/docs/general/general.ics index 0d32dd9fa..132ab73df 100644 --- a/docs/general/general.ics +++ b/docs/general/general.ics @@ -492,7 +492,7 @@ DTSTART:20240726T173000Z DTEND:20240726T210000Z DESCRIPTION:Paris 2024 - Opening ceremony SUMMARY:Paris 2024 - Opening ceremony -Location:Paris +LOCATION:Paris END:VEVENT BEGIN:VEVENT UID:20240727T063000Z-badminton-MIXED-DOUBLES-GROUP-PLAY-STAGE-GROUP-B-KOR-A @@ -33326,6 +33326,6 @@ DTSTART:20240811T190000Z DTEND:20240811T211500Z DESCRIPTION:Paris 2024 - Closing ceremony SUMMARY:Paris 2024 - Closing ceremony -Location:Stade de France, Saint-Denis +LOCATION:Stade de France, Saint-Denis END:VEVENT END:VCALENDAR \ No newline at end of file diff --git a/nodemon.json b/nodemon.json index e4b9e3834..3879666bc 100644 --- a/nodemon.json +++ b/nodemon.json @@ -5,5 +5,5 @@ "cache/**", "docs/**" ], - "ext": "js,json,html,css" + "ext": "ts,json,html,css" } diff --git a/package-lock.json b/package-lock.json index d64933a80..aed3c4b62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,13 +10,20 @@ "license": "ISC", "devDependencies": { "@eslint/js": "^9.6.0", + "@types/debug": "^4.1.12", + "@types/node": "^22.0.0", + "@vitest/coverage-istanbul": "^2.0.4", "autoprefixer": "^10.4.19", "cheerio": "^1.0.0-rc.12", + "debug": "^4.3.6", "eslint": "^9.6.0", "globals": "^15.8.0", "nodemon": "^3.1.4", "postcss": "^8.4.39", - "tailwindcss": "^3.4.4" + "tailwindcss": "^3.4.4", + "ts-node": "^10.9.2", + "typescript": "^5.5.4", + "vitest": "^2.0.4" } }, "node_modules/@alloc/quick-lru": { @@ -32,6 +39,810 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.0.tgz", + "integrity": "sha512-P4fwKI2mjEb3ZU5cnMJzvRsRKGBUcs8jvxIoRmr6ufAY9Xk2Bz7JubRTTivkw55c7WQJfTECeqYVa+HZ0FzREg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.0.tgz", + "integrity": "sha512-bIkOa2ZJYn7FHnepzr5iX9Kmz8FjIz4UKzJ9zhX3dnYuVW0xul9RuR3skBfoLu+FPTQw90EHW9rJsSZhyLQ3fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.1.tgz", + "integrity": "sha512-LrHHoWq08ZpmmFqBAzN+hUdWwy5zt7FGa/hVwMcOqW6OVtwqaoD5utfuGYU87JYxdZgLUvktAsn37j/sYR9siA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.0.tgz", + "integrity": "sha512-LcnxQSsd9aXOIgmmSpvZ/1yo46ra2ESYyqLcryaBZOghxy5qqOBjvCWP5JfkI8yl9rlxRgdLTTMCQQRcN2hdCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -237,6 +1048,16 @@ "node": ">=12" } }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -273,9 +1094,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, "license": "MIT" }, @@ -339,6 +1160,404 @@ "node": ">=14" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.1.tgz", + "integrity": "sha512-XzqSg714++M+FXhHfXpS1tDnNZNpgxxuGZWlRG/jSj+VEPmZ0yg6jV4E0AL3uyBKxO8mO3xtOsP5mQ+XLfrlww==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.1.tgz", + "integrity": "sha512-thFUbkHteM20BGShD6P08aungq4irbIZKUNbG70LN8RkO7YztcGPiKTTGZS7Kw+x5h8hOXs0i4OaHwFxlpQN6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.1.tgz", + "integrity": "sha512-8o6eqeFZzVLia2hKPUZk4jdE3zW7LCcZr+MD18tXkgBBid3lssGVAYuox8x6YHoEPDdDa9ixTaStcmx88lio5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.1.tgz", + "integrity": "sha512-4T42heKsnbjkn7ovYiAdDVRRWZLU9Kmhdt6HafZxFcUdpjlBlxj4wDrt1yFWLk7G4+E+8p2C9tcmSu0KA6auGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.1.tgz", + "integrity": "sha512-MXg1xp+e5GhZ3Vit1gGEyoC+dyQUBy2JgVQ+3hUrD9wZMkUw/ywgkpK7oZgnB6kPpGrxJ41clkPPnsknuD6M2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.1.tgz", + "integrity": "sha512-DZNLwIY4ftPSRVkJEaxYkq7u2zel7aah57HESuNkUnz+3bZHxwkCUkrfS2IWC1sxK6F2QNIR0Qr/YXw7nkF3Pw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.1.tgz", + "integrity": "sha512-C7evongnjyxdngSDRRSQv5GvyfISizgtk9RM+z2biV5kY6S/NF/wta7K+DanmktC5DkuaJQgoKGf7KUDmA7RUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.1.tgz", + "integrity": "sha512-89tFWqxfxLLHkAthAcrTs9etAoBFRduNfWdl2xUs/yLV+7XDrJ5yuXMHptNqf1Zw0UCA3cAutkAiAokYCkaPtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.1.tgz", + "integrity": "sha512-PromGeV50sq+YfaisG8W3fd+Cl6mnOOiNv2qKKqKCpiiEke2KiKVyDqG/Mb9GWKbYMHj5a01fq/qlUR28PFhCQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.1.tgz", + "integrity": "sha512-/1BmHYh+iz0cNCP0oHCuF8CSiNj0JOGf0jRlSo3L/FAyZyG2rGBuKpkZVH9YF+x58r1jgWxvm1aRg3DHrLDt6A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.1.tgz", + "integrity": "sha512-0cYP5rGkQWRZKy9/HtsWVStLXzCF3cCBTRI+qRL8Z+wkYlqN7zrSYm6FuY5Kd5ysS5aH0q5lVgb/WbG4jqXN1Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.1.tgz", + "integrity": "sha512-XUXeI9eM8rMP8aGvii/aOOiMvTs7xlCosq9xCjcqI9+5hBxtjDpD+7Abm1ZhVIFE1J2h2VIg0t2DX/gjespC2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.1.tgz", + "integrity": "sha512-V7cBw/cKXMfEVhpSvVZhC+iGifD6U1zJ4tbibjjN+Xi3blSXaj/rJynAkCFFQfoG6VZrAiP7uGVzL440Q6Me2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.1.tgz", + "integrity": "sha512-88brja2vldW/76jWATlBqHEoGjJLRnP0WOEKAUbMcXaAZnemNhlAHSyj4jIwMoP2T750LE9lblvD4e2jXleZsA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.1.tgz", + "integrity": "sha512-LdxxcqRVSXi6k6JUrTah1rHuaupoeuiv38du8Mt4r4IPer3kwlTo+RuvfE8KzZ/tL6BhaPlzJ3835i6CxrFIRQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.1.tgz", + "integrity": "sha512-2bIrL28PcK3YCqD9anGxDxamxdiJAxA+l7fWIwM5o8UqNy1t3d1NdAweO2XhA0KTDJ5aH1FsuiT5+7VhtHliXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", + "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.11.1" + } + }, + "node_modules/@vitest/coverage-istanbul": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-2.0.4.tgz", + "integrity": "sha512-6VibYMkXh8cJm5Bg8JYeOoR4oURlPf4YKP9kuVRE/NKasfYrXPnzSwuxrpgMbgOfPj13KUJXgMB3VAGukECtlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@istanbuljs/schema": "^0.1.3", + "debug": "^4.3.5", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-instrument": "^6.0.3", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magicast": "^0.3.4", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "vitest": "2.0.4" + } + }, + "node_modules/@vitest/expect": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.4.tgz", + "integrity": "sha512-39jr5EguIoanChvBqe34I8m1hJFI4+jxvdOpD7gslZrVQBKhh8H9eD7J/LJX4zakrw23W+dITQTDqdt43xVcJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.0.4", + "@vitest/utils": "2.0.4", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.4.tgz", + "integrity": "sha512-RYZl31STbNGqf4l2eQM1nvKPXE0NhC6Eq0suTTePc4mtMQ1Fn8qZmjV4emZdEdG2NOWGKSCrHZjmTqDCDoeFBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.4.tgz", + "integrity": "sha512-Gk+9Su/2H2zNfNdeJR124gZckd5st4YoSuhF1Rebi37qTXKnqYyFCd9KP4vl2cQHbtuVKjfEKrNJxHHCW8thbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.0.4", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.4.tgz", + "integrity": "sha512-or6Mzoz/pD7xTvuJMFYEtso1vJo1S5u6zBTinfl+7smGUhqybn6VjzCDMhmTyVOFWwkCMuNjmNNxnyXPgKDoPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.0.4", + "magic-string": "^0.30.10", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.4.tgz", + "integrity": "sha512-uTXU56TNoYrTohb+6CseP8IqNwlNdtPwEO0AWl+5j7NelS6x0xZZtP0bDWaLvOfUbaYwhhWp1guzXUxkC7mW7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.4.tgz", + "integrity": "sha512-Zc75QuuoJhOBnlo99ZVUkJIuq4Oj0zAkrQ2VzCqNCx6wAwViHEh5Fnp4fiJTE9rA+sAoXRf00Z9xGgfEzV6fzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.0.4", + "estree-walker": "^3.0.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -362,6 +1581,19 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -440,6 +1672,16 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/autoprefixer": { "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", @@ -561,6 +1803,16 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -602,6 +1854,23 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -635,6 +1904,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/cheerio": { "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", @@ -750,6 +2029,20 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -809,9 +2102,9 @@ } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "license": "MIT", "dependencies": { @@ -826,6 +2119,16 @@ } } }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -840,6 +2143,16 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -940,6 +2253,45 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -1146,6 +2498,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -1156,6 +2518,30 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1337,6 +2723,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.3.tgz", @@ -1410,6 +2829,13 @@ "node": ">= 0.4" } }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -1430,6 +2856,16 @@ "entities": "^4.4.0" } }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -1556,6 +2992,19 @@ "node": ">=8" } }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1563,6 +3012,77 @@ "dev": true, "license": "ISC" }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jackspeak": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.1.tgz", @@ -1592,6 +3112,13 @@ "jiti": "bin/jiti.js" } }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -1605,6 +3132,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -1626,6 +3166,19 @@ "dev": true, "license": "MIT" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -1690,6 +3243,16 @@ "dev": true, "license": "MIT" }, + "node_modules/loupe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, "node_modules/lru-cache": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.0.tgz", @@ -1700,6 +3263,58 @@ "node": ">=18" } }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magicast": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", + "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.24.4", + "@babel/types": "^7.24.0", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1724,6 +3339,19 @@ "node": ">=8.6" } }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -1898,6 +3526,35 @@ "node": ">=0.10.0" } }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -1931,6 +3588,22 @@ "node": ">= 6" } }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2072,6 +3745,23 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -2379,6 +4069,42 @@ "node": ">=0.10.0" } }, + "node_modules/rollup": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.1.tgz", + "integrity": "sha512-K5vziVlg7hTpYfFBI+91zHBEMo6jafYXpkMlqZjg7/zhIG9iHqazBf4xz9AVdjS9BruRn280ROqLI7G3OFRIlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.19.1", + "@rollup/rollup-android-arm64": "4.19.1", + "@rollup/rollup-darwin-arm64": "4.19.1", + "@rollup/rollup-darwin-x64": "4.19.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.19.1", + "@rollup/rollup-linux-arm-musleabihf": "4.19.1", + "@rollup/rollup-linux-arm64-gnu": "4.19.1", + "@rollup/rollup-linux-arm64-musl": "4.19.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.19.1", + "@rollup/rollup-linux-riscv64-gnu": "4.19.1", + "@rollup/rollup-linux-s390x-gnu": "4.19.1", + "@rollup/rollup-linux-x64-gnu": "4.19.1", + "@rollup/rollup-linux-x64-musl": "4.19.1", + "@rollup/rollup-win32-arm64-msvc": "4.19.1", + "@rollup/rollup-win32-ia32-msvc": "4.19.1", + "@rollup/rollup-win32-x64-msvc": "4.19.1", + "fsevents": "~2.3.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2439,6 +4165,13 @@ "node": ">=8" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -2475,6 +4208,20 @@ "node": ">=0.10.0" } }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true, + "license": "MIT" + }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -2579,6 +4326,19 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2679,6 +4439,21 @@ "node": ">=14.0.0" } }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -2709,6 +4484,53 @@ "node": ">=0.8" } }, + "node_modules/tinybench": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.8.0.tgz", + "integrity": "sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", + "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", + "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2739,6 +4561,57 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2752,6 +4625,20 @@ "node": ">= 0.8.0" } }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -2759,6 +4646,13 @@ "dev": true, "license": "MIT" }, + "node_modules/undici-types": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "dev": true, + "license": "MIT" + }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", @@ -2807,6 +4701,157 @@ "dev": true, "license": "MIT" }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", + "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.39", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.4.tgz", + "integrity": "sha512-ZpJVkxcakYtig5iakNeL7N3trufe3M6vGuzYAr4GsbCTwobDeyPJpE4cjDhhPluv8OvQCFzu2LWp6GkoKRITXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.5", + "pathe": "^1.1.2", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.4.tgz", + "integrity": "sha512-luNLDpfsnxw5QSW4bISPe6tkxVvv5wn2BBs/PuDRkhXZ319doZyLOBr1sjfB5yCEpTiU7xCAdViM8TNVGPwoog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@vitest/expect": "2.0.4", + "@vitest/pretty-format": "^2.0.4", + "@vitest/runner": "2.0.4", + "@vitest/snapshot": "2.0.4", + "@vitest/spy": "2.0.4", + "@vitest/utils": "2.0.4", + "chai": "^5.1.1", + "debug": "^4.3.5", + "execa": "^8.0.1", + "magic-string": "^0.30.10", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.8.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.0.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.0.4", + "@vitest/ui": "2.0.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -2823,6 +4868,23 @@ "node": ">= 8" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -2931,6 +4993,13 @@ "node": ">=8" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/yaml": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", @@ -2944,6 +5013,16 @@ "node": ">= 14" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 0a7b2c797..f389f388b 100644 --- a/package.json +++ b/package.json @@ -3,22 +3,29 @@ "version": "1.0.0", "main": "src/index.js", "scripts": { - "start": "find ./cache/*.html -mmin +10 -exec rm -f {} \\; | node src/index.js", - "dev": "nodemon src/index.js", + "start": "find ./cache/*.html -mmin +10 -exec rm -f {} \\; | ts-node src/index.ts", + "dev": "nodemon src/index.ts", "lint": "eslint . --fix", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "vitest run --coverage" }, "author": "", "license": "ISC", "description": "", "devDependencies": { "@eslint/js": "^9.6.0", + "@types/debug": "^4.1.12", + "@types/node": "^22.0.0", + "@vitest/coverage-istanbul": "^2.0.4", "autoprefixer": "^10.4.19", "cheerio": "^1.0.0-rc.12", + "debug": "^4.3.6", "eslint": "^9.6.0", "globals": "^15.8.0", "nodemon": "^3.1.4", "postcss": "^8.4.39", - "tailwindcss": "^3.4.4" + "tailwindcss": "^3.4.4", + "ts-node": "^10.9.2", + "typescript": "^5.5.4", + "vitest": "^2.0.4" } } diff --git a/src/ics.js b/src/ics.ts similarity index 82% rename from src/ics.js rename to src/ics.ts index 4a73a811c..698fd7231 100644 --- a/src/ics.js +++ b/src/ics.ts @@ -1,4 +1,9 @@ -const fs = require("fs"); +import * as fs from "node:fs"; +import Debug from "debug"; + +import { Event } from "./types"; + +const debug = Debug("paris2024:ics"); /** * generateICS generates the calendar for given events on ICS format @@ -6,8 +11,9 @@ const fs = require("fs"); * @param {string} key * @param {object[]} events */ -const generateICS = (title, key, events) => { - const lines = []; +export const generateICS = (title: string, key: string, events: Event[]): void => { + debug(`Generating ICS file for ${title} (${key}) with ${events.length} events`); + const lines: string[] = []; lines.push("BEGIN:VCALENDAR"); lines.push("VERSION:2.0"); lines.push(`PRODID:-//fabrice404//olympics-calendar//${key}//EN`); @@ -52,6 +58,3 @@ const generateICS = (title, key, events) => { fs.writeFileSync(calendarPath, lines.join("\r\n")); }; -module.exports = { - generateICS, -}; diff --git a/src/index.js b/src/index.ts similarity index 85% rename from src/index.js rename to src/index.ts index aebe07b1e..bbfdb755b 100644 --- a/src/index.js +++ b/src/index.ts @@ -1,19 +1,25 @@ -const cheerio = require("cheerio"); -const fs = require("fs"); -const autoprefixer = require("autoprefixer"); -const postcss = require("postcss"); -const tailwindcss = require("tailwindcss"); -const { getSportIcon } = require("./sports"); -const { isValidNOC, getNOCName, getNOCFlag } = require("./nocs"); -const { generateICS } = require("./ics"); +import cheerio from "cheerio"; +import Debug from "debug"; +import fs from "fs"; +import autoprefixer from "autoprefixer"; +import postcss from "postcss"; +import tailwindcss from "tailwindcss"; -const downloadSchedule = async (sportKey) => { - console.log(`Checking schedule for ${sportKey}`); +import { Event, Sport } from "./types"; + +import { getSportIcon } from "./sports"; +import { isValidNOC, getNOCName, getNOCFlag } from "./nocs"; +import { generateICS } from "./ics"; + +const debug = Debug("paris2024:index"); + +const downloadSchedule = async (sportKey: string) => { + debug(`Checking schedule for ${sportKey}`); const cacheFile = `${__dirname}/../cache/${sportKey}.html`; if (!fs.existsSync(cacheFile)) { - console.log(`Downloading schedule for ${sportKey}`); + debug(`Downloading schedule for ${sportKey} https://olympics.com/en/paris-2024/schedule/${sportKey}`); const response = await fetch(`https://olympics.com/en/paris-2024/schedule/${sportKey}`); const content = await response.text(); fs.writeFileSync(cacheFile, content); @@ -24,25 +30,28 @@ const downloadSchedule = async (sportKey) => { return JSON.parse($("#__NEXT_DATA__").text()); }; -const EVENTS = []; -const NOCS = []; -const SPORTS = []; +const EVENTS: Event[] = []; +const NOCS: string[] = []; +const SPORTS: Sport[] = []; -const addNOC = (noc) => { +const addNOC = (noc: string) => { + debug(`Adding NOC ${noc}`); if (!NOCS.includes(noc)) { NOCS.push(noc); } }; -const addSport = (sportKey, sportName) => { +const addSport = (sportKey: string, sportName: string) => { + debug(`Adding sport ${sportKey}`); if (!SPORTS.find((sport) => sport.key === sportKey)) { SPORTS.push({ key: sportKey, name: sportName, NOCS: [] }); } }; -const addSportNOC = (sportKey, sportName, noc) => { +const addSportNOC = (sportKey: string, sportName: string, noc: string) => { + debug(`Adding NOC ${noc} to sport ${sportKey}`); addSport(sportKey, sportName); - const sport = SPORTS.find((sport) => sport.key === sportKey); + const sport = SPORTS.find((sport) => sport.key === sportKey)!; if (!sport.NOCS.includes(noc)) { sport.NOCS.push(noc); } @@ -111,21 +120,21 @@ const generateCalendars = () => { } }; -const slugify = (text) => text.toLowerCase().replace(/\s/g, "-") +const slugify = (text: string) => text.toLowerCase().replace(/\s/g, "-") .replace(/[^a-z0-9-]/g, "") .replace(/-+/g, "-"); -const extractSportCalendar = async (sportKey) => { +const extractSportCalendar = async (sportKey: string) => { const data = await downloadSchedule(sportKey); const sportName = data.query.pDisciplineLabel; const sportIcon = getSportIcon(sportKey); addSport(sportKey, sportName); - data.props.pageProps.scheduleDataSource.initialSchedule.units.forEach(unit => { + data.props.pageProps.scheduleDataSource.initialSchedule.units.forEach((unit: any) => { unit.startDateTimeUtc = new Date(unit.startDate).toISOString().replace(".000", ""); unit.endDateTimeUtc = new Date(unit.endDate).toISOString().replace(".000", ""); - const event = { + const event: Event = { UID: `${unit.startDateTimeUtc.replace(/[:-]/g, "")}-${sportKey}-${slugify(unit.eventUnitName).toUpperCase()}`, DTSTAMP: unit.startDateTimeUtc.replace(/[:-]/g, ""), DTSTART: unit.startDateTimeUtc.replace(/[:-]/g, ""), @@ -143,9 +152,9 @@ const extractSportCalendar = async (sportKey) => { if (unit.competitors) { const competitors = unit.competitors - .filter((competitor) => competitor.noc && isValidNOC(competitor.noc)) - .sort((a, b) => a.order > b.order ? 1 : -1); - event._NOCS = competitors.map((competitor) => { + .filter((competitor: any) => competitor.noc && isValidNOC(competitor.noc)) + .sort((a: any, b: any) => a.order > b.order ? 1 : -1); + event._NOCS = competitors.map((competitor: any) => { addSportNOC(sportKey, sportName, competitor.noc); addNOC(competitor.noc); return competitor.noc; @@ -165,8 +174,8 @@ const extractSportCalendar = async (sportKey) => { } else if (competitors.length !== 0) { // more than two, we put them in the description competitors - .sort((a, b) => a.name > b.name ? 1 : -1) - .forEach((competitor) => { + .sort((a: any, b: any) => a.name > b.name ? 1 : -1) + .forEach((competitor: any) => { if (competitor.name !== getNOCName(competitor.noc)) { event.DESCRIPTION += `\\n${getNOCFlag(competitor.noc)} ${competitor.name}`; event._COMPETITORS.push({ noc: competitor.noc, name: `${getNOCFlag(competitor.noc)} ${competitor.name}` }); @@ -184,31 +193,39 @@ const generateCeremoniesEvents = () => { let startDateUtc = new Date("2024-07-26T17:30:00Z").toISOString().replace(".000", ""); let endDateUtc = new Date("2024-07-26T21:00:00Z").toISOString().replace(".000", ""); - const openingCeremony = { + const openingCeremony: Event = { UID: `${startDateUtc.replace(/[:-]/g, "")}-opening-ceremony`, DTSTAMP: startDateUtc.replace(/[:-]/g, ""), DTSTART: startDateUtc.replace(/[:-]/g, ""), DTEND: endDateUtc.replace(/[:-]/g, ""), DESCRIPTION: "Paris 2024 - Opening ceremony", SUMMARY: "Paris 2024 - Opening ceremony", - Location: "Paris", + LOCATION: "Paris", _NOCS: NOCS, _MEDAL: false, + _COMPETITORS: [], + _GENDER: "", + _SPORT: "", + _UNITNAME: "", }; startDateUtc = new Date("2024-08-11T19:00:00Z").toISOString().replace(".000", ""); endDateUtc = new Date("2024-08-11T21:15:00Z").toISOString().replace(".000", ""); - const closingCeremony = { + const closingCeremony: Event = { UID: `${startDateUtc.replace(/[:-]/g, "")}-closing-ceremony`, DTSTAMP: startDateUtc.replace(/[:-]/g, ""), DTSTART: startDateUtc.replace(/[:-]/g, ""), DTEND: endDateUtc.replace(/[:-]/g, ""), DESCRIPTION: "Paris 2024 - Closing ceremony", SUMMARY: "Paris 2024 - Closing ceremony", - Location: "Stade de France, Saint-Denis", + LOCATION: "Stade de France, Saint-Denis", _NOCS: NOCS, _MEDAL: false, + _COMPETITORS: [], + _GENDER: "", + _SPORT: "", + _UNITNAME: "", }; EVENTS.push(openingCeremony); @@ -270,7 +287,7 @@ const generateOutputPage = () => { }); html.push(""); - const todays = []; + const todays: string[] = []; NOCS.sort().forEach((noc) => { todays.push(`${getNOCFlag(noc)} ${noc}`); }); @@ -283,7 +300,7 @@ const generateOutputPage = () => { }; const generateTodayPage = () => { - const html = []; + const html: string[] = []; EVENTS.forEach((event) => { let sport = SPORTS.find((sport) => sport.key === event._SPORT); @@ -291,6 +308,7 @@ const generateTodayPage = () => { sport = { name: "Ceremony", key: "", + NOCS: [], }; } const summary = event.SUMMARY.match(/ceremony/gi) ? event.SUMMARY : event.SUMMARY.split(" ").slice(1).join(" "); @@ -302,9 +320,9 @@ const generateTodayPage = () => { html.push(` ${event._MEDAL ? "๐Ÿ…" : ""}`); html.push(` ${sport.name.toUpperCase()}`); if (event._GENDER === "M") { - html.push(` M`); + html.push(" M"); } else if (event._GENDER === "W") { - html.push(` W`); + html.push(" W"); } html.push(" "); html.push(`
${summary}`); diff --git a/src/nocs.js b/src/nocs.js deleted file mode 100644 index fa30f7fad..000000000 --- a/src/nocs.js +++ /dev/null @@ -1,246 +0,0 @@ -const NOCS = { - AFG: { icon: "๐Ÿ‡ฆ๐Ÿ‡ซ", name: "Afghanistan" }, - ALB: { icon: "๐Ÿ‡ฆ๐Ÿ‡ฑ", name: "Albania" }, - ALG: { icon: "๐Ÿ‡ฉ๐Ÿ‡ฟ", name: "Algeria" }, - AND: { icon: "๐Ÿ‡ฆ๐Ÿ‡ฉ", name: "Andorra" }, - ANG: { icon: "๐Ÿ‡ฆ๐Ÿ‡ด", name: "Angola" }, - ANT: { icon: "๐Ÿ‡ฆ๐Ÿ‡ฌ", name: "Antigua and Barbuda" }, - ARG: { icon: "๐Ÿ‡ฆ๐Ÿ‡ท", name: "Argentina" }, - ARM: { icon: "๐Ÿ‡ฆ๐Ÿ‡ฒ", name: "Armenia" }, - ARU: { icon: "๐Ÿ‡ฆ๐Ÿ‡ผ", name: "Aruba" }, - ASA: { icon: "๐Ÿ‡ฆ๐Ÿ‡ธ", name: "American Samoa" }, - AUS: { icon: "๐Ÿ‡ฆ๐Ÿ‡บ", name: "Australia" }, - AUT: { icon: "๐Ÿ‡ฆ๐Ÿ‡น", name: "Austria" }, - AZE: { icon: "๐Ÿ‡ฆ๐Ÿ‡ฟ", name: "Azerbaijan" }, - BAH: { icon: "๐Ÿ‡ง๐Ÿ‡ธ", name: "Bahamas" }, - BAN: { icon: "๐Ÿ‡ง๐Ÿ‡ฉ", name: "Bangladesh" }, - BAR: { icon: "๐Ÿ‡ง๐Ÿ‡ง", name: "Barbados" }, - BDI: { icon: "๐Ÿ‡ง๐Ÿ‡ฎ", name: "Burundi" }, - BEL: { icon: "๐Ÿ‡ง๐Ÿ‡ช", name: "Belgium" }, - BEN: { icon: "๐Ÿ‡ง๐Ÿ‡ฏ", name: "Benin" }, - BER: { icon: "๐Ÿ‡ง๐Ÿ‡ฒ", name: "Bermuda" }, - BHU: { icon: "๐Ÿ‡ง๐Ÿ‡น", name: "Bhutan" }, - BIH: { icon: "๐Ÿ‡ง๐Ÿ‡ฆ", name: "Bosnia and Herzegovina" }, - BIZ: { icon: "๐Ÿ‡ง๐Ÿ‡ฟ", name: "Belize" }, - BOL: { icon: "๐Ÿ‡ง๐Ÿ‡ด", name: "Bolivia" }, - BOT: { icon: "๐Ÿ‡ง๐Ÿ‡ผ", name: "Botswana" }, - BRA: { icon: "๐Ÿ‡ง๐Ÿ‡ท", name: "Brazil" }, - BRN: { icon: "๐Ÿ‡ง๐Ÿ‡ญ", name: "Bahrain" }, - BRU: { icon: "๐Ÿ‡ง๐Ÿ‡ณ", name: "Brunei" }, - BUL: { icon: "๐Ÿ‡ง๐Ÿ‡ฌ", name: "Bulgaria" }, - BUR: { icon: "๐Ÿ‡ง๐Ÿ‡ซ", name: "Burkina Faso" }, - CAF: { icon: "๐Ÿ‡จ๐Ÿ‡ซ", name: "Central African Republic" }, - CAM: { icon: "๐Ÿ‡ฐ๐Ÿ‡ญ", name: "Cambodia" }, - CAN: { icon: "๐Ÿ‡จ๐Ÿ‡ฆ", name: "Canada" }, - CAY: { icon: "๐Ÿ‡ฐ๐Ÿ‡พ", name: "Cayman Islands" }, - CGO: { icon: "๐Ÿ‡จ๐Ÿ‡ฌ", name: "Congo" }, - CHA: { icon: "๐Ÿ‡น๐Ÿ‡ฉ", name: "Chad" }, - CHI: { icon: "๐Ÿ‡จ๐Ÿ‡ฑ", name: "Chile" }, - CHN: { icon: "๐Ÿ‡จ๐Ÿ‡ณ", name: "China" }, - CIV: { icon: "๐Ÿ‡จ๐Ÿ‡ฎ", name: "Cรดte d'Ivoire" }, - CMR: { icon: "๐Ÿ‡จ๐Ÿ‡ฒ", name: "Cameroon" }, - COD: { icon: "๐Ÿ‡จ๐Ÿ‡ฉ", name: "Democratic Republic of the Congo" }, - COK: { icon: "๐Ÿ‡จ๐Ÿ‡ฐ", name: "Cook Islands" }, - COL: { icon: "๐Ÿ‡จ๐Ÿ‡ด", name: "Colombia" }, - COM: { icon: "๐Ÿ‡ฐ๐Ÿ‡ฒ", name: "Comoros" }, - CPV: { icon: "๐Ÿ‡จ๐Ÿ‡ป", name: "Cabo Verde" }, - CRC: { icon: "๐Ÿ‡จ๐Ÿ‡ท", name: "Costa Rica" }, - CRO: { icon: "๐Ÿ‡ญ๐Ÿ‡ท", name: "Croatia" }, - CUB: { icon: "๐Ÿ‡จ๐Ÿ‡บ", name: "Cuba" }, - CYP: { icon: "๐Ÿ‡จ๐Ÿ‡พ", name: "Cyprus" }, - CZE: { icon: "๐Ÿ‡จ๐Ÿ‡ฟ", name: "Czechia" }, - DEN: { icon: "๐Ÿ‡ฉ๐Ÿ‡ฐ", name: "Denmark" }, - DJI: { icon: "๐Ÿ‡ฉ๐Ÿ‡ฏ", name: "Djibouti" }, - DMA: { icon: "๐Ÿ‡ฉ๐Ÿ‡ฒ", name: "Dominica" }, - DOM: { icon: "๐Ÿ‡ฉ๐Ÿ‡ด", name: "Dominican Republic" }, - ECU: { icon: "๐Ÿ‡ช๐Ÿ‡จ", name: "Ecuador" }, - EGY: { icon: "๐Ÿ‡ช๐Ÿ‡ฌ", name: "Egypt" }, - EOR: { icon: "๐Ÿณ๏ธ", name: "Refugee Olympic Team" }, - ERI: { icon: "๐Ÿ‡ช๐Ÿ‡ท", name: "Eritrea" }, - ESA: { icon: "๐Ÿ‡ธ๐Ÿ‡ป", name: "El Salvador" }, - ESP: { icon: "๐Ÿ‡ช๐Ÿ‡ธ", name: "Spain" }, - EST: { icon: "๐Ÿ‡ช๐Ÿ‡ช", name: "Estonia" }, - ETH: { icon: "๐Ÿ‡ช๐Ÿ‡น", name: "Ethiopia" }, - FIJ: { icon: "๐Ÿ‡ซ๐Ÿ‡ฏ", name: "Fiji" }, - FIN: { icon: "๐Ÿ‡ซ๐Ÿ‡ฎ", name: "Finland" }, - FRA: { icon: "๐Ÿ‡ซ๐Ÿ‡ท", name: "France" }, - FSM: { icon: "๐Ÿ‡ซ๐Ÿ‡ฒ", name: "Federated States of Micronesia" }, - GAB: { icon: "๐Ÿ‡ฌ๐Ÿ‡ฆ", name: "Gabon" }, - GAM: { icon: "๐Ÿ‡ฌ๐Ÿ‡ฒ", name: "Gambia" }, - GBR: { icon: "๐Ÿ‡ฌ๐Ÿ‡ง", name: "Great Britain" }, - GBS: { icon: "๐Ÿ‡ฌ๐Ÿ‡ผ", name: "Guinea-Bissau" }, - GEO: { icon: "๐Ÿ‡ฌ๐Ÿ‡ช", name: "Georgia" }, - GEQ: { icon: "๐Ÿ‡ฌ๐Ÿ‡ถ", name: "Equatorial Guinea" }, - GER: { icon: "๐Ÿ‡ฉ๐Ÿ‡ช", name: "Germany" }, - GHA: { icon: "๐Ÿ‡ฌ๐Ÿ‡ญ", name: "Ghana" }, - GRE: { icon: "๐Ÿ‡ฌ๐Ÿ‡ท", name: "Greece" }, - GRN: { icon: "๐Ÿ‡ฌ๐Ÿ‡ฉ", name: "Grenada" }, - GUA: { icon: "๐Ÿ‡ฌ๐Ÿ‡น", name: "Guatemala" }, - GUI: { icon: "๐Ÿ‡ฌ๐Ÿ‡ณ", name: "Guinea" }, - GUM: { icon: "๐Ÿ‡ฌ๐Ÿ‡บ", name: "Guam" }, - GUY: { icon: "๐Ÿ‡ฌ๐Ÿ‡พ", name: "Guyana" }, - HAI: { icon: "๐Ÿ‡ญ๐Ÿ‡น", name: "Haiti" }, - HKG: { icon: "๐Ÿ‡ญ๐Ÿ‡ฐ", name: "Hong Kong" }, - HON: { icon: "๐Ÿ‡ญ๐Ÿ‡ณ", name: "Honduras" }, - HUN: { icon: "๐Ÿ‡ญ๐Ÿ‡บ", name: "Hungary" }, - INA: { icon: "๐Ÿ‡ฎ๐Ÿ‡ฉ", name: "Indonesia" }, - IND: { icon: "๐Ÿ‡ฎ๐Ÿ‡ณ", name: "India" }, - IRI: { icon: "๐Ÿ‡ฎ๐Ÿ‡ท", name: "Iran" }, - IRL: { icon: "๐Ÿ‡ฎ๐Ÿ‡ช", name: "Ireland" }, - IRQ: { icon: "๐Ÿ‡ฎ๐Ÿ‡ถ", name: "Iraq" }, - ISL: { icon: "๐Ÿ‡ฎ๐Ÿ‡ธ", name: "Iceland" }, - ISR: { icon: "๐Ÿ‡ฎ๐Ÿ‡ฑ", name: "Israel" }, - ISV: { icon: "๐Ÿ‡ป๐Ÿ‡ฎ", name: "U.S. Virgin Islands" }, - ITA: { icon: "๐Ÿ‡ฎ๐Ÿ‡น", name: "Italy" }, - IVB: { icon: "๐Ÿ‡ป๐Ÿ‡ฌ", name: "British Virgin Islands" }, - JAM: { icon: "๐Ÿ‡ฏ๐Ÿ‡ฒ", name: "Jamaica" }, - JOR: { icon: "๐Ÿ‡ฏ๐Ÿ‡ด", name: "Jordan" }, - JPN: { icon: "๐Ÿ‡ฏ๐Ÿ‡ต", name: "Japan" }, - KAZ: { icon: "๐Ÿ‡ฐ๐Ÿ‡ฟ", name: "Kazakhstan" }, - KEN: { icon: "๐Ÿ‡ฐ๐Ÿ‡ช", name: "Kenya" }, - KGZ: { icon: "๐Ÿ‡ฐ๐Ÿ‡ฌ", name: "Kyrgyzstan" }, - KIR: { icon: "๐Ÿ‡ฐ๐Ÿ‡ฎ", name: "Kiribati" }, - KOR: { icon: "๐Ÿ‡ฐ๐Ÿ‡ท", name: "Korea" }, - KOS: { icon: "๐Ÿ‡ฝ๐Ÿ‡ฐ", name: "Kosovo" }, - KSA: { icon: "๐Ÿ‡ธ๐Ÿ‡ฆ", name: "Saudi Arabia" }, - KUW: { icon: "๐Ÿ‡ฐ๐Ÿ‡ผ", name: "Kuwait" }, - LAO: { icon: "๐Ÿ‡ฑ๐Ÿ‡ฆ", name: "Laos" }, - LAT: { icon: "๐Ÿ‡ฑ๐Ÿ‡ป", name: "Latvia" }, - LBA: { icon: "๐Ÿ‡ฑ๐Ÿ‡พ", name: "Libya" }, - LBN: { icon: "๐Ÿ‡ฑ๐Ÿ‡ง", name: "Lebanon" }, - LBR: { icon: "๐Ÿ‡ฑ๐Ÿ‡ท", name: "Liberia" }, - LCA: { icon: "๐Ÿ‡ฑ๐Ÿ‡จ", name: "Saint Lucia" }, - LES: { icon: "๐Ÿ‡ฑ๐Ÿ‡ธ", name: "Lesotho" }, - LIE: { icon: "๐Ÿ‡ฑ๐Ÿ‡ฎ", name: "Liechtenstein" }, - LTU: { icon: "๐Ÿ‡ฑ๐Ÿ‡น", name: "Lithuania" }, - LUX: { icon: "๐Ÿ‡ฑ๐Ÿ‡บ", name: "Luxembourg" }, - MAD: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฌ", name: "Madagascar" }, - MAR: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฆ", name: "Morocco" }, - MAS: { icon: "๐Ÿ‡ฒ๐Ÿ‡พ", name: "Malaysia" }, - MAW: { icon: "๐Ÿ‡ฒ๐Ÿ‡ผ", name: "Malawi" }, - MDA: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฉ", name: "Moldova" }, - MDV: { icon: "๐Ÿ‡ฒ๐Ÿ‡ป", name: "Maldives" }, - MEX: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฝ", name: "Mexico" }, - MGL: { icon: "๐Ÿ‡ฒ๐Ÿ‡ณ", name: "Mongolia" }, - MHL: { icon: "๐Ÿ‡ฒ๐Ÿ‡ญ", name: "Marshall Islands" }, - MKD: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฐ", name: "North Macedonia" }, - MLI: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฑ", name: "Mali" }, - MLT: { icon: "๐Ÿ‡ฒ๐Ÿ‡น", name: "Malta" }, - MNE: { icon: "๐Ÿ‡ฒ๐Ÿ‡ช", name: "Montenegro" }, - MON: { icon: "๐Ÿ‡ฒ๐Ÿ‡จ", name: "Monaco" }, - MOZ: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฟ", name: "Mozambique" }, - MRI: { icon: "๐Ÿ‡ฒ๐Ÿ‡บ", name: "Mauritius" }, - MTN: { icon: "๐Ÿ‡ฒ๐Ÿ‡ท", name: "Mauritania" }, - MYA: { icon: "๐Ÿ‡ฒ๐Ÿ‡ฒ", name: "Myanmar" }, - NAM: { icon: "๐Ÿ‡ณ๐Ÿ‡ฆ", name: "Namibia" }, - NCA: { icon: "๐Ÿ‡ณ๐Ÿ‡ฎ", name: "Nicaragua" }, - NED: { icon: "๐Ÿ‡ณ๐Ÿ‡ฑ", name: "Netherlands" }, - NEP: { icon: "๐Ÿ‡ณ๐Ÿ‡ต", name: "Nepal" }, - NGR: { icon: "๐Ÿ‡ณ๐Ÿ‡ฌ", name: "Nigeria" }, - NIG: { icon: "๐Ÿ‡ณ๐Ÿ‡ช", name: "Niger" }, - NOR: { icon: "๐Ÿ‡ณ๐Ÿ‡ด", name: "Norway" }, - NRU: { icon: "๐Ÿ‡ณ๐Ÿ‡ท", name: "Nauru" }, - NZL: { icon: "๐Ÿ‡ณ๐Ÿ‡ฟ", name: "New Zealand" }, - OMA: { icon: "๐Ÿ‡ด๐Ÿ‡ฒ", name: "Oman" }, - PAK: { icon: "๐Ÿ‡ต๐Ÿ‡ฐ", name: "Pakistan" }, - PAN: { icon: "๐Ÿ‡ต๐Ÿ‡ฆ", name: "Panama" }, - PAR: { icon: "๐Ÿ‡ต๐Ÿ‡พ", name: "Paraguay" }, - PER: { icon: "๐Ÿ‡ต๐Ÿ‡ช", name: "Peru" }, - PHI: { icon: "๐Ÿ‡ต๐Ÿ‡ญ", name: "Philippines" }, - PLE: { icon: "๐Ÿ‡ต๐Ÿ‡ธ", name: "Palestine" }, - PLW: { icon: "๐Ÿ‡ต๐Ÿ‡ผ", name: "Palau" }, - PNG: { icon: "๐Ÿ‡ต๐Ÿ‡ฌ", name: "Papua New Guinea" }, - POL: { icon: "๐Ÿ‡ต๐Ÿ‡ฑ", name: "Poland" }, - POR: { icon: "๐Ÿ‡ต๐Ÿ‡น", name: "Portugal" }, - PRK: { icon: "๐Ÿ‡ฐ๐Ÿ‡ต", name: "North Korea" }, - PUR: { icon: "๐Ÿ‡ต๐Ÿ‡ท", name: "Puerto Rico" }, - QAT: { icon: "๐Ÿ‡ถ๐Ÿ‡ฆ", name: "Qatar" }, - ROU: { icon: "๐Ÿ‡ท๐Ÿ‡ด", name: "Romania" }, - RSA: { icon: "๐Ÿ‡ฟ๐Ÿ‡ฆ", name: "South Africa" }, - RWA: { icon: "๐Ÿ‡ท๐Ÿ‡ผ", name: "Rwanda" }, - SAM: { icon: "๐Ÿ‡ผ๐Ÿ‡ธ", name: "Samoa" }, - SEN: { icon: "๐Ÿ‡ธ๐Ÿ‡ณ", name: "Senegal" }, - SEY: { icon: "๐Ÿ‡ธ๐Ÿ‡จ", name: "Seychelles" }, - SGP: { icon: "๐Ÿ‡ธ๐Ÿ‡ฌ", name: "Singapore" }, - SKN: { icon: "๐Ÿ‡ฐ๐Ÿ‡ณ", name: "Saint Kitts and Nevis" }, - SLE: { icon: "๐Ÿ‡ธ๐Ÿ‡ฑ", name: "Sierra Leone" }, - SLO: { icon: "๐Ÿ‡ธ๐Ÿ‡ฎ", name: "Slovenia" }, - SMR: { icon: "๐Ÿ‡ธ๐Ÿ‡ฒ", name: "San Marino" }, - SOL: { icon: "๐Ÿ‡ธ๐Ÿ‡ง", name: "Solomon Islands" }, - SOM: { icon: "๐Ÿ‡ธ๐Ÿ‡ด", name: "Somalia" }, - SRB: { icon: "๐Ÿ‡ท๐Ÿ‡ธ", name: "Serbia" }, - SRI: { icon: "๐Ÿ‡ฑ๐Ÿ‡ฐ", name: "Sri Lanka" }, - SSD: { icon: "๐Ÿ‡ธ๐Ÿ‡ธ", name: "South Sudan" }, - STP: { icon: "๐Ÿ‡ธ๐Ÿ‡น", name: "Sao Tome and Principe" }, - SUD: { icon: "๐Ÿ‡ธ๐Ÿ‡ฉ", name: "Sudan" }, - SUI: { icon: "๐Ÿ‡จ๐Ÿ‡ญ", name: "Switzerland" }, - SUR: { icon: "๐Ÿ‡ธ๐Ÿ‡ท", name: "Suriname" }, - SVK: { icon: "๐Ÿ‡ธ๐Ÿ‡ฐ", name: "Slovakia" }, - SWE: { icon: "๐Ÿ‡ธ๐Ÿ‡ช", name: "Sweden" }, - SWZ: { icon: "๐Ÿ‡ธ๐Ÿ‡ฟ", name: "Eswatini" }, - SYR: { icon: "๐Ÿ‡ธ๐Ÿ‡พ", name: "Syria" }, - TAN: { icon: "๐Ÿ‡น๐Ÿ‡ฟ", name: "Tanzania" }, - TGA: { icon: "๐Ÿ‡น๐Ÿ‡ด", name: "Tonga" }, - THA: { icon: "๐Ÿ‡น๐Ÿ‡ญ", name: "Thailand" }, - TJK: { icon: "๐Ÿ‡น๐Ÿ‡ฏ", name: "Tajikistan" }, - TKM: { icon: "๐Ÿ‡น๐Ÿ‡ฒ", name: "Turkmenistan" }, - TLS: { icon: "๐Ÿ‡น๐Ÿ‡ฑ", name: "Timor-Leste" }, - TOG: { icon: "๐Ÿ‡น๐Ÿ‡ฌ", name: "Togo" }, - TPE: { icon: "๐Ÿ‡น๐Ÿ‡ผ", name: "Chinese Taipei" }, - TTO: { icon: "๐Ÿ‡น๐Ÿ‡น", name: "Trinidad and Tobago" }, - TUN: { icon: "๐Ÿ‡น๐Ÿ‡ณ", name: "Tunisia" }, - TUR: { icon: "๐Ÿ‡น๐Ÿ‡ท", name: "Tรผrkiye" }, - TUV: { icon: "๐Ÿ‡น๐Ÿ‡ป", name: "Tuvalu" }, - UAE: { icon: "๐Ÿ‡ฆ๐Ÿ‡ช", name: "United Arab Emirates" }, - UGA: { icon: "๐Ÿ‡บ๐Ÿ‡ฌ", name: "Uganda" }, - UKR: { icon: "๐Ÿ‡บ๐Ÿ‡ฆ", name: "Ukraine" }, - URU: { icon: "๐Ÿ‡บ๐Ÿ‡พ", name: "Uruguay" }, - USA: { icon: "๐Ÿ‡บ๐Ÿ‡ธ", name: "United States" }, - UZB: { icon: "๐Ÿ‡บ๐Ÿ‡ฟ", name: "Uzbekistan" }, - VAN: { icon: "๐Ÿ‡ป๐Ÿ‡บ", name: "Vanuatu" }, - VEN: { icon: "๐Ÿ‡ป๐Ÿ‡ช", name: "Venezuela" }, - VIE: { icon: "๐Ÿ‡ป๐Ÿ‡ณ", name: "Vietnam" }, - VIN: { icon: "๐Ÿ‡ป๐Ÿ‡จ", name: "Saint Vincent and the Grenadines" }, - YEM: { icon: "๐Ÿ‡พ๐Ÿ‡ช", name: "Yemen" }, - ZAM: { icon: "๐Ÿ‡ฟ๐Ÿ‡ฒ", name: "Zambia" }, - ZIM: { icon: "๐Ÿ‡ฟ๐Ÿ‡ผ", name: "Zimbabwe" }, -}; - -/** - * isValidNOC checks if the NOC code is in the NOCS list - * @param {string} noc National Olympic Committee code - * @returns {boolean} - */ -const isValidNOC = (noc) => NOCS[noc] !== undefined; - -/** - * getNOC returns the NOC name and icon from the NOC code - * @param {string} noc National Olympic Committee code - * @returns {object} - */ -const getNOC = (noc) => { - if (isValidNOC(noc)) { - return NOCS[noc]; - } - throw new Error(`NOC code ${noc} not found`); -}; - -/** - * getNOCFlag returns the NOC icon from the NOC code - * @param {string} noc National Olympic Committee code - * @returns {string} - */ -const getNOCFlag = (noc) => getNOC(noc).icon; - -/** - * getNOCName returns the NOC name from the NOC code - * @param {string} noc National Olympic Committee code - * @returns - */ -const getNOCName = (noc) => getNOC(noc).name; - -module.exports = { - isValidNOC, - getNOCFlag, - getNOCName, -}; diff --git a/src/nocs.ts b/src/nocs.ts new file mode 100644 index 000000000..3a8300633 --- /dev/null +++ b/src/nocs.ts @@ -0,0 +1,242 @@ +import { NOC } from "./types"; + +const NOCS: Map = new Map([ + ["AFG", { icon: "๐Ÿ‡ฆ๐Ÿ‡ซ", name: "Afghanistan" }], + ["ALB", { icon: "๐Ÿ‡ฆ๐Ÿ‡ฑ", name: "Albania" }], + ["ALG", { icon: "๐Ÿ‡ฉ๐Ÿ‡ฟ", name: "Algeria" }], + ["AND", { icon: "๐Ÿ‡ฆ๐Ÿ‡ฉ", name: "Andorra" }], + ["ANG", { icon: "๐Ÿ‡ฆ๐Ÿ‡ด", name: "Angola" }], + ["ANT", { icon: "๐Ÿ‡ฆ๐Ÿ‡ฌ", name: "Antigua and Barbuda" }], + ["ARG", { icon: "๐Ÿ‡ฆ๐Ÿ‡ท", name: "Argentina" }], + ["ARM", { icon: "๐Ÿ‡ฆ๐Ÿ‡ฒ", name: "Armenia" }], + ["ARU", { icon: "๐Ÿ‡ฆ๐Ÿ‡ผ", name: "Aruba" }], + ["ASA", { icon: "๐Ÿ‡ฆ๐Ÿ‡ธ", name: "American Samoa" }], + ["AUS", { icon: "๐Ÿ‡ฆ๐Ÿ‡บ", name: "Australia" }], + ["AUT", { icon: "๐Ÿ‡ฆ๐Ÿ‡น", name: "Austria" }], + ["AZE", { icon: "๐Ÿ‡ฆ๐Ÿ‡ฟ", name: "Azerbaijan" }], + ["BAH", { icon: "๐Ÿ‡ง๐Ÿ‡ธ", name: "Bahamas" }], + ["BAN", { icon: "๐Ÿ‡ง๐Ÿ‡ฉ", name: "Bangladesh" }], + ["BAR", { icon: "๐Ÿ‡ง๐Ÿ‡ง", name: "Barbados" }], + ["BDI", { icon: "๐Ÿ‡ง๐Ÿ‡ฎ", name: "Burundi" }], + ["BEL", { icon: "๐Ÿ‡ง๐Ÿ‡ช", name: "Belgium" }], + ["BEN", { icon: "๐Ÿ‡ง๐Ÿ‡ฏ", name: "Benin" }], + ["BER", { icon: "๐Ÿ‡ง๐Ÿ‡ฒ", name: "Bermuda" }], + ["BHU", { icon: "๐Ÿ‡ง๐Ÿ‡น", name: "Bhutan" }], + ["BIH", { icon: "๐Ÿ‡ง๐Ÿ‡ฆ", name: "Bosnia and Herzegovina" }], + ["BIZ", { icon: "๐Ÿ‡ง๐Ÿ‡ฟ", name: "Belize" }], + ["BOL", { icon: "๐Ÿ‡ง๐Ÿ‡ด", name: "Bolivia" }], + ["BOT", { icon: "๐Ÿ‡ง๐Ÿ‡ผ", name: "Botswana" }], + ["BRA", { icon: "๐Ÿ‡ง๐Ÿ‡ท", name: "Brazil" }], + ["BRN", { icon: "๐Ÿ‡ง๐Ÿ‡ญ", name: "Bahrain" }], + ["BRU", { icon: "๐Ÿ‡ง๐Ÿ‡ณ", name: "Brunei" }], + ["BUL", { icon: "๐Ÿ‡ง๐Ÿ‡ฌ", name: "Bulgaria" }], + ["BUR", { icon: "๐Ÿ‡ง๐Ÿ‡ซ", name: "Burkina Faso" }], + ["CAF", { icon: "๐Ÿ‡จ๐Ÿ‡ซ", name: "Central African Republic" }], + ["CAM", { icon: "๐Ÿ‡ฐ๐Ÿ‡ญ", name: "Cambodia" }], + ["CAN", { icon: "๐Ÿ‡จ๐Ÿ‡ฆ", name: "Canada" }], + ["CAY", { icon: "๐Ÿ‡ฐ๐Ÿ‡พ", name: "Cayman Islands" }], + ["CGO", { icon: "๐Ÿ‡จ๐Ÿ‡ฌ", name: "Congo" }], + ["CHA", { icon: "๐Ÿ‡น๐Ÿ‡ฉ", name: "Chad" }], + ["CHI", { icon: "๐Ÿ‡จ๐Ÿ‡ฑ", name: "Chile" }], + ["CHN", { icon: "๐Ÿ‡จ๐Ÿ‡ณ", name: "China" }], + ["CIV", { icon: "๐Ÿ‡จ๐Ÿ‡ฎ", name: "Cรดte d'Ivoire" }], + ["CMR", { icon: "๐Ÿ‡จ๐Ÿ‡ฒ", name: "Cameroon" }], + ["COD", { icon: "๐Ÿ‡จ๐Ÿ‡ฉ", name: "Democratic Republic of the Congo" }], + ["COK", { icon: "๐Ÿ‡จ๐Ÿ‡ฐ", name: "Cook Islands" }], + ["COL", { icon: "๐Ÿ‡จ๐Ÿ‡ด", name: "Colombia" }], + ["COM", { icon: "๐Ÿ‡ฐ๐Ÿ‡ฒ", name: "Comoros" }], + ["CPV", { icon: "๐Ÿ‡จ๐Ÿ‡ป", name: "Cabo Verde" }], + ["CRC", { icon: "๐Ÿ‡จ๐Ÿ‡ท", name: "Costa Rica" }], + ["CRO", { icon: "๐Ÿ‡ญ๐Ÿ‡ท", name: "Croatia" }], + ["CUB", { icon: "๐Ÿ‡จ๐Ÿ‡บ", name: "Cuba" }], + ["CYP", { icon: "๐Ÿ‡จ๐Ÿ‡พ", name: "Cyprus" }], + ["CZE", { icon: "๐Ÿ‡จ๐Ÿ‡ฟ", name: "Czechia" }], + ["DEN", { icon: "๐Ÿ‡ฉ๐Ÿ‡ฐ", name: "Denmark" }], + ["DJI", { icon: "๐Ÿ‡ฉ๐Ÿ‡ฏ", name: "Djibouti" }], + ["DMA", { icon: "๐Ÿ‡ฉ๐Ÿ‡ฒ", name: "Dominica" }], + ["DOM", { icon: "๐Ÿ‡ฉ๐Ÿ‡ด", name: "Dominican Republic" }], + ["ECU", { icon: "๐Ÿ‡ช๐Ÿ‡จ", name: "Ecuador" }], + ["EGY", { icon: "๐Ÿ‡ช๐Ÿ‡ฌ", name: "Egypt" }], + ["EOR", { icon: "๐Ÿณ๏ธ", name: "Refugee Olympic Team" }], + ["ERI", { icon: "๐Ÿ‡ช๐Ÿ‡ท", name: "Eritrea" }], + ["ESA", { icon: "๐Ÿ‡ธ๐Ÿ‡ป", name: "El Salvador" }], + ["ESP", { icon: "๐Ÿ‡ช๐Ÿ‡ธ", name: "Spain" }], + ["EST", { icon: "๐Ÿ‡ช๐Ÿ‡ช", name: "Estonia" }], + ["ETH", { icon: "๐Ÿ‡ช๐Ÿ‡น", name: "Ethiopia" }], + ["FIJ", { icon: "๐Ÿ‡ซ๐Ÿ‡ฏ", name: "Fiji" }], + ["FIN", { icon: "๐Ÿ‡ซ๐Ÿ‡ฎ", name: "Finland" }], + ["FRA", { icon: "๐Ÿ‡ซ๐Ÿ‡ท", name: "France" }], + ["FSM", { icon: "๐Ÿ‡ซ๐Ÿ‡ฒ", name: "Federated States of Micronesia" }], + ["GAB", { icon: "๐Ÿ‡ฌ๐Ÿ‡ฆ", name: "Gabon" }], + ["GAM", { icon: "๐Ÿ‡ฌ๐Ÿ‡ฒ", name: "Gambia" }], + ["GBR", { icon: "๐Ÿ‡ฌ๐Ÿ‡ง", name: "Great Britain" }], + ["GBS", { icon: "๐Ÿ‡ฌ๐Ÿ‡ผ", name: "Guinea-Bissau" }], + ["GEO", { icon: "๐Ÿ‡ฌ๐Ÿ‡ช", name: "Georgia" }], + ["GEQ", { icon: "๐Ÿ‡ฌ๐Ÿ‡ถ", name: "Equatorial Guinea" }], + ["GER", { icon: "๐Ÿ‡ฉ๐Ÿ‡ช", name: "Germany" }], + ["GHA", { icon: "๐Ÿ‡ฌ๐Ÿ‡ญ", name: "Ghana" }], + ["GRE", { icon: "๐Ÿ‡ฌ๐Ÿ‡ท", name: "Greece" }], + ["GRN", { icon: "๐Ÿ‡ฌ๐Ÿ‡ฉ", name: "Grenada" }], + ["GUA", { icon: "๐Ÿ‡ฌ๐Ÿ‡น", name: "Guatemala" }], + ["GUI", { icon: "๐Ÿ‡ฌ๐Ÿ‡ณ", name: "Guinea" }], + ["GUM", { icon: "๐Ÿ‡ฌ๐Ÿ‡บ", name: "Guam" }], + ["GUY", { icon: "๐Ÿ‡ฌ๐Ÿ‡พ", name: "Guyana" }], + ["HAI", { icon: "๐Ÿ‡ญ๐Ÿ‡น", name: "Haiti" }], + ["HKG", { icon: "๐Ÿ‡ญ๐Ÿ‡ฐ", name: "Hong Kong" }], + ["HON", { icon: "๐Ÿ‡ญ๐Ÿ‡ณ", name: "Honduras" }], + ["HUN", { icon: "๐Ÿ‡ญ๐Ÿ‡บ", name: "Hungary" }], + ["INA", { icon: "๐Ÿ‡ฎ๐Ÿ‡ฉ", name: "Indonesia" }], + ["IND", { icon: "๐Ÿ‡ฎ๐Ÿ‡ณ", name: "India" }], + ["IRI", { icon: "๐Ÿ‡ฎ๐Ÿ‡ท", name: "Iran" }], + ["IRL", { icon: "๐Ÿ‡ฎ๐Ÿ‡ช", name: "Ireland" }], + ["IRQ", { icon: "๐Ÿ‡ฎ๐Ÿ‡ถ", name: "Iraq" }], + ["ISL", { icon: "๐Ÿ‡ฎ๐Ÿ‡ธ", name: "Iceland" }], + ["ISR", { icon: "๐Ÿ‡ฎ๐Ÿ‡ฑ", name: "Israel" }], + ["ISV", { icon: "๐Ÿ‡ป๐Ÿ‡ฎ", name: "U.S. Virgin Islands" }], + ["ITA", { icon: "๐Ÿ‡ฎ๐Ÿ‡น", name: "Italy" }], + ["IVB", { icon: "๐Ÿ‡ป๐Ÿ‡ฌ", name: "British Virgin Islands" }], + ["JAM", { icon: "๐Ÿ‡ฏ๐Ÿ‡ฒ", name: "Jamaica" }], + ["JOR", { icon: "๐Ÿ‡ฏ๐Ÿ‡ด", name: "Jordan" }], + ["JPN", { icon: "๐Ÿ‡ฏ๐Ÿ‡ต", name: "Japan" }], + ["KAZ", { icon: "๐Ÿ‡ฐ๐Ÿ‡ฟ", name: "Kazakhstan" }], + ["KEN", { icon: "๐Ÿ‡ฐ๐Ÿ‡ช", name: "Kenya" }], + ["KGZ", { icon: "๐Ÿ‡ฐ๐Ÿ‡ฌ", name: "Kyrgyzstan" }], + ["KIR", { icon: "๐Ÿ‡ฐ๐Ÿ‡ฎ", name: "Kiribati" }], + ["KOR", { icon: "๐Ÿ‡ฐ๐Ÿ‡ท", name: "Korea" }], + ["KOS", { icon: "๐Ÿ‡ฝ๐Ÿ‡ฐ", name: "Kosovo" }], + ["KSA", { icon: "๐Ÿ‡ธ๐Ÿ‡ฆ", name: "Saudi Arabia" }], + ["KUW", { icon: "๐Ÿ‡ฐ๐Ÿ‡ผ", name: "Kuwait" }], + ["LAO", { icon: "๐Ÿ‡ฑ๐Ÿ‡ฆ", name: "Laos" }], + ["LAT", { icon: "๐Ÿ‡ฑ๐Ÿ‡ป", name: "Latvia" }], + ["LBA", { icon: "๐Ÿ‡ฑ๐Ÿ‡พ", name: "Libya" }], + ["LBN", { icon: "๐Ÿ‡ฑ๐Ÿ‡ง", name: "Lebanon" }], + ["LBR", { icon: "๐Ÿ‡ฑ๐Ÿ‡ท", name: "Liberia" }], + ["LCA", { icon: "๐Ÿ‡ฑ๐Ÿ‡จ", name: "Saint Lucia" }], + ["LES", { icon: "๐Ÿ‡ฑ๐Ÿ‡ธ", name: "Lesotho" }], + ["LIE", { icon: "๐Ÿ‡ฑ๐Ÿ‡ฎ", name: "Liechtenstein" }], + ["LTU", { icon: "๐Ÿ‡ฑ๐Ÿ‡น", name: "Lithuania" }], + ["LUX", { icon: "๐Ÿ‡ฑ๐Ÿ‡บ", name: "Luxembourg" }], + ["MAD", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฌ", name: "Madagascar" }], + ["MAR", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฆ", name: "Morocco" }], + ["MAS", { icon: "๐Ÿ‡ฒ๐Ÿ‡พ", name: "Malaysia" }], + ["MAW", { icon: "๐Ÿ‡ฒ๐Ÿ‡ผ", name: "Malawi" }], + ["MDA", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฉ", name: "Moldova" }], + ["MDV", { icon: "๐Ÿ‡ฒ๐Ÿ‡ป", name: "Maldives" }], + ["MEX", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฝ", name: "Mexico" }], + ["MGL", { icon: "๐Ÿ‡ฒ๐Ÿ‡ณ", name: "Mongolia" }], + ["MHL", { icon: "๐Ÿ‡ฒ๐Ÿ‡ญ", name: "Marshall Islands" }], + ["MKD", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฐ", name: "North Macedonia" }], + ["MLI", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฑ", name: "Mali" }], + ["MLT", { icon: "๐Ÿ‡ฒ๐Ÿ‡น", name: "Malta" }], + ["MNE", { icon: "๐Ÿ‡ฒ๐Ÿ‡ช", name: "Montenegro" }], + ["MON", { icon: "๐Ÿ‡ฒ๐Ÿ‡จ", name: "Monaco" }], + ["MOZ", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฟ", name: "Mozambique" }], + ["MRI", { icon: "๐Ÿ‡ฒ๐Ÿ‡บ", name: "Mauritius" }], + ["MTN", { icon: "๐Ÿ‡ฒ๐Ÿ‡ท", name: "Mauritania" }], + ["MYA", { icon: "๐Ÿ‡ฒ๐Ÿ‡ฒ", name: "Myanmar" }], + ["NAM", { icon: "๐Ÿ‡ณ๐Ÿ‡ฆ", name: "Namibia" }], + ["NCA", { icon: "๐Ÿ‡ณ๐Ÿ‡ฎ", name: "Nicaragua" }], + ["NED", { icon: "๐Ÿ‡ณ๐Ÿ‡ฑ", name: "Netherlands" }], + ["NEP", { icon: "๐Ÿ‡ณ๐Ÿ‡ต", name: "Nepal" }], + ["NGR", { icon: "๐Ÿ‡ณ๐Ÿ‡ฌ", name: "Nigeria" }], + ["NIG", { icon: "๐Ÿ‡ณ๐Ÿ‡ช", name: "Niger" }], + ["NOR", { icon: "๐Ÿ‡ณ๐Ÿ‡ด", name: "Norway" }], + ["NRU", { icon: "๐Ÿ‡ณ๐Ÿ‡ท", name: "Nauru" }], + ["NZL", { icon: "๐Ÿ‡ณ๐Ÿ‡ฟ", name: "New Zealand" }], + ["OMA", { icon: "๐Ÿ‡ด๐Ÿ‡ฒ", name: "Oman" }], + ["PAK", { icon: "๐Ÿ‡ต๐Ÿ‡ฐ", name: "Pakistan" }], + ["PAN", { icon: "๐Ÿ‡ต๐Ÿ‡ฆ", name: "Panama" }], + ["PAR", { icon: "๐Ÿ‡ต๐Ÿ‡พ", name: "Paraguay" }], + ["PER", { icon: "๐Ÿ‡ต๐Ÿ‡ช", name: "Peru" }], + ["PHI", { icon: "๐Ÿ‡ต๐Ÿ‡ญ", name: "Philippines" }], + ["PLE", { icon: "๐Ÿ‡ต๐Ÿ‡ธ", name: "Palestine" }], + ["PLW", { icon: "๐Ÿ‡ต๐Ÿ‡ผ", name: "Palau" }], + ["PNG", { icon: "๐Ÿ‡ต๐Ÿ‡ฌ", name: "Papua New Guinea" }], + ["POL", { icon: "๐Ÿ‡ต๐Ÿ‡ฑ", name: "Poland" }], + ["POR", { icon: "๐Ÿ‡ต๐Ÿ‡น", name: "Portugal" }], + ["PRK", { icon: "๐Ÿ‡ฐ๐Ÿ‡ต", name: "North Korea" }], + ["PUR", { icon: "๐Ÿ‡ต๐Ÿ‡ท", name: "Puerto Rico" }], + ["QAT", { icon: "๐Ÿ‡ถ๐Ÿ‡ฆ", name: "Qatar" }], + ["ROU", { icon: "๐Ÿ‡ท๐Ÿ‡ด", name: "Romania" }], + ["RSA", { icon: "๐Ÿ‡ฟ๐Ÿ‡ฆ", name: "South Africa" }], + ["RWA", { icon: "๐Ÿ‡ท๐Ÿ‡ผ", name: "Rwanda" }], + ["SAM", { icon: "๐Ÿ‡ผ๐Ÿ‡ธ", name: "Samoa" }], + ["SEN", { icon: "๐Ÿ‡ธ๐Ÿ‡ณ", name: "Senegal" }], + ["SEY", { icon: "๐Ÿ‡ธ๐Ÿ‡จ", name: "Seychelles" }], + ["SGP", { icon: "๐Ÿ‡ธ๐Ÿ‡ฌ", name: "Singapore" }], + ["SKN", { icon: "๐Ÿ‡ฐ๐Ÿ‡ณ", name: "Saint Kitts and Nevis" }], + ["SLE", { icon: "๐Ÿ‡ธ๐Ÿ‡ฑ", name: "Sierra Leone" }], + ["SLO", { icon: "๐Ÿ‡ธ๐Ÿ‡ฎ", name: "Slovenia" }], + ["SMR", { icon: "๐Ÿ‡ธ๐Ÿ‡ฒ", name: "San Marino" }], + ["SOL", { icon: "๐Ÿ‡ธ๐Ÿ‡ง", name: "Solomon Islands" }], + ["SOM", { icon: "๐Ÿ‡ธ๐Ÿ‡ด", name: "Somalia" }], + ["SRB", { icon: "๐Ÿ‡ท๐Ÿ‡ธ", name: "Serbia" }], + ["SRI", { icon: "๐Ÿ‡ฑ๐Ÿ‡ฐ", name: "Sri Lanka" }], + ["SSD", { icon: "๐Ÿ‡ธ๐Ÿ‡ธ", name: "South Sudan" }], + ["STP", { icon: "๐Ÿ‡ธ๐Ÿ‡น", name: "Sao Tome and Principe" }], + ["SUD", { icon: "๐Ÿ‡ธ๐Ÿ‡ฉ", name: "Sudan" }], + ["SUI", { icon: "๐Ÿ‡จ๐Ÿ‡ญ", name: "Switzerland" }], + ["SUR", { icon: "๐Ÿ‡ธ๐Ÿ‡ท", name: "Suriname" }], + ["SVK", { icon: "๐Ÿ‡ธ๐Ÿ‡ฐ", name: "Slovakia" }], + ["SWE", { icon: "๐Ÿ‡ธ๐Ÿ‡ช", name: "Sweden" }], + ["SWZ", { icon: "๐Ÿ‡ธ๐Ÿ‡ฟ", name: "Eswatini" }], + ["SYR", { icon: "๐Ÿ‡ธ๐Ÿ‡พ", name: "Syria" }], + ["TAN", { icon: "๐Ÿ‡น๐Ÿ‡ฟ", name: "Tanzania" }], + ["TGA", { icon: "๐Ÿ‡น๐Ÿ‡ด", name: "Tonga" }], + ["THA", { icon: "๐Ÿ‡น๐Ÿ‡ญ", name: "Thailand" }], + ["TJK", { icon: "๐Ÿ‡น๐Ÿ‡ฏ", name: "Tajikistan" }], + ["TKM", { icon: "๐Ÿ‡น๐Ÿ‡ฒ", name: "Turkmenistan" }], + ["TLS", { icon: "๐Ÿ‡น๐Ÿ‡ฑ", name: "Timor-Leste" }], + ["TOG", { icon: "๐Ÿ‡น๐Ÿ‡ฌ", name: "Togo" }], + ["TPE", { icon: "๐Ÿ‡น๐Ÿ‡ผ", name: "Chinese Taipei" }], + ["TTO", { icon: "๐Ÿ‡น๐Ÿ‡น", name: "Trinidad and Tobago" }], + ["TUN", { icon: "๐Ÿ‡น๐Ÿ‡ณ", name: "Tunisia" }], + ["TUR", { icon: "๐Ÿ‡น๐Ÿ‡ท", name: "Tรผrkiye" }], + ["TUV", { icon: "๐Ÿ‡น๐Ÿ‡ป", name: "Tuvalu" }], + ["UAE", { icon: "๐Ÿ‡ฆ๐Ÿ‡ช", name: "United Arab Emirates" }], + ["UGA", { icon: "๐Ÿ‡บ๐Ÿ‡ฌ", name: "Uganda" }], + ["UKR", { icon: "๐Ÿ‡บ๐Ÿ‡ฆ", name: "Ukraine" }], + ["URU", { icon: "๐Ÿ‡บ๐Ÿ‡พ", name: "Uruguay" }], + ["USA", { icon: "๐Ÿ‡บ๐Ÿ‡ธ", name: "United States" }], + ["UZB", { icon: "๐Ÿ‡บ๐Ÿ‡ฟ", name: "Uzbekistan" }], + ["VAN", { icon: "๐Ÿ‡ป๐Ÿ‡บ", name: "Vanuatu" }], + ["VEN", { icon: "๐Ÿ‡ป๐Ÿ‡ช", name: "Venezuela" }], + ["VIE", { icon: "๐Ÿ‡ป๐Ÿ‡ณ", name: "Vietnam" }], + ["VIN", { icon: "๐Ÿ‡ป๐Ÿ‡จ", name: "Saint Vincent and the Grenadines" }], + ["YEM", { icon: "๐Ÿ‡พ๐Ÿ‡ช", name: "Yemen" }], + ["ZAM", { icon: "๐Ÿ‡ฟ๐Ÿ‡ฒ", name: "Zambia" }], + ["ZIM", { icon: "๐Ÿ‡ฟ๐Ÿ‡ผ", name: "Zimbabwe" }], +]); + +/** + * isValidNOC checks if the NOC code is in the NOCS list + * @param {string} noc National Olympic Committee code + * @returns {boolean} + */ +export const isValidNOC = (noc: string) => NOCS.has(noc); + +/** + * getNOC returns the NOC name and icon from the NOC code + * @param {string} noc National Olympic Committee code + * @returns {object} + */ +export const getNOC = (noc: string): NOC => { + if (isValidNOC(noc)) { + return NOCS.get(noc)!; + } + throw new Error(`NOC code ${noc} not found`); +}; + +/** + * getNOCFlag returns the NOC icon from the NOC code + * @param {string} noc National Olympic Committee code + * @returns {string} + */ +export const getNOCFlag = (noc: string) => getNOC(noc).icon; + +/** + * getNOCName returns the NOC name from the NOC code + * @param {string} noc National Olympic Committee code + * @returns + */ +export const getNOCName = (noc: string) => getNOC(noc).name; diff --git a/src/sports.js b/src/sports.js deleted file mode 100644 index 2d2fd518d..000000000 --- a/src/sports.js +++ /dev/null @@ -1,59 +0,0 @@ -const SPORTS = { - "3x3-basketball": "๐Ÿ€", - "archery": "๐Ÿน", - "artistic-gymnastics": "๐Ÿคธ", - "artistic-swimming": "๐ŸŠ", - "athletics": "๐Ÿƒ", - "badminton": "๐Ÿธ", - "basketball": "๐Ÿ€", - "beach-volleyball": "๐Ÿ", - "boxing": "๐ŸฅŠ", - "breaking": "๐Ÿคธ", - "canoe-slalom": "๐Ÿ›ถ", - "canoe-sprint": "๐Ÿ›ถ", - "cycling-bmx-freestyle": "๐Ÿšด", - "cycling-bmx-racing": "๐Ÿšด", - "cycling-mountain-bike": "๐Ÿšด", - "cycling-road": "๐Ÿšด", - "cycling-track": "๐Ÿšด", - "diving": "๐ŸŠ", - "equestrian": "๐Ÿ‡", - "fencing": "๐Ÿคบ", - "football": "โšฝ", - "golf": "โ›ณ", - "handball": "๐Ÿคพ", - "hockey": "๐Ÿ‘", - "judo": "๐Ÿฅ‹", - "marathon-swimming": "๐ŸŠ", - "modern-pentathlon": "๐Ÿคบ", - "rhythmic-gymnastics": "๐Ÿคธ", - "rowing": "๐Ÿšฃ", - "rugby-sevens": "๐Ÿ‰", - "sailing": "โ›ต", - "shooting": "๐Ÿ”ซ", - "skateboarding": "๐Ÿ›น", - "sport-climbing": "๐Ÿง—", - "surfing": "๐Ÿ„", - "swimming": "๐ŸŠ", - "table-tennis": "๐Ÿ“", - "taekwondo": "๐Ÿฅ‹", - "tennis":"๐ŸŽพ", - "trampoline-gymnastics": "๐Ÿคธ", - "triathlon": "๐ŸŠ", - "volleyball": "๐Ÿ", - "water-polo": "๐Ÿคฝ", - "weightlifting": "๐Ÿ‹", - "wrestling": "๐Ÿคผ", -}; - -const getSportIcon = (sport) => { - if (SPORTS[sport]) { - return SPORTS[sport]; - } - console.error(`No icon set for ${sport}`); - return ""; -}; - -module.exports = { - getSportIcon, -}; diff --git a/src/sports.ts b/src/sports.ts new file mode 100644 index 000000000..2e4c3c2f2 --- /dev/null +++ b/src/sports.ts @@ -0,0 +1,55 @@ +const SPORTS: Map = new Map([ + ["3x3-basketball", "๐Ÿ€"], + ["archery", "๐Ÿน"], + ["artistic-gymnastics", "๐Ÿคธ"], + ["artistic-swimming", "๐ŸŠ"], + ["athletics", "๐Ÿƒ"], + ["badminton", "๐Ÿธ"], + ["basketball", "๐Ÿ€"], + ["beach-volleyball", "๐Ÿ"], + ["boxing", "๐ŸฅŠ"], + ["breaking", "๐Ÿคธ"], + ["canoe-slalom", "๐Ÿ›ถ"], + ["canoe-sprint", "๐Ÿ›ถ"], + ["cycling-bmx-freestyle", "๐Ÿšด"], + ["cycling-bmx-racing", "๐Ÿšด"], + ["cycling-mountain-bike", "๐Ÿšด"], + ["cycling-road", "๐Ÿšด"], + ["cycling-track", "๐Ÿšด"], + ["diving", "๐ŸŠ"], + ["equestrian", "๐Ÿ‡"], + ["fencing", "๐Ÿคบ"], + ["football", "โšฝ"], + ["golf", "โ›ณ"], + ["handball", "๐Ÿคพ"], + ["hockey", "๐Ÿ‘"], + ["judo", "๐Ÿฅ‹"], + ["marathon-swimming", "๐ŸŠ"], + ["modern-pentathlon", "๐Ÿคบ"], + ["rhythmic-gymnastics", "๐Ÿคธ"], + ["rowing", "๐Ÿšฃ"], + ["rugby-sevens", "๐Ÿ‰"], + ["sailing", "โ›ต"], + ["shooting", "๐Ÿ”ซ"], + ["skateboarding", "๐Ÿ›น"], + ["sport-climbing", "๐Ÿง—"], + ["surfing", "๐Ÿ„"], + ["swimming", "๐ŸŠ"], + ["table-tennis", "๐Ÿ“"], + ["taekwondo", "๐Ÿฅ‹"], + ["tennis", "๐ŸŽพ"], + ["trampoline-gymnastics", "๐Ÿคธ"], + ["triathlon", "๐ŸŠ"], + ["volleyball", "๐Ÿ"], + ["water-polo", "๐Ÿคฝ"], + ["weightlifting", "๐Ÿ‹"], + ["wrestling", "๐Ÿคผ"], +]); + +export const getSportIcon = (sport: string): string => { + if (SPORTS.has(sport)) { + return SPORTS.get(sport)!; + } + console.error(`No icon set for ${sport}`); + return ""; +}; diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 000000000..117a7c87e --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,32 @@ +export interface Competitor { + noc: string; + name: string; +} + +export interface Event { + UID: string; + DTSTAMP: string; + DTSTART: string; + DTEND: string; + SUMMARY: string; + DESCRIPTION: string; + LOCATION: string; + + _COMPETITORS: Competitor[]; + _GENDER: string; + _MEDAL: boolean; + _NOCS: string[]; + _SPORT: string; + _UNITNAME: string; +} + +export interface Sport { + key: string; + name: string; + NOCS: string[]; +} + +export interface NOC { + icon: string; + name: string; +} diff --git a/test/ics.test.ts b/test/ics.test.ts new file mode 100644 index 000000000..6d10e8dd4 --- /dev/null +++ b/test/ics.test.ts @@ -0,0 +1,65 @@ +import * as fs from "fs"; +import { afterEach, beforeEach, describe } from "node:test"; +import { expect, it, vi, MockInstance } from "vitest"; + +import { generateICS } from "../src/ics"; + +import { Event } from "../src/types"; + +describe("ics", () => { + let mkdirMock: MockInstance; + let writeFileMock: MockInstance; + + beforeEach(() => { + vi.mock("fs"); + }); + + afterEach(() => { + vi.resetAllMocks(); + }); + + describe("generateICS", () => { + mkdirMock = vi.spyOn(fs, "mkdirSync").mockImplementation(() => ""); + writeFileMock = vi.spyOn(fs, "writeFileSync").mockImplementation(() => null); + it("should generate empty ICS file", () => { + generateICS("title", "sport/key", []); + + expect(mkdirMock).toHaveBeenCalledWith( + expect.stringMatching("docs/sport"), + { recursive: true }, + ); + expect(writeFileMock).toHaveBeenCalledWith( + expect.stringMatching("docs/sport/key.ics"), + expect.any(String), + ); + }); + + it("should generate ICS file with events", () => { + const events: Event[] = [{ + UID: "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890", + DTSTAMP: "20240801T000000Z", + DTSTART: "20240801T000000Z", + DTEND: "20240801T200000Z", + SUMMARY: "Event 1", + DESCRIPTION: "Description that's is very long, longer than 75 characters, to test if it's gonna be split appropriately", + LOCATION: "Location 1", + _COMPETITORS: [], + _GENDER: "", + _MEDAL: false, + _NOCS: [], + _SPORT: "sport", + _UNITNAME: "unit", + }]; + generateICS("title", "sport/key", events); + + expect(mkdirMock).toHaveBeenCalledWith( + expect.stringMatching("docs/sport"), + { recursive: true }, + ); + expect(writeFileMock).toHaveBeenCalledWith( + expect.stringMatching("docs/sport/key.ics"), + expect.any(String), + ); + }); + }); +}); diff --git a/test/index.test.ts b/test/index.test.ts new file mode 100644 index 000000000..e69de29bb diff --git a/test/nocs.test.ts b/test/nocs.test.ts new file mode 100644 index 000000000..e69de29bb diff --git a/test/sports.test.ts b/test/sports.test.ts new file mode 100644 index 000000000..c206dcad8 --- /dev/null +++ b/test/sports.test.ts @@ -0,0 +1,17 @@ +import { describe } from "node:test"; +import { expect, it } from "vitest"; +import { getSportIcon } from "../src/sports"; + +describe("sports", () => { + describe("getSportIcon", () => { + it("should return basketball icon", () => { + const icon = getSportIcon("basketball"); + expect(icon).toBe("๐Ÿ€"); + }); + + it("should log an error and return an empty string if sport is not found", () => { + const icon = getSportIcon("ice-hockey"); + expect(icon).toBe(""); + }); + }); +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..a2a029d89 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,108 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/vitest.config.mjs b/vitest.config.mjs new file mode 100644 index 000000000..70e4a74a8 --- /dev/null +++ b/vitest.config.mjs @@ -0,0 +1,14 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + coverage: { + provider: "istanbul", + exclude: [ + "**/dist/**", + "**/test/**", + "**/tailwind.config.js", + ], + }, + }, +});