From 5e6a35b4b753f8d5c8b32b5f21d925040f7ee9fd Mon Sep 17 00:00:00 2001
From: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 05:31:49 +0300
Subject: [PATCH 01/50] Delete us_freemoviesplus.m3u
---
streams/us_freemoviesplus.m3u | 33 ---------------------------------
1 file changed, 33 deletions(-)
delete mode 100644 streams/us_freemoviesplus.m3u
diff --git a/streams/us_freemoviesplus.m3u b/streams/us_freemoviesplus.m3u
deleted file mode 100644
index a7e8894cb..000000000
--- a/streams/us_freemoviesplus.m3u
+++ /dev/null
@@ -1,33 +0,0 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",Crime and Thrillers
-https://topic-crimeandthrillers-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Ditty TV
-https://memphisstudios-dittytv-1-eu.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Food
-https://food-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Glory Kick Boxing
-https://glorykickboxing-glorykickboxing-1-eu.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Intipacha
-https://bonudiemsa-intipacha-2-eu.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Just for Laughs Gags
-https://distributionsjustepourrire-justforlaughsgags-1-eu.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Nosey 2
-https://nosey-2-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Pecan
-https://bold-tv-corp-pecan-tv-1-eu.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Pelimex
-https://telecine-pelimex-1-eu.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Real Nosey
-https://nosey-realnosey-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Space Science Now
-https://magellan-space-science-now-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Todays Homeowner
-https://janson-todayshomeowner-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",True Crime Now
-https://alliantcontent-truecrimenow-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",Vintage TV
-https://chestnut-vintagetv-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",War and Military Now
-https://alliantcontent-warandmilitarynow-1-us.freemoviesplus.wurl.tv/playlist.m3u8
-#EXTINF:-1 tvg-id="",WatchMojo
-https://watchmojo-1-eu.freemoviesplus.wurl.tv/playlist.m3u8
From 0eb6bf5a65222ec4bbbb303fe3fc81b681a33e15 Mon Sep 17 00:00:00 2001
From: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 05:33:06 +0300
Subject: [PATCH 02/50] Delete us_simultv.m3u
---
streams/us_simultv.m3u | 41 -----------------------------------------
1 file changed, 41 deletions(-)
delete mode 100644 streams/us_simultv.m3u
diff --git a/streams/us_simultv.m3u b/streams/us_simultv.m3u
deleted file mode 100644
index 6899d457b..000000000
--- a/streams/us_simultv.m3u
+++ /dev/null
@@ -1,41 +0,0 @@
-#EXTM3U
-#EXTINF:-1 tvg-id="",2A Network (720p)
-https://simultv.s.llnwi.net/n4s4/2ANetwork/interlink.m3u8
-#EXTINF:-1 tvg-id="",Cowboy Theater (720p)
-https://simultv.s.llnwi.net/o054/CowboyTheater/interlink.m3u8
-#EXTINF:-1 tvg-id="",Cut Up N Cook (720p)
-https://simultv.s.llnwi.net/n4s4/CutUpNCook/interlink.m3u8
-#EXTINF:-1 tvg-id="",Dimensions
-https://simultv.s.llnwi.net/o054/Dimensions/interlink.m3u8
-#EXTINF:-1 tvg-id="",Funnybone (720p)
-https://simultv.s.llnwi.net/o054/FunnyBone/interlink.m3u8
-#EXTINF:-1 tvg-id="KartoonCircus.us",Kartoon Circus
-https://simultv.s.llnwi.net/o062/KartoonCircus/interlink.m3u8
-#EXTINF:-1 tvg-id="KartoonCircus.us",Kartoon Circus (720p)
-https://simultv.s.llnwi.net/n4s4/KartoonCircus/interlink.m3u8
-#EXTINF:-1 tvg-id="",Kid Central (720p)
-https://simultv.s.llnwi.net/o058/KidCentral/interlink.m3u8
-#EXTINF:-1 tvg-id="Lifestyle.us",Lifestyle
-https://simultv.s.llnwi.net/o058/Lifestyle/interlink.m3u8
-#EXTINF:-1 tvg-id="",Military Home Life (720p)
-https://simultv.s.llnwi.net/n4s4/MilitaryHomeLife/interlink.m3u8
-#EXTINF:-1 tvg-id="Mythos.us",Mythos
-https://simultv.s.llnwi.net/o058/Mythos/interlink.m3u8
-#EXTINF:-1 tvg-id="PrimeTimeDrama.us",Prime Time Drama
-https://simultv.s.llnwi.net/o064/PrimeTimeDrama/interlink.m3u8
-#EXTINF:-1 tvg-id="",Providence Christian Network
-https://simultv.s.llnwi.net/n4s4/ProvidenceNetwork/interlink.m3u8
-#EXTINF:-1 tvg-id="",Ready Set Action (720p)
-https://simultv.s.llnwi.net/o059/ReadySetAction/interlink.m3u8
-#EXTINF:-1 tvg-id="",Slap Tech
-https://simultv.s.llnwi.net/o061/SlapTech/interlink.m3u8
-#EXTINF:-1 tvg-id="SpydarTV.us",Spydar
-https://simultv.s.llnwi.net/o062/Spydar/interlink.m3u8
-#EXTINF:-1 tvg-id="SpydarTV.us",Spydar TV (720p)
-https://simultv.s.llnwi.net/n4s4/Spydar/interlink.m3u8
-#EXTINF:-1 tvg-id="",Switch (720p)
-https://simultv.s.llnwi.net/o062/Switch/interlink.m3u8
-#EXTINF:-1 tvg-id="Xcorps.us",Xcorps (720p)
-https://simultv.s.llnwi.net/n4s4/xcorps/interlink.m3u8
-#EXTINF:-1 tvg-id="",XZone (720p)
-https://simultv.s.llnwi.net/o060/xzone/interlink.m3u8
From df9e4ad971c836b5f3a56720569a9aeb384e7249 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Mon, 18 Sep 2023 12:21:59 +0200
Subject: [PATCH 03/50] Update at.m3u
---
streams/at.m3u | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/streams/at.m3u b/streams/at.m3u
index 80c0cdf67..2da4b6650 100644
--- a/streams/at.m3u
+++ b/streams/at.m3u
@@ -9,9 +9,9 @@ https://stream.openplayout.org/hls/dorftv/live.m3u8
http://stream.fs1.tv:8080/hls/webstream.m3u8
#EXTINF:-1 tvg-id="FS1Salzburg.at",FS1 Salzburg (720p) [Not 24/7]
https://stream.fs1.tv/hls/webstream.m3u8
-#EXTINF:-1 tvg-id="FUELTV.at",Fuel TV (1080p)
+#EXTINF:-1 tvg-id="FUELTV.at",FUEL TV (1080p)
https://d35j504z0x2vu2.cloudfront.net/v1/manifest/0bc8e8376bd8417a1b6761138aa41c26c7309312/fuel-tv/606c2f67-acff-4152-975a-e5bfef54eb61/2.m3u8
-#EXTINF:-1 tvg-id="GoTV.at",GoTV (576p)
+#EXTINF:-1 tvg-id="GoTV.at",GoTV (576p) [Not 24/7]
https://nstream17.gotv.at:1443/live/gotvlive/manifest.mpd
#EXTINF:-1 tvg-id="HitradioO3.at",Hitradio Ö3 (720p) [Not 24/7]
https://studiocam-oe3.mdn.ors.at/out/u/studiocam_oe3/q6a/manifest_1.m3u8
@@ -23,12 +23,10 @@ https://kronetv.mdn.ors.at/out/u/kronetv-nodrm.m3u8
https://bitcdn-kronehit.bitmovin.com/v2/hls/playlist.m3u8
#EXTINF:-1 tvg-id="KurierTV.at",Kurier TV (720p)
https://schautv.mdn.ors.at/out/u/schautv-nodrm.m3u8
-#EXTINF:-1 tvg-id="LandleTV.at",Ländle Tv (1080p)
+#EXTINF:-1 tvg-id="LandleTV.at",Ländle TV (1080p) [Not 24/7]
https://streaming13.huberwebmedia.at/LiveApp/streams/985585225397790082777809.m3u8
-#EXTINF:-1 tvg-id="M4.at",M4 (1090p) [Not 24/7]
-https://5a32c05065c79.streamlock.net/live/stream/playlist.m3u8
-#EXTINF:-1 tvg-id="M4TV.at",M4TV [Geo-blocked]
-https://streaming.m4tv.at/live/m4tv.stream/playlist.m3u8
+#EXTINF:-1 tvg-id="M4.at",GemeindeTV (1080p) [Not 24/7]
+https://ythls.onrender.com/channel/UCbGaZEFvBLMe8eNgoBFDRZg.m3u8
#EXTINF:-1 tvg-id="Oe24TV.at",oe24 TV (1080p)
https://varoe24live.sf.apa.at/oe24-live1/oe24.smil/playlist.m3u8
#EXTINF:-1 tvg-id="OktoTV.at",Okto TV (1080p)
@@ -47,11 +45,11 @@ http://p3-6.mov.at:1935/live/weekstream/master.m3u8
https://ms01.w24.at/R9/smil:liveeventR9.smil/playlist.m3u8
#EXTINF:-1 tvg-id="RedBullTV.at",Red Bull TV (1080p)
https://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master.m3u8
-#EXTINF:-1 tvg-id="RTV.at",RTV (1080p)
+#EXTINF:-1 tvg-id="RTV.at",RTV (1080p) [Not 24/7]
http://iptv.rtv-ooe.at/stream.m3u8
#EXTINF:-1 tvg-id="SchladmingDachsteinTV.at",Schladming-Dachstein TV (720p)
https://m317.video-stream-hosting.de/gzSoftware-live/_definst_/smil:livestream.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="ServusTV.at",ServusTV [Geo-blocked]
+#EXTINF:-1 tvg-id="ServusTV.at",ServusTV (1080p) [Geo-blocked]
https://stv-live.akamaized.net/hls/live/2031011/lingeoSTVATwebPri/master.m3u8
#EXTINF:-1 tvg-id="SwamijiTV.at",Swamiji TV (720p) [Not 24/7]
https://stream.swamiji.tv/YogaIPTV/smil:YogaStream.smil/playlist.m3u8
From ccd1523df5efcbc43fb97d49b71e414d718bb706 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Mon, 18 Sep 2023 13:08:23 +0200
Subject: [PATCH 04/50] Update au.m3u
---
streams/au.m3u | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/streams/au.m3u b/streams/au.m3u
index e91f2bd0d..35f8efa8a 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -1,9 +1,11 @@
#EXTM3U
-#EXTINF:-1 tvg-id="ABCNewsAustralia.au",ABC News (720p)
+#EXTINF:-1 tvg-id="ABCNewsAustralia.au",ABC News Australia (720p)
https://abc-iview-mediapackagestreams-2.akamaized.net/out/v1/6e1cc6d25ec0480ea099a5399d73bc4b/index.m3u8
-#EXTINF:-1 tvg-id="AUSTamilTV.au",Aus Tamil (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="ABCNewsAustralia.au",ABC News Australia (720p) [Not 24/7]
+https://ythls.onrender.com/channel/UCVgO39Bk5sMo66-6o6Spn6Q.m3u8
+#EXTINF:-1 tvg-id="AUSTamilTV.au",AUS Tamil TV (720p) [Not 24/7]
https://bk7l2pn7dx53-hls-live.5centscdn.com/austamil/fe01ce2a7fbac8fafaed7c982a04e229.sdp/playlist.m3u8
-#EXTINF:-1 tvg-id="AusbizTV.au",ausbiz TV (720p) [Geo-blocked]
+#EXTINF:-1 tvg-id="AusbizTV.au",ausbiz TV (720p) [Not 24/7]
https://d9quh89lh7dtw.cloudfront.net/public-output/index.m3u8
#EXTINF:-1 tvg-id="C31Melbourne.au",C31 Melbourne (240p)
https://d1k6kax80wecy5.cloudfront.net/RLnAKY/index.m3u8
@@ -12,17 +14,13 @@ https://d1k6kax80wecy5.cloudfront.net/WFqZJc/index.m3u8
#EXTINF:-1 tvg-id="ExpoChannel.au",Expo Channel (360p)
https://tvsnhlslivetest.akamaized.net/hls/live/2034711/EXPO-MSL4/master.m3u8
#EXTINF:-1 tvg-id="JonmoBhumiTV.au",JonmoBhumi TV (720p) [Not 24/7]
-https://cdn.appv.jagobd.com:444/c3VydmVyX8RpbEU9Mi8xNy8yMDE0GIDU6RgzQ6NTAgdEoaeFzbF92YWxIZTO0U0ezN1IzMyfvcGVMZEJCTEFWeVN3PTOmdFsaWRtaW51aiPhnPTI/jonmobhumitv.stream/playlist.m3u8
+https://us170.jagobd.com:447/c3VydmVyX8RpbEU9Mi8xNy8yMDE0GIDU6RgzQ6NTAgdEoaeFzbF92YWxIZTO0U0ezN1IzMyfvcGVMZEJCTEFWeVN3PTOmdFsaWRtaW51aiPhnPTI/jonmobhumitv.stream/playlist.m3u8
#EXTINF:-1 tvg-id="M4TVMalayalam.au",M4TV Malayalam (1080p) [Not 24/7]
https://app.m4stream.live/mfourmalayalamhls/live.m3u8
-#EXTINF:-1 tvg-id="",Race Central TV (720p)
+#EXTINF:-1 tvg-id="",Race Central TV (720p) [Not 24/7]
https://nrpus.bozztv.com/36bay2/gusa-racecentral/index.m3u8
#EXTINF:-1 tvg-id="Racingcom.au",Racing.com (720p)
https://racingvic-i.akamaized.net/hls/live/598695/racingvic/index1500.m3u8
-#EXTINF:-1 tvg-id="RTV.au",Rainbow TV Australia (720p)
-http://www.rtvcdn.com.au:8082/TV0002.m3u8
-#EXTINF:-1 tvg-id="SBSViceland.au",SBS Viceland [Geo-blocked]
-https://dai.google.com/linear/hls/event/nPy2IRtvQTWudFfYwdBgsg/master.m3u8
#EXTINF:-1 tvg-id="SkyNewsExtra1.au",Sky News Extra 1 (540p)
https://skynewsau-live.akamaized.net/hls/live/2002689/skynewsau-extra1/master.m3u8
#EXTINF:-1 tvg-id="SkyNewsExtra2.au",Sky News Extra 2 (540p) [Not 24/7]
@@ -37,3 +35,19 @@ https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01486-tickernews-tickernewsweb-ono/
https://nrpus.bozztv.com/36bay2/gusa-moviemagictv/index.m3u8
#EXTINF:-1 tvg-id="TVSN.au",TVSN (1080p)
https://tvsnhlslivetest.akamaized.net/hls/live/2034711/TVSN-MSL4/master.m3u8
+#EXTINF:-1 tvg-id="TVSN.au",TVSN (1080p) [Not 24/7]
+https://ythls.onrender.com/channel/UCo4sch-fwKIeyzyPIWRXjdw.m3u8
+#EXTINF:-1 tvg-id="9Gem.au",9Gem (720p) [Geo-blocked]
+https://9now-livestreams.akamaized.net/hls/live/2007330/ch9-syd/master.m3u8
+#EXTINF:-1 tvg-id="9Go.au",9Go! (720p) [Geo-blocked]
+https://9now-livestreams.akamaized.net/hls/live/2008312/go-syd/master.m3u8
+#EXTINF:-1 tvg-id="9Life.au",9Life (720p) [Geo-blocked]
+https://9now-livestreams.akamaized.net/hls/live/2008313/life-syd/master.m3u8
+#EXTINF:-1 tvg-id="",ADH TV (1080p) [Not 24/7]
+https://ythls.onrender.com/channel/UCtzTaKI8AkiSjyzm1_JbMUg.m3u8
+#EXTINF:-1 tvg-id="",Guidance TV Australia (720p) [Not 24/7]
+https://ythls.onrender.com/channel/UC81VkX0QeICZw7o2jMwGThg.m3u8
+#EXTINF:-1 tvg-id="",2GB Sydney (1080p)
+https://2gblive.akamaized.net/hls/live/2033805/2GB/index.m3u8
+#EXTINF:-1 tvg-id="",Hope Channel Australia (1080p)
+https://videodelivery.net/9fb3596948ddf463fde0ec4b85625b24/manifest/video.m3u8
From 16117a87f5d608491ce1e2d32d3d833c8d7ec1b9 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Mon, 18 Sep 2023 13:42:31 +0200
Subject: [PATCH 05/50] Update bf.m3u
---
streams/bf.m3u | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/streams/bf.m3u b/streams/bf.m3u
index 9872987e0..991770fb9 100644
--- a/streams/bf.m3u
+++ b/streams/bf.m3u
@@ -1,5 +1,7 @@
#EXTM3U
#EXTINF:-1 tvg-id="RTB.bf",RTB (360p) [Not 24/7]
https://edge.vedge.infomaniak.com/livecast/ik:rtbtvlive1/manifest.m3u8
-#EXTINF:-1 tvg-id="TVAlHouda.bf",TV Al Houda (360p) [Not 24/7]
+#EXTINF:-1 tvg-id="TVAlHouda.bf",TV Al Houda (720p) [Not 24/7]
https://ssh101.bozztv.com/ssh101/alhoudatv/playlist.m3u8
+#EXTINF:-1 tvg-id="ImpactTV.bf",Impact TV (360p) [Not 24/7]
+https://edge20.vedge.infomaniak.com/livecast/ik:fluxtvimpact/manifest.m3u8
From 65afc2e61403843c72a34839360235253ed3ff2a Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Mon, 18 Sep 2023 15:04:13 +0200
Subject: [PATCH 06/50] Update us.m3u
---
streams/us.m3u | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/streams/us.m3u b/streams/us.m3u
index ef4e929e1..2ac8b5bf6 100644
--- a/streams/us.m3u
+++ b/streams/us.m3u
@@ -1098,3 +1098,7 @@ https://thegateway.app/YouToo/CueTones/playlist.m3u8
https://thegateway.app/YouToo/YTamerica/playlist.m3u8
#EXTINF:-1 tvg-id="DisneyChannelRussia.ru",Канал Disney (576p) [Not 24/7]
http://188.40.68.167/russia/disney/playlist.m3u8
+#EXTINF:-1 tvg-id="SUMtvLatino.us",SUMtv Latino (1080p)
+https://bozztv.com/uni10rtmp/ssstv2-cdn/smil:ssstv2web.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="EVTVMiami.us",EVTV Miami (720p) [Not 24/7]
+https://streannliveevtv.cachefly.net/Protected/sp=1;dirmatch=true/3be25dc13406bf70ff0208230e6fa803b88b95013fad257c025e481e2be3e214/evtv1/evtv1/playlist.m3u8
From 4baaf63249fb6ba70688a65fba10a78843ceaf9a Mon Sep 17 00:00:00 2001
From: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 17:09:43 +0300
Subject: [PATCH 07/50] Update kg.m3u
---
streams/kg.m3u | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/streams/kg.m3u b/streams/kg.m3u
index 428250e08..4c834829f 100644
--- a/streams/kg.m3u
+++ b/streams/kg.m3u
@@ -1,18 +1,6 @@
#EXTM3U
-#EXTINF:-1 tvg-id="AlaToo24.kg",Ala-Too 24 (576p)
-http://onlinetv.ktrk.kg:1935/live/myStream3/playlist.m3u8
#EXTINF:-1 tvg-id="Balastan.kg",Balastan
https://64e5ed58c00d4.streamlock.net/live/smil:balastan.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="Balastan.kg",Balastan (576p)
-http://onlinetv.ktrk.kg:1935/live/myStream6/playlist.m3u8
-#EXTINF:-1 tvg-id="KTRK.kg",KTRK (720p)
-http://onlinetv.ktrk.kg:1935/live/myStream/playlist.m3u8
-#EXTINF:-1 tvg-id="Muzika.kg",KTRK Muzika (720p)
-http://onlinetv.ktrk.kg:1935/live/myStream2/playlist.m3u8
-#EXTINF:-1 tvg-id="KTRKSport.kg",KTRK Sport (576p)
-http://onlinetv.ktrk.kg:1935/live/myStream4/playlist.m3u8
-#EXTINF:-1 tvg-id="Madaniyat.kg",Madaniyat (576p)
-http://onlinetv.ktrk.kg:1935/live/myStream5/playlist.m3u8
#EXTINF:-1 tvg-id="TV1KG.kg",TV1 KG (1080p)
http://212.2.225.30:1935/live/site.stream/playlist.m3u8
#EXTINF:-1 tvg-id="",Любимый HD/ТНТ4 (576p)
From c6eeb930548e064d1168a0c54ba48ab1c53dc784 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 17:27:36 +0300
Subject: [PATCH 08/50] Update ae.m3u
---
streams/ae.m3u | 4 ----
1 file changed, 4 deletions(-)
diff --git a/streams/ae.m3u b/streams/ae.m3u
index 0eef93389..a3abdc91a 100644
--- a/streams/ae.m3u
+++ b/streams/ae.m3u
@@ -11,8 +11,6 @@ https://admdn5.cdn.mangomolo.com/adsports2/smil:adsports2.stream.smil/playlist.m
https://dacastmmd.mmdlive.lldns.net/dacastmmd/d3e9fc3b874a46159ce3724d802e3f8d/playlist.m3u8
#EXTINF:-1 tvg-id="AlAanTV.ae",Al Aan TV (1080p)
https://shls-live-ak.akamaized.net/out/v1/dfbdea4c1bf149629764e58c6ff314c8/index.m3u8
-#EXTINF:-1 tvg-id="AlAanTV.ae",Al Aan TV (720p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.dailymotion.com/AlAanTV
#EXTINF:-1 tvg-id="Alarabiya.ae",Al Arabiya (1080p)
https://live.alarabiya.net/alarabiapublish/alarabiya.smil/playlist.m3u8
#EXTINF:-1 tvg-id="Alarabiya.ae",Al Arabiya (1080p)
@@ -52,8 +50,6 @@ https://shls-cartoon-net-prod-dub.shahid.net/out/v1/dc4aa87372374325a66be458f29e
#EXTINF:-1 tvg-id="CitrussTV.ae",Citruss TV (720p) [Geo-blocked]
https://d7km4gkevcbok.cloudfront.net/live/watch_720p30.m3u8
#EXTINF:-1 tvg-id="CNBCArabiya.ae",CNBC Arabia (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.dailymotion.com/CNBCArabia
-#EXTINF:-1 tvg-id="CNBCArabiya.ae",CNBC Arabia (1080p)
https://ythls.onrender.com/channel/UCsHdPPJXT-yKVTLGkn3DSvQ.m3u8
#EXTINF:-1 tvg-id="DubaiOne.ae",Dubai One (1080p)
https://dminnvll.cdn.mangomolo.com/dubaione/smil:dubaione.stream.smil/playlist.m3u8
From 451a7f1b6770a4ab38f3f4e5896aa5abfdb2f1c2 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 17:27:58 +0300
Subject: [PATCH 09/50] Update it.m3u
---
streams/it.m3u | 2 --
1 file changed, 2 deletions(-)
diff --git a/streams/it.m3u b/streams/it.m3u
index 42af9e3d3..d96e18b9e 100644
--- a/streams/it.m3u
+++ b/streams/it.m3u
@@ -616,8 +616,6 @@ http://fms.tvavicenza.it:1935/live/diretta_1/playlist.m3u8
#EXTINF:-1 tvg-id="TVL.it",TVL (720p) [Not 24/7]
https://live.mariatvcdn.com/mariatvcdn/70564e1c6884c007c76f0c128d679eed.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="",TVR Sicilia HD (1080p) [Not 24/7]
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.twitch.tv/canale6tv
-#EXTINF:-1 tvg-id="",TVR Sicilia HD (1080p) [Not 24/7]
https://ssh101.bozztv.com/ssh101/televita/playlist.m3u8
#EXTINF:-1 tvg-id="TVRS.it",TVRS (576p) [Not 24/7]
http://wms.shared.streamshow.it:1935/tvrs/tvrs/live.m3u8
From 33e8a321a67b4a7ed6b2fee57c0bd323fed4fdba Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 17:28:02 +0300
Subject: [PATCH 10/50] Update kw.m3u
---
streams/kw.m3u | 18 ------------------
1 file changed, 18 deletions(-)
diff --git a/streams/kw.m3u b/streams/kw.m3u
index b3548c2de..c851da7fe 100644
--- a/streams/kw.m3u
+++ b/streams/kw.m3u
@@ -5,23 +5,5 @@ https://kali.vdopanel.com:3986/live/mbashalive.m3u8
https://5e74a9d684b2e.streamlock.net/liveTrans/ngrp:channel23_all/playlist.m3u8
#EXTINF:-1 tvg-id="AlraiTV.kw",Alrai TV (1080p)
https://svs.itworkscdn.net/alraitvlive/alraitv.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="KTV1.kw",KTV 1 (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTV1
-#EXTINF:-1 tvg-id="KTV2.kw",KTV 2 (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTV2
-#EXTINF:-1 tvg-id="KTVAlMajlis.kw",KTV Al Majlis (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTVSportExtra
-#EXTINF:-1 tvg-id="KTVAlQurain.kw",KTV Al Qurain (1080p) [Not 24/7]
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTVPlus
-#EXTINF:-1 tvg-id="KTVArabe.kw",KTV Arabe (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTVArabe
-#EXTINF:-1 tvg-id="KTVKhallikBilbait.kw",KTV Drama (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KhallikBilbait
-#EXTINF:-1 tvg-id="KTVEthraa.kw",KTV Ethraa (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTVEthraa
-#EXTINF:-1 tvg-id="KTVSport.kw",KTV Sport (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTVSports
-#EXTINF:-1 tvg-id="KTVSportPlus.kw",KTV Sport Plus (1080p)
-http://mc-qs.lanesh4d0w.tech/iptv-query?streaming-ip=https://www.media.gov.kw/LiveTV.aspx?PanChannel=KTVSportPlus
#EXTINF:-1 tvg-id="MarinaTV.kw",Marina TV (1080p) [Not 24/7]
https://ythls.onrender.com/channel/UC1TelTm8bbY2jw0guInSvBA.m3u8
From 67631acd64d5efbbe54a339efc88fcc5749da366 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 18:24:05 +0300
Subject: [PATCH 11/50] Update tests data
---
tests/__data__/input/issues/broken_stream.js | 81 ++++++++++
tests/__data__/input/issues/streams_edit.js | 160 +++++++++++++++++++
2 files changed, 241 insertions(+)
create mode 100644 tests/__data__/input/issues/broken_stream.js
create mode 100644 tests/__data__/input/issues/streams_edit.js
diff --git a/tests/__data__/input/issues/broken_stream.js b/tests/__data__/input/issues/broken_stream.js
new file mode 100644
index 000000000..286f29504
--- /dev/null
+++ b/tests/__data__/input/issues/broken_stream.js
@@ -0,0 +1,81 @@
+export default [
+ {
+ url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140',
+ repository_url: 'https://api.github.com/repos/iptv-org/iptv',
+ labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/labels{/name}',
+ comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/comments',
+ events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/events',
+ html_url: 'https://github.com/iptv-org/iptv/issues/14140',
+ id: 1881649602,
+ node_id: 'I_kwDOCWUK8M5wJ7HC',
+ number: 14140,
+ title: 'Broken: RIK HD Cyprus',
+ user: {
+ login: 'ROBGagn',
+ id: 124619576,
+ node_id: 'U_kgDOB22LOA',
+ avatar_url: 'https://avatars.githubusercontent.com/u/124619576?v=4',
+ gravatar_id: '',
+ url: 'https://api.github.com/users/ROBGagn',
+ html_url: 'https://github.com/ROBGagn',
+ followers_url: 'https://api.github.com/users/ROBGagn/followers',
+ following_url: 'https://api.github.com/users/ROBGagn/following{/other_user}',
+ gists_url: 'https://api.github.com/users/ROBGagn/gists{/gist_id}',
+ starred_url: 'https://api.github.com/users/ROBGagn/starred{/owner}{/repo}',
+ subscriptions_url: 'https://api.github.com/users/ROBGagn/subscriptions',
+ organizations_url: 'https://api.github.com/users/ROBGagn/orgs',
+ repos_url: 'https://api.github.com/users/ROBGagn/repos',
+ events_url: 'https://api.github.com/users/ROBGagn/events{/privacy}',
+ received_events_url: 'https://api.github.com/users/ROBGagn/received_events',
+ type: 'User',
+ site_admin: false
+ },
+ labels: [
+ {
+ id: 1707513547,
+ node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream',
+ name: 'broken stream',
+ color: 'FBCA04',
+ default: false,
+ description: 'Stream is not working properly'
+ },
+ {
+ id: 3241837512,
+ node_id: 'MDU6TGFiZWwzMjQxODM3NTEy',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/CY',
+ name: 'CY',
+ color: '90FA7B',
+ default: false,
+ description: 'Cyprus'
+ }
+ ],
+ state: 'open',
+ locked: false,
+ assignee: null,
+ assignees: [],
+ milestone: null,
+ comments: 0,
+ created_at: '2023-09-05T10:09:04Z',
+ updated_at: '2023-09-07T00:50:06Z',
+ closed_at: null,
+ author_association: 'NONE',
+ active_lock_reason: null,
+ body: '### Broken Link\n\nhttp://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\nhttp://l6.cloudskep.com/rikcy/rikhd/playlist2.m3u8\n\n### Notes (optional)\n\nToken needed...\r\nSame issue with RIK 1 and 2. May happen in the future with ANT1 Cyprus, Sigma and Omega.\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
+ reactions: {
+ url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/reactions',
+ total_count: 0,
+ '+1': 0,
+ '-1': 0,
+ laugh: 0,
+ hooray: 0,
+ confused: 0,
+ heart: 0,
+ rocket: 0,
+ eyes: 0
+ },
+ timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/timeline',
+ performed_via_github_app: null,
+ state_reason: null
+ }
+]
diff --git a/tests/__data__/input/issues/streams_edit.js b/tests/__data__/input/issues/streams_edit.js
new file mode 100644
index 000000000..238003c32
--- /dev/null
+++ b/tests/__data__/input/issues/streams_edit.js
@@ -0,0 +1,160 @@
+export default [
+ {
+ url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110',
+ repository_url: 'https://api.github.com/repos/iptv-org/iptv',
+ labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/labels{/name}',
+ comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/comments',
+ events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/events',
+ html_url: 'https://github.com/iptv-org/iptv/issues/14110',
+ id: 1884922249,
+ node_id: 'I_kwDOCWUK8M5wWaGJ',
+ number: 14110,
+ title: 'Edit: Tele2000',
+ user: {
+ login: 'freearhey',
+ id: 7253922,
+ node_id: 'MDQ6VXNlcjcyNTM5MjI=',
+ avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
+ gravatar_id: '',
+ url: 'https://api.github.com/users/freearhey',
+ html_url: 'https://github.com/freearhey',
+ followers_url: 'https://api.github.com/users/freearhey/followers',
+ following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
+ gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
+ starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
+ subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
+ organizations_url: 'https://api.github.com/users/freearhey/orgs',
+ repos_url: 'https://api.github.com/users/freearhey/repos',
+ events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
+ received_events_url: 'https://api.github.com/users/freearhey/received_events',
+ type: 'User',
+ site_admin: false
+ },
+ labels: [
+ {
+ id: 5923498886,
+ node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
+ name: 'approved',
+ color: '85ddde',
+ default: false,
+ description: ''
+ },
+ {
+ id: 5923508587,
+ node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
+ name: 'streams:edit',
+ color: '017ff9',
+ default: false,
+ description: 'Request to add a new link to a playlist'
+ }
+ ],
+ state: 'open',
+ locked: false,
+ assignee: null,
+ assignees: [],
+ milestone: null,
+ comments: 1,
+ created_at: '2023-09-07T00:30:51Z',
+ updated_at: '2023-09-07T00:48:23Z',
+ closed_at: null,
+ author_association: 'COLLABORATOR',
+ active_lock_reason: null,
+ body: '### Stream URL\n\nhttps://servilive.com:3126/live/tele2000live.m3u8\n\n### Channel ID\n\nBBCAmericaEast.us\n\n### Channel Name\n\nBBC America\n\n### Quality\n\n720p\n\n### Label\n\nGeo-blocked\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n_No response_\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
+ reactions: {
+ url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/reactions',
+ total_count: 0,
+ '+1': 0,
+ '-1': 0,
+ laugh: 0,
+ hooray: 0,
+ confused: 0,
+ heart: 0,
+ rocket: 0,
+ eyes: 0
+ },
+ timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/timeline',
+ performed_via_github_app: null,
+ state_reason: null
+ },
+ {
+ url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120',
+ repository_url: 'https://api.github.com/repos/iptv-org/iptv',
+ labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/labels{/name}',
+ comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/comments',
+ events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/events',
+ html_url: 'https://github.com/iptv-org/iptv/issues/14120',
+ id: 1884922249,
+ node_id: 'I_kwDOCWUK8M5wWaGJ',
+ number: 14120,
+ title: 'Edit: Tele2000',
+ user: {
+ login: 'freearhey',
+ id: 7253922,
+ node_id: 'MDQ6VXNlcjcyNTM5MjI=',
+ avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
+ gravatar_id: '',
+ url: 'https://api.github.com/users/freearhey',
+ html_url: 'https://github.com/freearhey',
+ followers_url: 'https://api.github.com/users/freearhey/followers',
+ following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
+ gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
+ starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
+ subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
+ organizations_url: 'https://api.github.com/users/freearhey/orgs',
+ repos_url: 'https://api.github.com/users/freearhey/repos',
+ events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
+ received_events_url: 'https://api.github.com/users/freearhey/received_events',
+ type: 'User',
+ site_admin: false
+ },
+ labels: [
+ {
+ id: 5923498886,
+ node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
+ name: 'approved',
+ color: '85ddde',
+ default: false,
+ description: ''
+ },
+ {
+ id: 5923508587,
+ node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
+ url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
+ name: 'streams:edit',
+ color: '017ff9',
+ default: false,
+ description: 'Request to add a new link to a playlist'
+ }
+ ],
+ state: 'open',
+ locked: false,
+ assignee: null,
+ assignees: [],
+ milestone: null,
+ comments: 1,
+ created_at: '2023-09-07T00:30:51Z',
+ updated_at: '2023-09-07T00:48:23Z',
+ closed_at: null,
+ author_association: 'COLLABORATOR',
+ active_lock_reason: null,
+ body: '### Stream URL\n\nhttps://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8\n\n### Channel ID\n\nboo.us\n\n### Channel Name\n\nBBC America\n\n### Quality\n\n720p\n\n### Label\n\nGeo-blocked\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n_No response_\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
+ reactions: {
+ url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/reactions',
+ total_count: 0,
+ '+1': 0,
+ '-1': 0,
+ laugh: 0,
+ hooray: 0,
+ confused: 0,
+ heart: 0,
+ rocket: 0,
+ eyes: 0
+ },
+ timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/timeline',
+ performed_via_github_app: null,
+ state_reason: null
+ }
+]
From e8d0b26ce0202de7e7865d2cd96a219c68964f9a Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 18:24:13 +0300
Subject: [PATCH 12/50] Update tests
---
tests/commands/playlist/update.test.ts | 2 +-
tests/commands/report/create.test.ts | 21 ++++++++++++---------
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/tests/commands/playlist/update.test.ts b/tests/commands/playlist/update.test.ts
index eb54d2198..3b438ac79 100644
--- a/tests/commands/playlist/update.test.ts
+++ b/tests/commands/playlist/update.test.ts
@@ -9,7 +9,7 @@ beforeEach(() => {
it('can format playlists', () => {
const stdout = execSync(
- 'DEBUG=true DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams npm run playlist:update --silent',
+ 'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/output/streams npm run playlist:update --silent',
{
encoding: 'utf8'
}
diff --git a/tests/commands/report/create.test.ts b/tests/commands/report/create.test.ts
index 55199f81c..5a3eed758 100644
--- a/tests/commands/report/create.test.ts
+++ b/tests/commands/report/create.test.ts
@@ -10,14 +10,17 @@ it('can create report', () => {
expect(
stdout.includes(`
-┌─────────┬─────────────┬───────────────────┬──────────────┐
-│ (index) │ issueNumber │ channelId │ status │
-├─────────┼─────────────┼───────────────────┼──────────────┤
-│ 0 │ 14179 │ 'ManoramaNews.in' │ 'pending' │
-│ 1 │ 14178 │ 'TV3.my' │ 'blocked' │
-│ 2 │ 14177 │ 'TUTV.us' │ 'fullfilled' │
-│ 3 │ 14176 │ 'ManoramaNews.in' │ 'duplicate' │
-│ 4 │ 14175 │ 'TFX.fr' │ 'invalid_id' │
-└─────────┴─────────────┴───────────────────┴──────────────┘`)
+┌─────────┬─────────────┬─────────────────┬─────────────────────┬────────────────┐
+│ (index) │ issueNumber │ type │ channelId │ status │
+├─────────┼─────────────┼─────────────────┼─────────────────────┼────────────────┤
+│ 0 │ 14110 │ 'streams:edit' │ 'BBCAmericaEast.us' │ 'invalid_link' │
+│ 1 │ 14120 │ 'streams:edit' │ 'boo.us' │ 'invalid_id' │
+│ 2 │ 14140 │ 'broken stream' │ undefined │ 'invalid_link' │
+│ 3 │ 14175 │ 'streams:add' │ 'TFX.fr' │ 'invalid_id' │
+│ 4 │ 14176 │ 'streams:add' │ 'ManoramaNews.in' │ 'duplicate' │
+│ 5 │ 14177 │ 'streams:add' │ 'TUTV.us' │ 'fullfilled' │
+│ 6 │ 14178 │ 'streams:add' │ 'TV3.my' │ 'blocked' │
+│ 7 │ 14179 │ 'streams:add' │ 'ManoramaNews.in' │ 'pending' │
+└─────────┴─────────────┴─────────────────┴─────────────────────┴────────────────┘`)
).toBe(true)
})
From 0f15fde4f21aef02ee829a53b803ff90c977cd41 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 18 Sep 2023 18:24:40 +0300
Subject: [PATCH 13/50] Update scripts
---
scripts/commands/report/create.ts | 57 +++++++++++++++++++++++++++----
scripts/core/issueLoader.ts | 6 ++++
scripts/core/issueParser.ts | 4 ++-
scripts/models/issue.ts | 5 ++-
4 files changed, 64 insertions(+), 8 deletions(-)
diff --git a/scripts/commands/report/create.ts b/scripts/commands/report/create.ts
index d3da0a9d4..4327a4a59 100644
--- a/scripts/commands/report/create.ts
+++ b/scripts/commands/report/create.ts
@@ -27,22 +27,25 @@ async function main() {
const streams = await parser.parse(files)
const groupedStreams = streams.groupBy((stream: Stream) => stream.url)
- logger.info('loading issue from github...')
- const issues = await loader.load({ labels: ['streams:add'] })
-
logger.info('creating report...')
+ let report = new Collection()
+
+ logger.info('checking streams:add requests...')
+ const addRequests = await loader.load({ labels: ['streams:add'] })
const buffer = new Dictionary()
- const report = issues.map((issue: Issue) => {
+ addRequests.forEach((issue: Issue) => {
const channelId = issue.data.get('channel_id') || undefined
const streamUrl = issue.data.get('stream_url') || undefined
const result = new Dictionary({
issueNumber: issue.number,
+ type: 'streams:add',
channelId,
status: undefined
})
- if (!channelId || !streamUrl) result.set('status', 'error')
+ if (!channelId) result.set('status', 'missing_id')
+ else if (!streamUrl) result.set('status', 'missing_link')
else if (groupedBlocklist.has(channelId)) result.set('status', 'blocked')
else if (groupedChannels.missing(channelId)) result.set('status', 'invalid_id')
else if (groupedStreams.has(streamUrl)) result.set('status', 'fullfilled')
@@ -51,9 +54,51 @@ async function main() {
buffer.set(streamUrl, true)
- return result.data()
+ report.add(result.data())
})
+ logger.info('checking streams:edit requests...')
+ const editRequests = await loader.load({ labels: ['streams:edit'] })
+ editRequests.forEach((issue: Issue) => {
+ const channelId = issue.data.get('channel_id') || undefined
+ const streamUrl = issue.data.get('stream_url') || undefined
+
+ const result = new Dictionary({
+ issueNumber: issue.number,
+ type: 'streams:edit',
+ channelId,
+ status: undefined
+ })
+
+ if (!streamUrl) result.set('status', 'missing_link')
+ else if (groupedStreams.missing(streamUrl)) result.set('status', 'invalid_link')
+ else if (channelId && groupedChannels.missing(channelId)) result.set('status', 'invalid_id')
+ else result.set('status', 'pending')
+
+ report.add(result.data())
+ })
+
+ logger.info('checking broken streams reports...')
+ const brokenStreamReports = await loader.load({ labels: ['broken stream'] })
+ brokenStreamReports.forEach((issue: Issue) => {
+ const streamUrl = issue.data.get('stream_url') || undefined
+
+ const result = new Dictionary({
+ issueNumber: issue.number,
+ type: 'broken stream',
+ channelId: undefined,
+ status: undefined
+ })
+
+ if (!streamUrl) result.set('status', 'missing_link')
+ else if (groupedStreams.missing(streamUrl)) result.set('status', 'invalid_link')
+ else result.set('status', 'pending')
+
+ report.add(result.data())
+ })
+
+ report = report.orderBy(item => item.issueNumber)
+
console.table(report.all())
}
diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts
index 572e9d789..9e0ecfaec 100644
--- a/scripts/core/issueLoader.ts
+++ b/scripts/core/issueLoader.ts
@@ -16,6 +16,12 @@ export class IssueLoader {
case 'streams:add':
issues = (await import('../../tests/__data__/input/issues/streams_add')).default
break
+ case 'streams:edit':
+ issues = (await import('../../tests/__data__/input/issues/streams_edit')).default
+ break
+ case 'broken stream':
+ issues = (await import('../../tests/__data__/input/issues/broken_stream')).default
+ break
case 'streams:add,approved':
issues = (await import('../../tests/__data__/input/issues/streams_add_approved')).default
break
diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts
index bcc6dcc70..0114e703f 100644
--- a/scripts/core/issueParser.ts
+++ b/scripts/core/issueParser.ts
@@ -40,6 +40,8 @@ export class IssueParser {
data.set(id, value)
})
- return new Issue({ number: issue.number, data })
+ const labels = issue.labels.map(label => label.name)
+
+ return new Issue({ number: issue.number, labels, data })
}
}
diff --git a/scripts/models/issue.ts b/scripts/models/issue.ts
index 85261261c..622981d82 100644
--- a/scripts/models/issue.ts
+++ b/scripts/models/issue.ts
@@ -2,15 +2,18 @@ import { Dictionary } from '../core'
type IssueProps = {
number: number
+ labels: string[]
data: Dictionary
}
export class Issue {
number: number
+ labels: string[]
data: Dictionary
- constructor({ number, data }: IssueProps) {
+ constructor({ number, labels, data }: IssueProps) {
this.number = number
+ this.labels = labels
this.data = data
}
}
From a06b64adee3cd2367b2ed4b067025e11317d0216 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Tue, 19 Sep 2023 00:20:09 +0300
Subject: [PATCH 14/50] Removed blocked channels
---
streams/de.m3u | 2 --
streams/fi.m3u | 2 --
streams/us.m3u | 2 --
3 files changed, 6 deletions(-)
diff --git a/streams/de.m3u b/streams/de.m3u
index 57a02c842..94e5c0e6c 100644
--- a/streams/de.m3u
+++ b/streams/de.m3u
@@ -414,8 +414,6 @@ https://bild-und-ton.stream/sophiatv-en/smil:sophia-tv-en.smil/playlist.m3u8
https://bild-und-ton.stream/sophiatv-es/smil:sophia-tv-es.smil/playlist.m3u8
#EXTINF:-1 tvg-id="SophiaTV.it",Sophia TV Italy (720p)
https://bild-und-ton.stream/sophiatv-it/smil:sophia-tv-it.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="Sport1.de",Sport 1 (1080p) [Geo-blocked]
-https://oz.sport1.de/api/ottv1/2/livestream/view/sport2.m3u8
#EXTINF:-1 tvg-id="SRFernsehen.de",SR Fernsehen (720p)
https://srfs.akamaized.net/hls/live/689649/srfsgeo/index.m3u8
#EXTINF:-1 tvg-id="SRF.de",SRF (1080p)
diff --git a/streams/fi.m3u b/streams/fi.m3u
index 1bd046bd2..94c276245 100644
--- a/streams/fi.m3u
+++ b/streams/fi.m3u
@@ -33,8 +33,6 @@ https://ythls.onrender.com/channel/UCyDiTtktwmrc20Bvs_G4pow.m3u8
https://vod.tv7.fi/tv7-ee/smil:tv7-ee.smil/playlist.m3u8
#EXTINF:-1 tvg-id="TaivasTV7.fi",Taivas TV7 (720p)
https://vod.tv7.fi/tv7-fi/smil:tv7-fi.smil/playlist.m3u8
-#EXTINF:-1 tvg-id="TLCFinland.fi",TLC Finland (720p)
-https://live-fi.tvkaista.net/tlc/live.m3u8
#EXTINF:-1 tvg-id="TV5.fi",TV5 (720p) [Not 24/7]
https://live-fi.tvkaista.net/tv5/live.m3u8
#EXTINF:-1 tvg-id="WorTV.fi",WörTV (1080p) [Not 24/7]
diff --git a/streams/us.m3u b/streams/us.m3u
index ef4e929e1..ca7d648ae 100644
--- a/streams/us.m3u
+++ b/streams/us.m3u
@@ -402,8 +402,6 @@ https://cdn20.liveonlineservices.com/hls/eye95tv.m3u8
https://biblescreen.faithlifecdn.com/biblescreen/bibleScreen/playlist.m3u8
#EXTINF:-1 tvg-id="ChristmasMusic.us",Faithlife TV Christmas Music (720p)
https://vse2-na-us-ne24.secdn.net/logos-channel/live/christmas/playlist.m3u8
-#EXTINF:-1 tvg-id="FastTV.us",Fast TV
-https://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8
#EXTINF:-1 tvg-id="" user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148",Fast&Fun Box (Russian) (480p)
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
http://ott-cdn.ucom.am/s79/index.m3u8
From 64703874fba9d6d3e1c725fcf67bb99204723e44 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Tue, 19 Sep 2023 00:08:39 +0000
Subject: [PATCH 15/50] [Bot] Update /streams
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6229369957) workflow.
closes #14261, closes #14260, closes #14225, closes #14220, closes #14219, closes #14137, closes #14096, closes #14063, closes #14040, closes #14268, closes #14262, closes #14221, closes #14165, closes #14154
---
streams/cl.m3u | 4 ++--
streams/cy.m3u | 2 --
streams/fr.m3u | 4 ++++
streams/fr_groupem6.m3u | 2 --
streams/hr.m3u | 2 ++
streams/kg.m3u | 4 ++--
streams/my.m3u | 2 --
streams/us.m3u | 4 ----
streams/us_local.m3u | 2 --
streams/us_pbs.m3u | 2 --
10 files changed, 10 insertions(+), 18 deletions(-)
diff --git a/streams/cl.m3u b/streams/cl.m3u
index 7ac81f22c..85318b5d3 100644
--- a/streams/cl.m3u
+++ b/streams/cl.m3u
@@ -111,8 +111,6 @@ https://v2.tustreaming.cl/clicktv/playlist.m3u8
https://mediacpstreamchile.com:1936/clubtv/clubtv/playlist.m3u8
#EXTINF:-1 tvg-id="ConcepcionTV.cl",Concepción TV (1080p)
http://live.mundogo.cl/mundo/concepciontv/index.m3u8
-#EXTINF:-1 tvg-id="Contivision.cl",Contivision (720p)
-https://unlimited2-cl-isp.dps.live/cm/cm.smil/playlist.m3u8
#EXTINF:-1 tvg-id="CosmosTV.cl",Cosmos TV (720p)
https://v1.tustreaming.cl/cosmostv/index.m3u8
#EXTINF:-1 tvg-id="CRTV.cl",CRTV (720p)
@@ -449,3 +447,5 @@ https://zmlive.zappingtv.com/zm-free/zm.smil/playlist.m3u8
http://38.131.11.9:1080/play/a00x
#EXTINF:-1 tvg-id="ZonaPlayTV.cl",Zona Play TV (720p)
https://paneltv.online:1936/8100/8100/playlist.m3u8
+#EXTINF:-1 tvg-id="Contivision.cl",Contivision (720p)
+https://unlimited6-cl.dps.live/cm/cm.smil/playlist.m3u8
diff --git a/streams/cy.m3u b/streams/cy.m3u
index c86c00a7d..af9a572be 100644
--- a/streams/cy.m3u
+++ b/streams/cy.m3u
@@ -5,8 +5,6 @@ https://sc-kuzeykibrissmarttv.ercdn.net/adatv/bant1/playlist.m3u8
https://dev.aftermind.xyz/edge-hls/unitrust/alfasports/index.m3u8?token=8TXWzhY3h6jrzqEqu
#EXTINF:-1 tvg-id="AlfaSport.cy",Alfa Sport (1080p) [Not 24/7]
https://dev.aftermind.xyz/hls/unitrust/alfasports/index.m3u8?token=8TXWzhY3h6jrzqEqu
-#EXTINF:-1 tvg-id="AlphaTVCyprus.cy",Alpha TV Cyprus (1080p)
-http://l4.cloudskep.com/alphacyp/acy/playlist.m3u8
#EXTINF:-1 tvg-id="ANT1Cyprus.cy",ANT1 Cyprus (1080p)
http://l2.cloudskep.com/ant1cm2/abr/playlist.m3u8
#EXTINF:-1 tvg-id="BRT1.cy",BRT 1 (720p) [Not 24/7]
diff --git a/streams/fr.m3u b/streams/fr.m3u
index a2f9372b0..3f0d8a57f 100644
--- a/streams/fr.m3u
+++ b/streams/fr.m3u
@@ -373,3 +373,7 @@ https://ythls.onrender.com/channel/UCqvIdlrnd4DCcqp2DZwaZYw.m3u8
https://live.digiteka.com/1/WGQ1NnhEN0lzM0NU/dk1EOHhw/hls/live/playlist.m3u8
#EXTINF:-1 tvg-id="Weo.fr",Wéo (Picardie) (480p) [Not 24/7]
https://live.digiteka.com/1/Zks2L0VsM2V0T242/QTBqcFly/hls/live/playlist.m3u8
+#EXTINF:-1 tvg-id="France3Lorraine.fr",France 3 Lorraine
+http://livetv.ktv.zone/225/play.m3u8
+#EXTINF:-1 tvg-id="France4.fr",France 4
+http://livetv.ktv.zone/116/play.m3u8
diff --git a/streams/fr_groupem6.m3u b/streams/fr_groupem6.m3u
index eb14b688d..42d977caf 100644
--- a/streams/fr_groupem6.m3u
+++ b/streams/fr_groupem6.m3u
@@ -3,8 +3,6 @@
https://origin2-6play.live.6cloud.fr/pool_rnpls9by/gulli/sixplaysd/hls_short_q2hyb21h_gulli/index.m3u8
#EXTINF:-1 tvg-id="GulliBilArabi.fr",Gulli Bil Arabi (1080p)
https://shls-gulli-bil-arabi-prod-dub.shahid.net/out/v1/5454d215afba410c90b233f400730958/index.m3u8
-#EXTINF:-1 tvg-id="M6.fr",M6
-https://raw.githubusercontent.com/Sphinxroot/HSL/main/M6.m3u8
#EXTINF:-1 tvg-id="M6.fr",M6 (1080p)
https://shls-m6-france-prod-dub.shahid.net/out/v1/c8a9f6e000cd4ebaa4d2fc7d18c15988/index.m3u8
#EXTINF:-1 tvg-id="M6Music.fr",M6 Music (1080p)
diff --git a/streams/hr.m3u b/streams/hr.m3u
index 2617d6b38..5a01f1c60 100644
--- a/streams/hr.m3u
+++ b/streams/hr.m3u
@@ -27,3 +27,5 @@ http://185.62.75.22:1935/trend/myStream/playlist.m3u8
https://tvjadran.stream.agatin.hr:3412/live/tvjadranlive.m3u8
#EXTINF:-1 tvg-id="TVZapad.hr",TV Zapad (1080p)
http://webtv.zapad.tv:8080/memfs/1ad23803-84c3-41c7-aa91-fce4c7eac52e.m3u8
+#EXTINF:-1 tvg-id="TVNova.hr",TV Nova
+https://stream.agatin.hr:3727/live/tvnovalive.m3u8
diff --git a/streams/kg.m3u b/streams/kg.m3u
index 428250e08..0eac15e45 100644
--- a/streams/kg.m3u
+++ b/streams/kg.m3u
@@ -7,8 +7,6 @@ https://64e5ed58c00d4.streamlock.net/live/smil:balastan.smil/playlist.m3u8
http://onlinetv.ktrk.kg:1935/live/myStream6/playlist.m3u8
#EXTINF:-1 tvg-id="KTRK.kg",KTRK (720p)
http://onlinetv.ktrk.kg:1935/live/myStream/playlist.m3u8
-#EXTINF:-1 tvg-id="Muzika.kg",KTRK Muzika (720p)
-http://onlinetv.ktrk.kg:1935/live/myStream2/playlist.m3u8
#EXTINF:-1 tvg-id="KTRKSport.kg",KTRK Sport (576p)
http://onlinetv.ktrk.kg:1935/live/myStream4/playlist.m3u8
#EXTINF:-1 tvg-id="Madaniyat.kg",Madaniyat (576p)
@@ -17,3 +15,5 @@ http://onlinetv.ktrk.kg:1935/live/myStream5/playlist.m3u8
http://212.2.225.30:1935/live/site.stream/playlist.m3u8
#EXTINF:-1 tvg-id="",Любимый HD/ТНТ4 (576p)
http://92.245.103.126:1935/live/live.stream/playlist.m3u8
+#EXTINF:-1 tvg-id="Muzika.kg",Muzika (272p)
+https://64e5ed58c00d4.streamlock.net/live/smil:music.smil/playlist.m3u8
diff --git a/streams/my.m3u b/streams/my.m3u
index 1ab5a5fb2..1441baf39 100644
--- a/streams/my.m3u
+++ b/streams/my.m3u
@@ -63,8 +63,6 @@ https://d25tgymtnqzu8s.cloudfront.net/smil:tv1/playlist.m3u8?id=1
https://d25tgymtnqzu8s.cloudfront.net/smil:tv2/playlist.m3u8?id=2
#EXTINF:-1 tvg-id="TV3.my",TV3
https://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8
-#EXTINF:-1 tvg-id="TV3.my",TV3 (720p) [Geo-blocked]
-https://live-sg1.global.ssl.fastly.net/live-hls/tonton1.m3u8
#EXTINF:-1 tvg-id="",TV6 [Geo-blocked]
#EXTVLCOPT:http-referrer=https://rtm-player.glueapi.io/
https://d25tgymtnqzu8s.cloudfront.net/smil:tv6/playlist.m3u8?id=6
diff --git a/streams/us.m3u b/streams/us.m3u
index ca7d648ae..32797429c 100644
--- a/streams/us.m3u
+++ b/streams/us.m3u
@@ -181,12 +181,8 @@ https://cdn3.wowza.com/5/ZWQ1K2NYTmpFbGsr/BEK-WOWZA-1/smil:BEKPRIMEeast.smil/pla
https://cdn3.wowza.com/5/ZWQ1K2NYTmpFbGsr/BEK-WOWZA-1/smil:BEKPRIMEW.smil/playlist.m3u8
#EXTINF:-1 tvg-id="BetterHealthTV.us",Better Health TV (480p)
https://tgn.bozztv.com/betterlife/betterhealth/betterhealth/index.m3u8
-#EXTINF:-1 tvg-id="BetterHealthTV.us",Better Health TV (480p)
-https://uni10rtmp.tulix.tv/betterhealth/betterhealth.stream/playlist.m3u8
#EXTINF:-1 tvg-id="BetterLifeNatureChannel.us",Better Life Nature Channel (480p)
https://tgn.bozztv.com/betterlife/betternature/betternature/index.m3u8
-#EXTINF:-1 tvg-id="BetterLifeNatureChannel.us",Better Life Nature Channel (480p)
-https://uni10rtmp.tulix.tv/betternature/betternature.stream/playlist.m3u8
#EXTINF:-1 tvg-id="BetterLifeTV.us",Better Life TV (720p)
https://tgn.bozztv.com/betterlife/betterlife/betterlife/index.m3u8
#EXTINF:-1 tvg-id="",Big City TV
diff --git a/streams/us_local.m3u b/streams/us_local.m3u
index d586bf366..8a440bd92 100644
--- a/streams/us_local.m3u
+++ b/streams/us_local.m3u
@@ -595,8 +595,6 @@ https://reflect-tampa-bay-community.cablecast.tv/live-16/live/live.m3u8
https://reflect-temecula.cablecast.tv/live-2/live/live.m3u8
#EXTINF:-1 tvg-id="Tempe11.us",Tempe Channel 11
https://cdn3.wowza.com/5/cFh0V0QwUVc4SDl2/tempe/G0355_003/chunklist.m3u8
-#EXTINF:-1 tvg-id="TUTV.us",Temple University TV (tutv) (720p)
-https://templeuni.secure.footprint.net/egress/bhandler/templeuni/streama/manifest.m3u8
#EXTINF:-1 tvg-id="WCWNDT1.us",The CW (WCWN-DT1) Albamy NY (1080p)
https://16live00.akamaized.net/CW/index.m3u8
#EXTINF:-1 tvg-id="WJACDT4.us",The CW Altoona PA (WJAC4) (720p)
diff --git a/streams/us_pbs.m3u b/streams/us_pbs.m3u
index 5eb504372..7871e74c9 100644
--- a/streams/us_pbs.m3u
+++ b/streams/us_pbs.m3u
@@ -215,8 +215,6 @@ https://wsredt.lls.pbs.org/out/v1/d615170d96024c229c6ae2177dec84e5/index.m3u8
https://wtvpdt.lls.pbs.org/out/v1/9e8f6bfce87a437d8a8a9aab016421e8/index.m3u8
#EXTINF:-1 tvg-id="WHYYDT1.us",PBS Philadelphia PA (WHYY-DT1) (1080p)
https://whyydt.lls.pbs.org/out/v1/40b7857a84ee4302be8ab755a719cc14/index.m3u8
-#EXTINF:-1 tvg-id="KAETDT1.us",PBS Phoenix AZ (KAET) (1080p)
-https://kaetdt.lls.pbs.org/out/v1/259f25e61b3d47ce8a7e2339a00c5561/index.m3u8
#EXTINF:-1 tvg-id="WQEDDT1.us",PBS Pittsburgh PA (WQED) (1080p)
https://wqeddt.lls.pbs.org/out/v1/1f10d52cea0f45ae88184800e9e6b79e/index.m3u8
#EXTINF:-1 tvg-id="WCFEDT1.us",PBS Plattsburgh NY (WCFE) (1080p)
From 5704d5547b296fc134be785c9ca8af1c10f3fe90 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Tue, 19 Sep 2023 00:08:39 +0000
Subject: [PATCH 16/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6229369957) workflow.
---
README.md | 62 +++++++++++++++++++++++++++----------------------------
1 file changed, 31 insertions(+), 31 deletions(-)
diff --git a/README.md b/README.md
index 8f1e6a066..67be3c583 100644
--- a/README.md
+++ b/README.md
@@ -68,26 +68,26 @@ Same thing, but split up into separate files:
Culture | 77 | https://iptv-org.github.io/iptv/categories/culture.m3u |
Documentary | 64 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
Education | 115 | https://iptv-org.github.io/iptv/categories/education.m3u |
- Entertainment | 354 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
+ Entertainment | 355 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
Family | 40 | https://iptv-org.github.io/iptv/categories/family.m3u |
General | 1119 | https://iptv-org.github.io/iptv/categories/general.m3u |
- Kids | 182 | https://iptv-org.github.io/iptv/categories/kids.m3u |
+ Kids | 183 | https://iptv-org.github.io/iptv/categories/kids.m3u |
Legislative | 167 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
Lifestyle | 78 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
Movies | 274 | https://iptv-org.github.io/iptv/categories/movies.m3u |
Music | 484 | https://iptv-org.github.io/iptv/categories/music.m3u |
- News | 705 | https://iptv-org.github.io/iptv/categories/news.m3u |
+ News | 700 | https://iptv-org.github.io/iptv/categories/news.m3u |
Outdoor | 44 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
Relax | 16 | https://iptv-org.github.io/iptv/categories/relax.m3u |
Religious | 438 | https://iptv-org.github.io/iptv/categories/religious.m3u |
Science | 25 | https://iptv-org.github.io/iptv/categories/science.m3u |
Series | 159 | https://iptv-org.github.io/iptv/categories/series.m3u |
Shop | 74 | https://iptv-org.github.io/iptv/categories/shop.m3u |
- Sports | 206 | https://iptv-org.github.io/iptv/categories/sports.m3u |
+ Sports | 205 | https://iptv-org.github.io/iptv/categories/sports.m3u |
Travel | 30 | https://iptv-org.github.io/iptv/categories/travel.m3u |
Weather | 14 | https://iptv-org.github.io/iptv/categories/weather.m3u |
XXX | 46 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- Undefined | 5249 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ Undefined | 5251 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -134,7 +134,7 @@ Same thing, but split up into separate files:
Catalan | 50 | https://iptv-org.github.io/iptv/languages/cat.m3u |
Chhattisgarhi | 1 | https://iptv-org.github.io/iptv/languages/hne.m3u |
Chinese | 150 | https://iptv-org.github.io/iptv/languages/zho.m3u |
- Croatian | 13 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
+ Croatian | 14 | https://iptv-org.github.io/iptv/languages/hrv.m3u |
Czech | 36 | https://iptv-org.github.io/iptv/languages/ces.m3u |
Danish | 20 | https://iptv-org.github.io/iptv/languages/dan.m3u |
Dhanwar (Nepal) | 1 | https://iptv-org.github.io/iptv/languages/dhw.m3u |
@@ -142,21 +142,21 @@ Same thing, but split up into separate files:
Dholuo | 1 | https://iptv-org.github.io/iptv/languages/luo.m3u |
Dimili | 1 | https://iptv-org.github.io/iptv/languages/zza.m3u |
Dutch | 191 | https://iptv-org.github.io/iptv/languages/nld.m3u |
- English | 2171 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ English | 2169 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
Ewe | 1 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
Fataleka | 1 | https://iptv-org.github.io/iptv/languages/far.m3u |
Filipino | 1 | https://iptv-org.github.io/iptv/languages/fil.m3u |
- Finnish | 25 | https://iptv-org.github.io/iptv/languages/fin.m3u |
- French | 383 | https://iptv-org.github.io/iptv/languages/fra.m3u |
+ Finnish | 24 | https://iptv-org.github.io/iptv/languages/fin.m3u |
+ French | 385 | https://iptv-org.github.io/iptv/languages/fra.m3u |
Galician | 12 | https://iptv-org.github.io/iptv/languages/glg.m3u |
Galolen | 1 | https://iptv-org.github.io/iptv/languages/gal.m3u |
Georgian | 8 | https://iptv-org.github.io/iptv/languages/kat.m3u |
- German | 280 | https://iptv-org.github.io/iptv/languages/deu.m3u |
+ German | 279 | https://iptv-org.github.io/iptv/languages/deu.m3u |
Gikuyu | 2 | https://iptv-org.github.io/iptv/languages/kik.m3u |
Goan Konkani | 1 | https://iptv-org.github.io/iptv/languages/gom.m3u |
- Greek | 122 | https://iptv-org.github.io/iptv/languages/ell.m3u |
+ Greek | 121 | https://iptv-org.github.io/iptv/languages/ell.m3u |
Greenlandic | 2 | https://iptv-org.github.io/iptv/languages/kal.m3u |
Gujarati | 10 | https://iptv-org.github.io/iptv/languages/guj.m3u |
Haitian | 5 | https://iptv-org.github.io/iptv/languages/hat.m3u |
@@ -169,7 +169,7 @@ Same thing, but split up into separate files:
Inuktitut | 1 | https://iptv-org.github.io/iptv/languages/iku.m3u |
Irish | 5 | https://iptv-org.github.io/iptv/languages/gle.m3u |
Italian | 330 | https://iptv-org.github.io/iptv/languages/ita.m3u |
- Japanese | 41 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
+ Japanese | 34 | https://iptv-org.github.io/iptv/languages/jpn.m3u |
Javanese | 3 | https://iptv-org.github.io/iptv/languages/jav.m3u |
Kannada | 18 | https://iptv-org.github.io/iptv/languages/kan.m3u |
Kazakh | 34 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
@@ -238,7 +238,7 @@ Same thing, but split up into separate files:
Wolof | 2 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
Yue Chinese | 10 | https://iptv-org.github.io/iptv/languages/yue.m3u |
- Undefined | 1275 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ Undefined | 1282 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
@@ -398,10 +398,10 @@ Same thing, but split up into separate files:
🇨🇷 Costa Rica | 96 | https://iptv-org.github.io/iptv/countries/cr.m3u |
Puntarenas | 1 | https://iptv-org.github.io/iptv/subdivisions/cr-p.m3u |
San Jose | 1 | https://iptv-org.github.io/iptv/subdivisions/cr-sj.m3u |
- 🇭🇷 Croatia | 27 | https://iptv-org.github.io/iptv/countries/hr.m3u |
+ 🇭🇷 Croatia | 28 | https://iptv-org.github.io/iptv/countries/hr.m3u |
🇨🇺 Cuba | 53 | https://iptv-org.github.io/iptv/countries/cu.m3u |
🇨🇼 Curacao | 10 | https://iptv-org.github.io/iptv/countries/cw.m3u |
- 🇨🇾 Cyprus | 40 | https://iptv-org.github.io/iptv/countries/cy.m3u |
+ 🇨🇾 Cyprus | 39 | https://iptv-org.github.io/iptv/countries/cy.m3u |
🇨🇿 Czech Republic | 43 | https://iptv-org.github.io/iptv/countries/cz.m3u |
🇨🇩 Democratic Republic of the Congo | 33 | https://iptv-org.github.io/iptv/countries/cd.m3u |
🇩🇰 Denmark | 34 | https://iptv-org.github.io/iptv/countries/dk.m3u |
@@ -430,17 +430,17 @@ Same thing, but split up into separate files:
🇫🇰 Falkland Islands | 3 | https://iptv-org.github.io/iptv/countries/fk.m3u |
🇫🇴 Faroe Islands | 1 | https://iptv-org.github.io/iptv/countries/fo.m3u |
🇫🇯 Fiji | 7 | https://iptv-org.github.io/iptv/countries/fj.m3u |
- 🇫🇮 Finland | 41 | https://iptv-org.github.io/iptv/countries/fi.m3u |
+ 🇫🇮 Finland | 40 | https://iptv-org.github.io/iptv/countries/fi.m3u |
Keski-Suomi | 1 | https://iptv-org.github.io/iptv/subdivisions/fi-08.m3u |
Pohjanmaa | 3 | https://iptv-org.github.io/iptv/subdivisions/fi-12.m3u |
- 🇫🇷 France | 262 | https://iptv-org.github.io/iptv/countries/fr.m3u |
+ 🇫🇷 France | 264 | https://iptv-org.github.io/iptv/countries/fr.m3u |
🇬🇫 French Guiana | 7 | https://iptv-org.github.io/iptv/countries/gf.m3u |
🇵🇫 French Polynesia | 7 | https://iptv-org.github.io/iptv/countries/pf.m3u |
🇹🇫 French Southern Territories | 12 | https://iptv-org.github.io/iptv/countries/tf.m3u |
🇬🇦 Gabon | 14 | https://iptv-org.github.io/iptv/countries/ga.m3u |
🇬🇲 Gambia | 14 | https://iptv-org.github.io/iptv/countries/gm.m3u |
🇬🇪 Georgia | 20 | https://iptv-org.github.io/iptv/countries/ge.m3u |
- 🇩🇪 Germany | 265 | https://iptv-org.github.io/iptv/countries/de.m3u |
+ 🇩🇪 Germany | 264 | https://iptv-org.github.io/iptv/countries/de.m3u |
🇬🇭 Ghana | 36 | https://iptv-org.github.io/iptv/countries/gh.m3u |
🇬🇷 Greece | 117 | https://iptv-org.github.io/iptv/countries/gr.m3u |
🇬🇱 Greenland | 6 | https://iptv-org.github.io/iptv/countries/gl.m3u |
@@ -701,10 +701,10 @@ Same thing, but split up into separate files:
🇦🇪 United Arab Emirates | 76 | https://iptv-org.github.io/iptv/countries/ae.m3u |
🇬🇧 United Kingdom | 194 | https://iptv-org.github.io/iptv/countries/uk.m3u |
Wales | 2 | https://iptv-org.github.io/iptv/subdivisions/gb-wls.m3u |
- 🇺🇸 United States | 1882 | https://iptv-org.github.io/iptv/countries/us.m3u |
+ 🇺🇸 United States | 1880 | https://iptv-org.github.io/iptv/countries/us.m3u |
Alabama | 4 | https://iptv-org.github.io/iptv/subdivisions/us-al.m3u |
Alaska | 2 | https://iptv-org.github.io/iptv/subdivisions/us-ak.m3u |
- Arizona | 12 | https://iptv-org.github.io/iptv/subdivisions/us-az.m3u |
+ Arizona | 11 | https://iptv-org.github.io/iptv/subdivisions/us-az.m3u |
Arkansas | 4 | https://iptv-org.github.io/iptv/subdivisions/us-ar.m3u |
California | 146 | https://iptv-org.github.io/iptv/subdivisions/us-ca.m3u |
Colorado | 19 | https://iptv-org.github.io/iptv/subdivisions/us-co.m3u |
@@ -793,15 +793,15 @@ Same thing, but split up into separate files:
Africa | 423 | https://iptv-org.github.io/iptv/regions/afr.m3u |
- Americas | 3801 | https://iptv-org.github.io/iptv/regions/amer.m3u |
+ Americas | 3799 | https://iptv-org.github.io/iptv/regions/amer.m3u |
Arab world | 426 | https://iptv-org.github.io/iptv/regions/arab.m3u |
- Asia | 2947 | https://iptv-org.github.io/iptv/regions/asia.m3u |
+ Asia | 2946 | https://iptv-org.github.io/iptv/regions/asia.m3u |
Asia-Pacific | 1912 | https://iptv-org.github.io/iptv/regions/apac.m3u |
Association of Southeast Asian Nations | 471 | https://iptv-org.github.io/iptv/regions/asean.m3u |
Benelux | 240 | https://iptv-org.github.io/iptv/regions/benelux.m3u |
Caribbean | 251 | https://iptv-org.github.io/iptv/regions/carib.m3u |
Central America | 205 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
- Central and Eastern Europe | 1019 | https://iptv-org.github.io/iptv/regions/cee.m3u |
+ Central and Eastern Europe | 1020 | https://iptv-org.github.io/iptv/regions/cee.m3u |
Central Asia | 64 | https://iptv-org.github.io/iptv/regions/cas.m3u |
Commonwealth of Independent States | 460 | https://iptv-org.github.io/iptv/regions/cis.m3u |
Europe | 3241 | https://iptv-org.github.io/iptv/regions/eur.m3u |
@@ -810,20 +810,20 @@ Same thing, but split up into separate files:
Latin America | 1779 | https://iptv-org.github.io/iptv/regions/latam.m3u |
Latin America and the Caribbean | 1801 | https://iptv-org.github.io/iptv/regions/lac.m3u |
Maghreb | 60 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
- Middle East | 698 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
- Middle East and North Africa | 749 | https://iptv-org.github.io/iptv/regions/mena.m3u |
- Nordics | 97 | https://iptv-org.github.io/iptv/regions/nord.m3u |
- North America | 2613 | https://iptv-org.github.io/iptv/regions/noram.m3u |
- Northern America | 2016 | https://iptv-org.github.io/iptv/regions/nam.m3u |
- Northern Europe | 126 | https://iptv-org.github.io/iptv/regions/neur.m3u |
+ Middle East | 697 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
+ Middle East and North Africa | 748 | https://iptv-org.github.io/iptv/regions/mena.m3u |
+ Nordics | 96 | https://iptv-org.github.io/iptv/regions/nord.m3u |
+ North America | 2611 | https://iptv-org.github.io/iptv/regions/noram.m3u |
+ Northern America | 2014 | https://iptv-org.github.io/iptv/regions/nam.m3u |
+ Northern Europe | 125 | https://iptv-org.github.io/iptv/regions/neur.m3u |
Oceania | 55 | https://iptv-org.github.io/iptv/regions/oce.m3u |
South America | 1193 | https://iptv-org.github.io/iptv/regions/southam.m3u |
South Asia | 593 | https://iptv-org.github.io/iptv/regions/sas.m3u |
Southeast Asia | 492 | https://iptv-org.github.io/iptv/regions/sea.m3u |
- Southern Europe | 1097 | https://iptv-org.github.io/iptv/regions/ser.m3u |
+ Southern Europe | 1096 | https://iptv-org.github.io/iptv/regions/ser.m3u |
Sub-Saharan Africa | 339 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
West Africa | 139 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
- Western Europe | 1002 | https://iptv-org.github.io/iptv/regions/wer.m3u |
+ Western Europe | 1003 | https://iptv-org.github.io/iptv/regions/wer.m3u |
From 769b7593297d517c8bd4d8057d531f894a6a8990 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Wed, 20 Sep 2023 00:08:37 +0000
Subject: [PATCH 17/50] [Bot] Update /streams
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6242223171) workflow.
closes #14280, closes #14279, closes #14286, closes #14285, closes #14283, closes #14281
---
streams/kg.m3u | 8 +++++++-
streams/kr.m3u | 4 ----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/streams/kg.m3u b/streams/kg.m3u
index 0eac15e45..85efbe6ac 100644
--- a/streams/kg.m3u
+++ b/streams/kg.m3u
@@ -15,5 +15,11 @@ http://onlinetv.ktrk.kg:1935/live/myStream5/playlist.m3u8
http://212.2.225.30:1935/live/site.stream/playlist.m3u8
#EXTINF:-1 tvg-id="",Любимый HD/ТНТ4 (576p)
http://92.245.103.126:1935/live/live.stream/playlist.m3u8
-#EXTINF:-1 tvg-id="Muzika.kg",Muzika (272p)
+#EXTINF:-1 tvg-id="Music.kg",Музыка (272p)
https://64e5ed58c00d4.streamlock.net/live/smil:music.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="AlaToo24.kg",Ала-тоо 24 (272p)
+https://64e5ed58c00d4.streamlock.net/live/smil:alatoo24.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="KTRKSport.kg",УТРК Спорт (272p)
+https://64e5ed58c00d4.streamlock.net/live/smil:sport.smil/playlist.m3u8
+#EXTINF:-1 tvg-id="UTRK.kg",УТРК Кыргызстан (272p)
+https://64e5ed58c00d4.streamlock.net/live/smil:utrk.smil/playlist.m3u8
diff --git a/streams/kr.m3u b/streams/kr.m3u
index 791866884..7d290a601 100644
--- a/streams/kr.m3u
+++ b/streams/kr.m3u
@@ -93,10 +93,6 @@ https://jcnonair-1108.acs.wecandeo.com/ms/3162/1108/index.m3u8
http://live.worktv.or.kr:1935/live/wowtvlive1.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="JobplusTV.kr",Job Plus TV (한국직업방송) (480p)
https://live.jobplustv.or.kr/live/wowtvlive1.sdp/playlist.m3u8
-#EXTINF:-1 tvg-id="KBS1TV.kr",KBS1 (720p)
-http://ye23.vip/z7z8/2021/kbs2020.php?id=1
-#EXTINF:-1 tvg-id="KBS2TV.kr",KBS2 (720p) [Not 24/7]
-http://ye23.vip/z7z8/2021/kbs2020.php?id=2
#EXTINF:-1 tvg-id="KBSDrama.kr",KBS Drama (480p)
http://mytv.dothome.co.kr/ch/catv/2.php
#EXTINF:-1 tvg-id="KBSDrama.kr",KBS Drama (480p)
From 10dc2d9510ca25775838fa2df5fc1a8de7dfc13e Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Wed, 20 Sep 2023 00:08:37 +0000
Subject: [PATCH 18/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6242223171) workflow.
---
README.md | 48 ++++++++++++++++++++++++------------------------
1 file changed, 24 insertions(+), 24 deletions(-)
diff --git a/README.md b/README.md
index 67be3c583..1514b7c01 100644
--- a/README.md
+++ b/README.md
@@ -70,24 +70,24 @@ Same thing, but split up into separate files:
Education | 115 | https://iptv-org.github.io/iptv/categories/education.m3u |
Entertainment | 355 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
Family | 40 | https://iptv-org.github.io/iptv/categories/family.m3u |
- General | 1119 | https://iptv-org.github.io/iptv/categories/general.m3u |
+ General | 1120 | https://iptv-org.github.io/iptv/categories/general.m3u |
Kids | 183 | https://iptv-org.github.io/iptv/categories/kids.m3u |
Legislative | 167 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
Lifestyle | 78 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
Movies | 274 | https://iptv-org.github.io/iptv/categories/movies.m3u |
Music | 484 | https://iptv-org.github.io/iptv/categories/music.m3u |
- News | 700 | https://iptv-org.github.io/iptv/categories/news.m3u |
+ News | 701 | https://iptv-org.github.io/iptv/categories/news.m3u |
Outdoor | 44 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
Relax | 16 | https://iptv-org.github.io/iptv/categories/relax.m3u |
Religious | 438 | https://iptv-org.github.io/iptv/categories/religious.m3u |
Science | 25 | https://iptv-org.github.io/iptv/categories/science.m3u |
Series | 159 | https://iptv-org.github.io/iptv/categories/series.m3u |
Shop | 74 | https://iptv-org.github.io/iptv/categories/shop.m3u |
- Sports | 205 | https://iptv-org.github.io/iptv/categories/sports.m3u |
+ Sports | 203 | https://iptv-org.github.io/iptv/categories/sports.m3u |
Travel | 30 | https://iptv-org.github.io/iptv/categories/travel.m3u |
Weather | 14 | https://iptv-org.github.io/iptv/categories/weather.m3u |
XXX | 46 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- Undefined | 5251 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ Undefined | 5240 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -118,7 +118,7 @@ Same thing, but split up into separate files:
Albanian | 58 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
Alemannic | 1 | https://iptv-org.github.io/iptv/languages/gsw.m3u |
Amharic | 5 | https://iptv-org.github.io/iptv/languages/amh.m3u |
- Arabic | 375 | https://iptv-org.github.io/iptv/languages/ara.m3u |
+ Arabic | 367 | https://iptv-org.github.io/iptv/languages/ara.m3u |
Armenian | 29 | https://iptv-org.github.io/iptv/languages/hye.m3u |
Assamese | 7 | https://iptv-org.github.io/iptv/languages/asm.m3u |
Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
@@ -142,7 +142,7 @@ Same thing, but split up into separate files:
Dholuo | 1 | https://iptv-org.github.io/iptv/languages/luo.m3u |
Dimili | 1 | https://iptv-org.github.io/iptv/languages/zza.m3u |
Dutch | 191 | https://iptv-org.github.io/iptv/languages/nld.m3u |
- English | 2169 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ English | 2167 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
Ewe | 1 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
@@ -175,9 +175,9 @@ Same thing, but split up into separate files:
Kazakh | 34 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
Khmer | 12 | https://iptv-org.github.io/iptv/languages/khm.m3u |
Kinyarwanda | 3 | https://iptv-org.github.io/iptv/languages/kin.m3u |
- Kirghiz | 7 | https://iptv-org.github.io/iptv/languages/kir.m3u |
+ Kirghiz | 8 | https://iptv-org.github.io/iptv/languages/kir.m3u |
Konkani (macrolanguage) | 2 | https://iptv-org.github.io/iptv/languages/kok.m3u |
- Korean | 112 | https://iptv-org.github.io/iptv/languages/kor.m3u |
+ Korean | 110 | https://iptv-org.github.io/iptv/languages/kor.m3u |
Kurdish | 24 | https://iptv-org.github.io/iptv/languages/kur.m3u |
Lahnda | 1 | https://iptv-org.github.io/iptv/languages/lah.m3u |
Lao | 9 | https://iptv-org.github.io/iptv/languages/lao.m3u |
@@ -207,7 +207,7 @@ Same thing, but split up into separate files:
Portuguese | 361 | https://iptv-org.github.io/iptv/languages/por.m3u |
Romanian | 116 | https://iptv-org.github.io/iptv/languages/ron.m3u |
Romany | 1 | https://iptv-org.github.io/iptv/languages/rom.m3u |
- Russian | 302 | https://iptv-org.github.io/iptv/languages/rus.m3u |
+ Russian | 304 | https://iptv-org.github.io/iptv/languages/rus.m3u |
Saint Lucian Creole French | 2 | https://iptv-org.github.io/iptv/languages/acf.m3u |
Santali | 1 | https://iptv-org.github.io/iptv/languages/sat.m3u |
Serbian | 82 | https://iptv-org.github.io/iptv/languages/srp.m3u |
@@ -238,7 +238,7 @@ Same thing, but split up into separate files:
Wolof | 2 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
Yue Chinese | 10 | https://iptv-org.github.io/iptv/languages/yue.m3u |
- Undefined | 1282 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ Undefined | 1281 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
@@ -501,7 +501,7 @@ Same thing, but split up into separate files:
🇮🇶 Iraq | 128 | https://iptv-org.github.io/iptv/countries/iq.m3u |
🇮🇪 Ireland | 22 | https://iptv-org.github.io/iptv/countries/ie.m3u |
🇮🇱 Israel | 21 | https://iptv-org.github.io/iptv/countries/il.m3u |
- 🇮🇹 Italy | 409 | https://iptv-org.github.io/iptv/countries/it.m3u |
+ 🇮🇹 Italy | 408 | https://iptv-org.github.io/iptv/countries/it.m3u |
🇨🇮 Ivory Coast | 30 | https://iptv-org.github.io/iptv/countries/ci.m3u |
🇯🇲 Jamaica | 11 | https://iptv-org.github.io/iptv/countries/jm.m3u |
🇯🇵 Japan | 47 | https://iptv-org.github.io/iptv/countries/jp.m3u |
@@ -510,8 +510,8 @@ Same thing, but split up into separate files:
🇰🇪 Kenya | 54 | https://iptv-org.github.io/iptv/countries/ke.m3u |
🇰🇮 Kiribati | 6 | https://iptv-org.github.io/iptv/countries/ki.m3u |
🇽🇰 Kosovo | 25 | https://iptv-org.github.io/iptv/countries/xk.m3u |
- 🇰🇼 Kuwait | 47 | https://iptv-org.github.io/iptv/countries/kw.m3u |
- 🇰🇬 Kyrgyzstan | 9 | https://iptv-org.github.io/iptv/countries/kg.m3u |
+ 🇰🇼 Kuwait | 38 | https://iptv-org.github.io/iptv/countries/kw.m3u |
+ 🇰🇬 Kyrgyzstan | 10 | https://iptv-org.github.io/iptv/countries/kg.m3u |
🇱🇦 Laos | 44 | https://iptv-org.github.io/iptv/countries/la.m3u |
🇱🇻 Latvia | 25 | https://iptv-org.github.io/iptv/countries/lv.m3u |
🇱🇧 Lebanon | 57 | https://iptv-org.github.io/iptv/countries/lb.m3u |
@@ -643,7 +643,7 @@ Same thing, but split up into separate files:
🇸🇴 Somalia | 61 | https://iptv-org.github.io/iptv/countries/so.m3u |
🇿🇦 South Africa | 36 | https://iptv-org.github.io/iptv/countries/za.m3u |
🇬🇸 South Georgia and the South Sandwich Islands | 3 | https://iptv-org.github.io/iptv/countries/gs.m3u |
- 🇰🇷 South Korea | 112 | https://iptv-org.github.io/iptv/countries/kr.m3u |
+ 🇰🇷 South Korea | 110 | https://iptv-org.github.io/iptv/countries/kr.m3u |
Busan-gwangyeoksi | 2 | https://iptv-org.github.io/iptv/subdivisions/kr-26.m3u |
Chungcheongbuk-do | 2 | https://iptv-org.github.io/iptv/subdivisions/kr-43.m3u |
Daegu-gwangyeoksi | 2 | https://iptv-org.github.io/iptv/subdivisions/kr-27.m3u |
@@ -794,24 +794,24 @@ Same thing, but split up into separate files:
Africa | 423 | https://iptv-org.github.io/iptv/regions/afr.m3u |
Americas | 3799 | https://iptv-org.github.io/iptv/regions/amer.m3u |
- Arab world | 426 | https://iptv-org.github.io/iptv/regions/arab.m3u |
- Asia | 2946 | https://iptv-org.github.io/iptv/regions/asia.m3u |
- Asia-Pacific | 1912 | https://iptv-org.github.io/iptv/regions/apac.m3u |
+ Arab world | 417 | https://iptv-org.github.io/iptv/regions/arab.m3u |
+ Asia | 2936 | https://iptv-org.github.io/iptv/regions/asia.m3u |
+ Asia-Pacific | 1910 | https://iptv-org.github.io/iptv/regions/apac.m3u |
Association of Southeast Asian Nations | 471 | https://iptv-org.github.io/iptv/regions/asean.m3u |
Benelux | 240 | https://iptv-org.github.io/iptv/regions/benelux.m3u |
Caribbean | 251 | https://iptv-org.github.io/iptv/regions/carib.m3u |
Central America | 205 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
Central and Eastern Europe | 1020 | https://iptv-org.github.io/iptv/regions/cee.m3u |
- Central Asia | 64 | https://iptv-org.github.io/iptv/regions/cas.m3u |
- Commonwealth of Independent States | 460 | https://iptv-org.github.io/iptv/regions/cis.m3u |
- Europe | 3241 | https://iptv-org.github.io/iptv/regions/eur.m3u |
- Europe, the Middle East and Africa | 4056 | https://iptv-org.github.io/iptv/regions/emea.m3u |
+ Central Asia | 65 | https://iptv-org.github.io/iptv/regions/cas.m3u |
+ Commonwealth of Independent States | 461 | https://iptv-org.github.io/iptv/regions/cis.m3u |
+ Europe | 3240 | https://iptv-org.github.io/iptv/regions/eur.m3u |
+ Europe, the Middle East and Africa | 4046 | https://iptv-org.github.io/iptv/regions/emea.m3u |
Hispanic America | 1470 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
Latin America | 1779 | https://iptv-org.github.io/iptv/regions/latam.m3u |
Latin America and the Caribbean | 1801 | https://iptv-org.github.io/iptv/regions/lac.m3u |
Maghreb | 60 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
- Middle East | 697 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
- Middle East and North Africa | 748 | https://iptv-org.github.io/iptv/regions/mena.m3u |
+ Middle East | 688 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
+ Middle East and North Africa | 739 | https://iptv-org.github.io/iptv/regions/mena.m3u |
Nordics | 96 | https://iptv-org.github.io/iptv/regions/nord.m3u |
North America | 2611 | https://iptv-org.github.io/iptv/regions/noram.m3u |
Northern America | 2014 | https://iptv-org.github.io/iptv/regions/nam.m3u |
@@ -820,7 +820,7 @@ Same thing, but split up into separate files:
South America | 1193 | https://iptv-org.github.io/iptv/regions/southam.m3u |
South Asia | 593 | https://iptv-org.github.io/iptv/regions/sas.m3u |
Southeast Asia | 492 | https://iptv-org.github.io/iptv/regions/sea.m3u |
- Southern Europe | 1096 | https://iptv-org.github.io/iptv/regions/ser.m3u |
+ Southern Europe | 1095 | https://iptv-org.github.io/iptv/regions/ser.m3u |
Sub-Saharan Africa | 339 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
West Africa | 139 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
Western Europe | 1003 | https://iptv-org.github.io/iptv/regions/wer.m3u |
From a3ed919d07c23e1b36dd4e65afbe62d830764be1 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Wed, 20 Sep 2023 10:41:53 +0200
Subject: [PATCH 19/50] Update au.m3u
---
streams/au.m3u | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/streams/au.m3u b/streams/au.m3u
index 35f8efa8a..93987c8d4 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -43,11 +43,11 @@ https://9now-livestreams.akamaized.net/hls/live/2007330/ch9-syd/master.m3u8
https://9now-livestreams.akamaized.net/hls/live/2008312/go-syd/master.m3u8
#EXTINF:-1 tvg-id="9Life.au",9Life (720p) [Geo-blocked]
https://9now-livestreams.akamaized.net/hls/live/2008313/life-syd/master.m3u8
-#EXTINF:-1 tvg-id="",ADH TV (1080p) [Not 24/7]
+#EXTINF:-1 tvg-id="ADHTV.au",ADH TV (1080p) [Not 24/7]
https://ythls.onrender.com/channel/UCtzTaKI8AkiSjyzm1_JbMUg.m3u8
-#EXTINF:-1 tvg-id="",Guidance TV Australia (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="GuidanceTVAustralia.au",Guidance TV Australia (720p) [Not 24/7]
https://ythls.onrender.com/channel/UC81VkX0QeICZw7o2jMwGThg.m3u8
-#EXTINF:-1 tvg-id="",2GB Sydney (1080p)
+#EXTINF:-1 tvg-id="2GB.au",2GB Sydney (1080p)
https://2gblive.akamaized.net/hls/live/2033805/2GB/index.m3u8
-#EXTINF:-1 tvg-id="",Hope Channel Australia (1080p)
+#EXTINF:-1 tvg-id="HopeChannelAustralia.au",Hope Channel Australia (1080p)
https://videodelivery.net/9fb3596948ddf463fde0ec4b85625b24/manifest/video.m3u8
From f1597fd91d21117945da157bfa4fcb9d59f8bda8 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Wed, 20 Sep 2023 11:31:56 +0200
Subject: [PATCH 20/50] Update au.m3u
Closes #13518
Closes #13519
Closes #13520
Closes #13521
Closes #13522
Closes #13523
Closes #13524
Closes #13525
Closes #13527
Closes #13528
---
streams/au.m3u | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/streams/au.m3u b/streams/au.m3u
index 93987c8d4..5a3867c66 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -51,3 +51,19 @@ https://ythls.onrender.com/channel/UC81VkX0QeICZw7o2jMwGThg.m3u8
https://2gblive.akamaized.net/hls/live/2033805/2GB/index.m3u8
#EXTINF:-1 tvg-id="HopeChannelAustralia.au",Hope Channel Australia (1080p)
https://videodelivery.net/9fb3596948ddf463fde0ec4b85625b24/manifest/video.m3u8
+#EXTINF:-1 tvg-id="9Rush.au",9Rush (720p) [Geo-blocked]
+https://9now-livestreams.akamaized.net/hls/live/2010626/rush-syd/master.m3u8
+#EXTINF:-1 tvg-id="Channel9.au",Channel 9 (720p) [Geo-blocked]
+https://9now-livestreams.akamaized.net/hls/live/2008322/ch9-mel/master.m3u8
+#EXTINF:-1 tvg-id="Channel7.au",Channel 7 [Geo-blocked]
+https://npc.cdn.7livecloud.io/hls/live/SYD1/master.m3u8
+#EXTINF:-1 tvg-id="7two.au",7two [Geo-blocked]
+https://npc.cdn.7livecloud.io/hls/live/MEL2/master.m3u8
+EXTINF#:-1 tvg-id="7mate.au",7mate [Geo-blocked]
+https://npc.cdn.7livecloud.io/hls/live/MEL3/master.m3u8
+#EXTINF:-1 tvg-id="7flix.au",7flix [Geo-blocked]
+https://npc.cdn.7livecloud.io/hls/live/MEL6/master.m3u8
+#EXTINF:-1 tvg-id="SkyRacing1.au",Sky Racing 1 [Geo-blocked]
+https://skylivetab-new.akamaized.net/hls/live/2038780/sky1/index.m3u8
+#EXTINF:-1 tvg-id="SkyRacing2.au",Sky Racing 2[Geo-blocked]
+https://skylivetab-new.akamaized.net/hls/live/2038781/sky2/index.m3u8
From 863398e83d5499655df9a39e842242469d109181 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Wed, 20 Sep 2023 11:34:17 +0200
Subject: [PATCH 21/50] Typo correction
---
streams/au.m3u | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/streams/au.m3u b/streams/au.m3u
index 5a3867c66..7ee657ad8 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -65,5 +65,5 @@ https://npc.cdn.7livecloud.io/hls/live/MEL3/master.m3u8
https://npc.cdn.7livecloud.io/hls/live/MEL6/master.m3u8
#EXTINF:-1 tvg-id="SkyRacing1.au",Sky Racing 1 [Geo-blocked]
https://skylivetab-new.akamaized.net/hls/live/2038780/sky1/index.m3u8
-#EXTINF:-1 tvg-id="SkyRacing2.au",Sky Racing 2[Geo-blocked]
+#EXTINF:-1 tvg-id="SkyRacing2.au",Sky Racing 2 [Geo-blocked]
https://skylivetab-new.akamaized.net/hls/live/2038781/sky2/index.m3u8
From 8335f064ef9e0a2b9f3b7616f5771d35d397d0ab Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Wed, 20 Sep 2023 18:30:53 +0200
Subject: [PATCH 22/50] Update streams/au.m3u
Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com>
---
streams/au.m3u | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/streams/au.m3u b/streams/au.m3u
index 7ee657ad8..ca4c279e0 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -59,7 +59,7 @@ https://9now-livestreams.akamaized.net/hls/live/2008322/ch9-mel/master.m3u8
https://npc.cdn.7livecloud.io/hls/live/SYD1/master.m3u8
#EXTINF:-1 tvg-id="7two.au",7two [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/MEL2/master.m3u8
-EXTINF#:-1 tvg-id="7mate.au",7mate [Geo-blocked]
+#EXTINF:-1 tvg-id="7mate.au",7mate [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/MEL3/master.m3u8
#EXTINF:-1 tvg-id="7flix.au",7flix [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/MEL6/master.m3u8
From 56b09ecaf10dd403680ebf71bfd6da58e55f83d2 Mon Sep 17 00:00:00 2001
From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com>
Date: Wed, 20 Sep 2023 21:04:50 +0100
Subject: [PATCH 23/50] Update uk_bbc.m3u
---
streams/uk_bbc.m3u | 108 +++++++++++++++++----------------------------
1 file changed, 40 insertions(+), 68 deletions(-)
diff --git a/streams/uk_bbc.m3u b/streams/uk_bbc.m3u
index 35b677195..998c27ef7 100644
--- a/streams/uk_bbc.m3u
+++ b/streams/uk_bbc.m3u
@@ -1,54 +1,40 @@
#EXTM3U
#EXTINF:-1 tvg-id="BBCAlba.uk",BBC Alba (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_alba/iptv_hd_abr_v1.mpd
-#EXTINF:-1 tvg-id="BBCAlba.uk",BBC Alba (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_alba/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_alba/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-cmaf-pushb-ww-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.mpd
+https://vs-cmaf-pushb-ww-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-cmaf-pushb-ww-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_http.mpd
+https://vs-cmaf-pushb-ww-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_http.mpd
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-cmaf-pushb-ww.live.cf.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.mpd
+https://vs-cmaf-pushb-ww.live.cf.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-cmaf-pushb-ww.live.cf.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_cloudfrontms_live.mpd
+https://vs-cmaf-pushb-ww.live.cf.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_http.mpd
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-cmaf-pushb-ww.live.cf.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_http.mpd
+https://vs-hls-pushb-ww-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.m3u8
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-hls-pushb-ww-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.m3u8
-#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (720p)
-https://vs-hls-pushb-ww-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/t=3840/v=pv14/b=5070016/main.m3u8
-#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (540p)
-https://vs-hls-pushb-ww-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_akamai_hls_live.m3u8
+https://vs-hls-pushb-ww-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (540p)
-https://vs-hls-pushb-ww.live.cf.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.m3u8
-#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (540p)
-https://vs-hls-pushb-ww.live.cf.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2_cloudfrontms_live.m3u8
+https://vs-hls-pushb-ww.live.cf.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_arabic_tv/pc_hd_abr_v2.m3u8
#EXTINF:-1 tvg-id="BBCArabic.uk",BBC Arabic (480p)
https://ythls.onrender.com/channel/UCelk6aHijZq-GJBBB9YpReA.m3u8
#EXTINF:-1 tvg-id="BBCFour.uk",BBC Four (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_four_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCFour.uk",BBC Four HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_four_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_four_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCFour.uk",BBC Four HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_four_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_four_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News (540p) [Geo-blocked]
-https://vs-hls-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_news_channel_hd/mobile_wifi_main_sd_abr_v2.m3u8
+https://vs-hls-push-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_news_channel_hd/mobile_wifi_main_sd_abr_v2.m3u8
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Geo-blocked]
-https://vs-cmaf-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_news_channel_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-push-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_news_channel_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Geo-blocked]
-https://vs-hls-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_news_channel_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-push-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_news_channel_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCOneChannelIslands.uk",BBC One Channel Islands (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_channel_islands/pc_hd_abr_v2.mpd
-#EXTINF:-1 tvg-id="BBCOneChannelIslands.uk",BBC One Channel Islands (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_channel_islands/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_channel_islands/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneEast.uk",BBC One East (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_east/pc_hd_abr_v2.mpd
-#EXTINF:-1 tvg-id="BBCOneEast.uk",BBC One East (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_east/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_east/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneEastMidlands.uk",BBC One East Midlands (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_east_midlands/pc_hd_abr_v2.mpd
-#EXTINF:-1 tvg-id="BBCOneEastMidlands.uk",BBC One East Midlands (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_east_midlands/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_east_midlands/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneYorkshire.uk",BBC One East Yorkshire (720p) [Geo-blocked]
https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_east_yorkshire/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneYorkshire.uk",BBC One East Yorkshire (540p) [Geo-blocked]
@@ -70,15 +56,11 @@ https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_n
#EXTINF:-1 tvg-id="BBCOneNorthEastCumbria.uk",BBC One North East (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_north_east/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneNorthWest.uk",BBC One North West (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_north_west/pc_hd_abr_v2.mpd
-#EXTINF:-1 tvg-id="BBCOneNorthWest.uk",BBC One North West (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_north_west/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
-#EXTINF:-1 tvg-id="BBCOneNorthernIreland.uk",BBC One Northern Ireland (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_northern_ireland_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_north_west/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneNorthernIreland.uk",BBC One Northern Ireland HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_northern_ireland_hd/pc_hd_abr_v2.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_northern_ireland_hd/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneNorthernIreland.uk",BBC One Northern Ireland HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_northern_ireland_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_northern_ireland_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCOneScotland.uk",BBC One Scotland (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_scotland_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneScotland.uk",BBC One Scotland HD (720p) [Geo-blocked]
@@ -94,7 +76,7 @@ https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_s
#EXTINF:-1 tvg-id="BBCOneSouthEast.uk",BBC One South East (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_south_east/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneSouthWest.uk",BBC One South West (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_south_west/pc_hd_abr_v2.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_south_west/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneSouthWest.uk",BBC One South West (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_south_west/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneWales.uk",BBC One Wales (720p) [Geo-blocked]
@@ -104,7 +86,7 @@ https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_wa
#EXTINF:-1 tvg-id="BBCOneWales.uk",BBC One Wales (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_wales_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneWest.uk",BBC One West (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_west/pc_hd_abr_v2.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_west/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneWest.uk",BBC One West (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_west/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneWestMidlands.uk",BBC One West Midlands (720p) [Geo-blocked]
@@ -116,9 +98,7 @@ https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_y
#EXTINF:-1 tvg-id="BBCOneYorksLincs.uk",BBC One Yorks (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_yorks/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCParliament.uk",BBC Parliament (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_parliament/iptv_hd_abr_v1.mpd
-#EXTINF:-1 tvg-id="BBCParliament.uk",BBC Parliament (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_parliament/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_parliament/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCPersian.uk",BBC Persian (720p)
https://vs-cmaf-pushb-ww-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_persian_tv/pc_hd_abr_v2_akamai_dash_live.mpd
#EXTINF:-1 tvg-id="BBCPersian.uk",BBC Persian (720p)
@@ -187,34 +167,30 @@ https://vs-cmaf-pushb-uk.live.cf.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:red_bu
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_scotland_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCScotland.uk",BBC Scotland HD (720p) [Geo-blocked]
https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_scotland_hd/iptv_hd_abr_v1.mpd
-#EXTINF:-1 tvg-id="BBCScotland.uk",BBC Scotland HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/content/x=3/v=pv14/b=5070016/t=3840/i=urn:bbc:pips:service:bbc_scotland_hd/main.m3u8
#EXTINF:-1 tvg-id="BBCThree.uk",BBC Three (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_three_hd/t=3840/v=pv10/b=1604032/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_three_hd/t=3840/v=pv10/b=1604032/main.m3u8
#EXTINF:-1 tvg-id="BBCThree.uk",BBC Three HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_three_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_three_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCThree.uk",BBC Three HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_three_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_three_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCThree.uk",BBC Three HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_three_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_three_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCTwoEngland.uk",BBC Two HD (720p) [Geo-blocked]
-https://vs-cmaf-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-push-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_two_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCTwoEngland.uk",BBC Two HD (720p) [Geo-blocked]
-https://vs-cmaf-push-uk.live.fastly.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:bbc_two_hd/pc_hd_abr_v2.mpd
+https://vs-cmaf-push-uk.live.fastly.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:bbc_two_hd/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCTwoEngland.uk",BBC Two HD (720p) [Geo-blocked]
-https://vs-hls-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-push-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_two_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCTwoEngland.uk",BBC Two HD (540p) [Geo-blocked]
-https://vs-hls-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_hd/mobile_wifi_main_sd_abr_v2.m3u8
+https://vs-hls-push-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_two_hd/mobile_wifi_main_sd_abr_v2.m3u8
#EXTINF:-1 tvg-id="BBCTwoNorthernIreland.uk",BBC Two Northen Ireland (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_northern_ireland_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCTwoNorthernIreland.uk",BBC Two Northern Ireland HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_northern_ireland_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_two_northern_ireland_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCTwoNorthernIreland.uk",BBC Two Northern Ireland HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_northern_ireland_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_two_northern_ireland_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCTwoWales.uk",BBC Two Wales (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_wales_digital/iptv_hd_abr_v1.mpd
-#EXTINF:-1 tvg-id="BBCTwoWales.uk",BBC Two Wales (540p) [Geo-blocked]
-https://vs-hls-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_two_wales_digital/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_two_wales_digital/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="BBCUHD1.uk",BBC UHD 1 (2160p) [Geo-blocked] [Not 24/7]
https://ve-uhd-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:uhd_stream_01/iptv_uhd_v1.mpd
#EXTINF:-1 tvg-id="BBCUHD2.uk",BBC UHD 2 (2160p) [Geo-blocked] [Not 24/7]
@@ -225,23 +201,19 @@ https://ve-uhd-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:uhd_stream_
https://ve-uhd-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:uhd_stream_04/iptv_uhd_v1.mpd
#EXTINF:-1 tvg-id="BBCUHD5.uk",BBC UHD 5 (2160p) [Geo-blocked] [Not 24/7]
https://ve-uhd-push-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:uhd_stream_05/iptv_uhd_v1.mpd
-#EXTINF:-1 tvg-id="CBBC.uk",CBBC (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:cbbc_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="CBBC.uk",CBBC HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:cbbc_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:cbbc_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="CBBC.uk",CBBC HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:cbbc_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:cbbc_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="CBBC.uk",CBBC HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:cbbc_hd/t=3840/v=pv14/b=5070016/main.m3u8
-#EXTINF:-1 tvg-id="CBeebies.uk",CBeebies (540p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:cbeebies_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:cbbc_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="CBeebies.uk",CBeebies HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:cbeebies_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:cbeebies_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="CBeebies.uk",CBeebies HD (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=3/i=urn:bbc:pips:service:cbeebies_hd/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk.live.fastly.md.bbci.co.uk/x=4/i=urn:bbc:pips:service:cbeebies_hd/iptv_hd_abr_v1.mpd
#EXTINF:-1 tvg-id="CBeebies.uk",CBeebies HD (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:cbeebies_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:cbeebies_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="S4C.uk",S4C (1080p) [Geo-blocked]
https://live-uk.s4c-cdn.co.uk/out/v1/a0134f1fd5a2461b9422b574566d4442/live_uk.m3u8
#EXTINF:-1 tvg-id="S4C.uk",S4C (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:s4cpbs/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:s4cpbs/iptv_hd_abr_v1.mpd
From 1eba87f0453f5c5d572b1bf801f3fd771cd608cf Mon Sep 17 00:00:00 2001
From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com>
Date: Wed, 20 Sep 2023 22:36:34 +0100
Subject: [PATCH 24/50] Update uk_bbc.m3u
---
streams/uk_bbc.m3u | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/streams/uk_bbc.m3u b/streams/uk_bbc.m3u
index 998c27ef7..401045f86 100644
--- a/streams/uk_bbc.m3u
+++ b/streams/uk_bbc.m3u
@@ -216,4 +216,4 @@ https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:cbeebies_h
#EXTINF:-1 tvg-id="S4C.uk",S4C (1080p) [Geo-blocked]
https://live-uk.s4c-cdn.co.uk/out/v1/a0134f1fd5a2461b9422b574566d4442/live_uk.m3u8
#EXTINF:-1 tvg-id="S4C.uk",S4C (720p) [Geo-blocked]
-https://vs-cmaf-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:s4cpbs/iptv_hd_abr_v1.mpd
+https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:s4cpbs/iptv_hd_abr_v1.mpd
From d55cf32e7d22d008e0b6c6c73e770bd41b48696f Mon Sep 17 00:00:00 2001
From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com>
Date: Wed, 20 Sep 2023 22:45:54 +0100
Subject: [PATCH 25/50] Update uk_bbc.m3u
---
streams/uk_bbc.m3u | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/streams/uk_bbc.m3u b/streams/uk_bbc.m3u
index 401045f86..f14b93809 100644
--- a/streams/uk_bbc.m3u
+++ b/streams/uk_bbc.m3u
@@ -82,7 +82,7 @@ https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_so
#EXTINF:-1 tvg-id="BBCOneWales.uk",BBC One Wales (720p) [Geo-blocked]
https://vs-cmaf-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_wales_hd/pc_hd_abr_v2.mpd
#EXTINF:-1 tvg-id="BBCOneWales.uk",BBC One Wales (720p) [Geo-blocked]
-https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_wales_hd/t=3840/v=pv14/b=5070016/main.m3u8
+https://vs-hls-pushb-uk-live.akamaized.net/x=4/i=urn:bbc:pips:service:bbc_one_wales_hd/t=3840/v=pv14/b=5070016/main.m3u8
#EXTINF:-1 tvg-id="BBCOneWales.uk",BBC One Wales (540p) [Geo-blocked]
https://vs-hls-pushb-uk-live.akamaized.net/x=3/i=urn:bbc:pips:service:bbc_one_wales_hd/mobile_wifi_main_sd_abr_v2_akamai_hls_live_http.m3u8
#EXTINF:-1 tvg-id="BBCOneWest.uk",BBC One West (720p) [Geo-blocked]
From 89e081f15f68e7983ba96157d57354b1365908c8 Mon Sep 17 00:00:00 2001
From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com>
Date: Wed, 20 Sep 2023 23:11:28 +0100
Subject: [PATCH 26/50] Update uk.m3u
---
streams/uk.m3u | 2 --
1 file changed, 2 deletions(-)
diff --git a/streams/uk.m3u b/streams/uk.m3u
index 68c456f1a..f8089c678 100644
--- a/streams/uk.m3u
+++ b/streams/uk.m3u
@@ -59,8 +59,6 @@ https://ythls.onrender.com/channel/UC2ZoBzeCXrZcMz4f82eMe-g.m3u8
#EXTINF:-1 tvg-id="GarshomTV.uk",Garshom TV (360p) [Not 24/7]
https://og2qd3aal7an-hls-live.5centscdn.com/garshomtv/d0dbe915091d400bd8ee7f27f0791303.sdp/playlist.m3u8
#EXTINF:-1 tvg-id="GBNews.uk",GB News (1080p)
-https://live-gbnews-ssai.simplestreamcdn.com/v1/master/82267e84b9e5053b3fd0ade12cb1a146df74169a/gbnews-live/live.m3u8
-#EXTINF:-1 tvg-id="GBNews.uk",GB News (1080p)
https://live-gbnews.simplestreamcdn.com/live5/gbnews/bitrate1.isml/manifest.m3u8
#EXTINF:-1 tvg-id="GBNews.uk",GB News (1080p)
https://ythls.onrender.com/channel/UC0vn8ISa4LKMunLbzaXLnOQ.m3u8
From bf09ca064b8659e19f05a2739854c3d3df2f09fa Mon Sep 17 00:00:00 2001
From: CasperMcFadden95 <145611964+CasperMcFadden95@users.noreply.github.com>
Date: Wed, 20 Sep 2023 23:18:23 +0100
Subject: [PATCH 27/50] Update ae.m3u
---
streams/ae.m3u | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/streams/ae.m3u b/streams/ae.m3u
index a3abdc91a..2b483b7bc 100644
--- a/streams/ae.m3u
+++ b/streams/ae.m3u
@@ -155,7 +155,7 @@ https://weyyak-live.akamaized.net/weyyak_drama/index.m3u8
https://weyyak-live.akamaized.net/weyyak_mix/index.m3u8
#EXTINF:-1 tvg-id="WeyyakNawaem.ae",Weyyak Nawaem (720p)
https://weyyak-live.akamaized.net/weyyak_nawaem/index.m3u8
-#EXTINF:-1 tvg-id="",Yas (1080p)
+#EXTINF:-1 tvg-id="YasTV.ae",Yas TV (1080p)
https://admdn1.cdn.mangomolo.com/yastv/smil:yastv.stream.smil/playlist.m3u8
#EXTINF:-1 tvg-id="ZeeAflam.in",Zee Aflam (720p) [Not 24/7]
https://weyyak-live.akamaized.net/weyyak_zee_aflam/index.m3u8
From 859d320ba9f1c8c2138e6706c910e02677f6f527 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Thu, 21 Sep 2023 00:08:09 +0000
Subject: [PATCH 28/50] [Bot] Update /streams
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6255413179) workflow.
closes #14288
---
streams/au.m3u | 20 ++++++++++----------
streams/kr.m3u | 2 ++
streams/us.m3u | 2 +-
3 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/streams/au.m3u b/streams/au.m3u
index ca4c279e0..2d4e74e62 100644
--- a/streams/au.m3u
+++ b/streams/au.m3u
@@ -47,23 +47,23 @@ https://9now-livestreams.akamaized.net/hls/live/2008313/life-syd/master.m3u8
https://ythls.onrender.com/channel/UCtzTaKI8AkiSjyzm1_JbMUg.m3u8
#EXTINF:-1 tvg-id="GuidanceTVAustralia.au",Guidance TV Australia (720p) [Not 24/7]
https://ythls.onrender.com/channel/UC81VkX0QeICZw7o2jMwGThg.m3u8
-#EXTINF:-1 tvg-id="2GB.au",2GB Sydney (1080p)
+#EXTINF:-1 tvg-id="2GB.au",2GB Sydney (1080p)
https://2gblive.akamaized.net/hls/live/2033805/2GB/index.m3u8
-#EXTINF:-1 tvg-id="HopeChannelAustralia.au",Hope Channel Australia (1080p)
+#EXTINF:-1 tvg-id="HopeChannelAustralia.au",Hope Channel Australia (1080p)
https://videodelivery.net/9fb3596948ddf463fde0ec4b85625b24/manifest/video.m3u8
-#EXTINF:-1 tvg-id="9Rush.au",9Rush (720p) [Geo-blocked]
+#EXTINF:-1 tvg-id="9Rush.au",9Rush (720p) [Geo-blocked]
https://9now-livestreams.akamaized.net/hls/live/2010626/rush-syd/master.m3u8
-#EXTINF:-1 tvg-id="Channel9.au",Channel 9 (720p) [Geo-blocked]
+#EXTINF:-1 tvg-id="Channel9.au",Channel 9 (720p) [Geo-blocked]
https://9now-livestreams.akamaized.net/hls/live/2008322/ch9-mel/master.m3u8
-#EXTINF:-1 tvg-id="Channel7.au",Channel 7 [Geo-blocked]
+#EXTINF:-1 tvg-id="Channel7.au",Channel 7 [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/SYD1/master.m3u8
-#EXTINF:-1 tvg-id="7two.au",7two [Geo-blocked]
+#EXTINF:-1 tvg-id="7two.au",7two [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/MEL2/master.m3u8
-#EXTINF:-1 tvg-id="7mate.au",7mate [Geo-blocked]
+#EXTINF:-1 tvg-id="7mate.au",7mate [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/MEL3/master.m3u8
-#EXTINF:-1 tvg-id="7flix.au",7flix [Geo-blocked]
+#EXTINF:-1 tvg-id="7flix.au",7flix [Geo-blocked]
https://npc.cdn.7livecloud.io/hls/live/MEL6/master.m3u8
-#EXTINF:-1 tvg-id="SkyRacing1.au",Sky Racing 1 [Geo-blocked]
+#EXTINF:-1 tvg-id="SkyRacing1.au",Sky Racing 1 [Geo-blocked]
https://skylivetab-new.akamaized.net/hls/live/2038780/sky1/index.m3u8
-#EXTINF:-1 tvg-id="SkyRacing2.au",Sky Racing 2 [Geo-blocked]
+#EXTINF:-1 tvg-id="SkyRacing2.au",Sky Racing 2 [Geo-blocked]
https://skylivetab-new.akamaized.net/hls/live/2038781/sky2/index.m3u8
diff --git a/streams/kr.m3u b/streams/kr.m3u
index 7d290a601..33ccffd5f 100644
--- a/streams/kr.m3u
+++ b/streams/kr.m3u
@@ -261,3 +261,5 @@ https://ythls.onrender.com/channel/UC38IlqMxZ_YtFg3eSGmmJnQ.m3u8
https://ythls.onrender.com/channel/UCizGMtU0Lt-O9X0tLJzyZ2Q.m3u8
#EXTINF:-1 tvg-id="YTNScience.kr",YTN Science (720p)
https://ythls.onrender.com/channel/UCZdBJIbJz0P9xyFipgOj1fA.m3u8
+#EXTINF:-1 tvg-id="Tooniverse.kr",Tooniverse
+http://code.vthanhtivi.pw/getlink/jptvvn/118/playlist.m3u8
diff --git a/streams/us.m3u b/streams/us.m3u
index 133d2e63c..bfb007fc3 100644
--- a/streams/us.m3u
+++ b/streams/us.m3u
@@ -1092,7 +1092,7 @@ https://thegateway.app/YouToo/CueTones/playlist.m3u8
https://thegateway.app/YouToo/YTamerica/playlist.m3u8
#EXTINF:-1 tvg-id="DisneyChannelRussia.ru",Канал Disney (576p) [Not 24/7]
http://188.40.68.167/russia/disney/playlist.m3u8
-#EXTINF:-1 tvg-id="SUMtvLatino.us",SUMtv Latino (1080p)
+#EXTINF:-1 tvg-id="SUMtvLatino.us",SUMtv Latino (1080p)
https://bozztv.com/uni10rtmp/ssstv2-cdn/smil:ssstv2web.smil/playlist.m3u8
#EXTINF:-1 tvg-id="EVTVMiami.us",EVTV Miami (720p) [Not 24/7]
https://streannliveevtv.cachefly.net/Protected/sp=1;dirmatch=true/3be25dc13406bf70ff0208230e6fa803b88b95013fad257c025e481e2be3e214/evtv1/evtv1/playlist.m3u8
From 28361ccb4e4c0a2511df135d78df7151af611e47 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Thu, 21 Sep 2023 00:08:09 +0000
Subject: [PATCH 29/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6255413179) workflow.
---
README.md | 76 +++++++++++++++++++++++++++----------------------------
1 file changed, 38 insertions(+), 38 deletions(-)
diff --git a/README.md b/README.md
index 1514b7c01..a9a62f83a 100644
--- a/README.md
+++ b/README.md
@@ -59,35 +59,35 @@ Same thing, but split up into separate files:
Category | Channels | Playlist |
- Animation | 50 | https://iptv-org.github.io/iptv/categories/animation.m3u |
+ Animation | 51 | https://iptv-org.github.io/iptv/categories/animation.m3u |
Auto | 15 | https://iptv-org.github.io/iptv/categories/auto.m3u |
Business | 57 | https://iptv-org.github.io/iptv/categories/business.m3u |
- Classic | 55 | https://iptv-org.github.io/iptv/categories/classic.m3u |
+ Classic | 54 | https://iptv-org.github.io/iptv/categories/classic.m3u |
Comedy | 57 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
Cooking | 23 | https://iptv-org.github.io/iptv/categories/cooking.m3u |
Culture | 77 | https://iptv-org.github.io/iptv/categories/culture.m3u |
Documentary | 64 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
Education | 115 | https://iptv-org.github.io/iptv/categories/education.m3u |
- Entertainment | 355 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
+ Entertainment | 354 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
Family | 40 | https://iptv-org.github.io/iptv/categories/family.m3u |
- General | 1120 | https://iptv-org.github.io/iptv/categories/general.m3u |
+ General | 1121 | https://iptv-org.github.io/iptv/categories/general.m3u |
Kids | 183 | https://iptv-org.github.io/iptv/categories/kids.m3u |
Legislative | 167 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
- Lifestyle | 78 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
- Movies | 274 | https://iptv-org.github.io/iptv/categories/movies.m3u |
+ Lifestyle | 77 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
+ Movies | 273 | https://iptv-org.github.io/iptv/categories/movies.m3u |
Music | 484 | https://iptv-org.github.io/iptv/categories/music.m3u |
- News | 701 | https://iptv-org.github.io/iptv/categories/news.m3u |
+ News | 703 | https://iptv-org.github.io/iptv/categories/news.m3u |
Outdoor | 44 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
Relax | 16 | https://iptv-org.github.io/iptv/categories/relax.m3u |
- Religious | 438 | https://iptv-org.github.io/iptv/categories/religious.m3u |
+ Religious | 442 | https://iptv-org.github.io/iptv/categories/religious.m3u |
Science | 25 | https://iptv-org.github.io/iptv/categories/science.m3u |
- Series | 159 | https://iptv-org.github.io/iptv/categories/series.m3u |
+ Series | 158 | https://iptv-org.github.io/iptv/categories/series.m3u |
Shop | 74 | https://iptv-org.github.io/iptv/categories/shop.m3u |
- Sports | 203 | https://iptv-org.github.io/iptv/categories/sports.m3u |
+ Sports | 205 | https://iptv-org.github.io/iptv/categories/sports.m3u |
Travel | 30 | https://iptv-org.github.io/iptv/categories/travel.m3u |
Weather | 14 | https://iptv-org.github.io/iptv/categories/weather.m3u |
XXX | 46 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- Undefined | 5240 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ Undefined | 5218 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -142,18 +142,18 @@ Same thing, but split up into separate files:
Dholuo | 1 | https://iptv-org.github.io/iptv/languages/luo.m3u |
Dimili | 1 | https://iptv-org.github.io/iptv/languages/zza.m3u |
Dutch | 191 | https://iptv-org.github.io/iptv/languages/nld.m3u |
- English | 2167 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ English | 2174 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
Ewe | 1 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
Fataleka | 1 | https://iptv-org.github.io/iptv/languages/far.m3u |
Filipino | 1 | https://iptv-org.github.io/iptv/languages/fil.m3u |
Finnish | 24 | https://iptv-org.github.io/iptv/languages/fin.m3u |
- French | 385 | https://iptv-org.github.io/iptv/languages/fra.m3u |
+ French | 386 | https://iptv-org.github.io/iptv/languages/fra.m3u |
Galician | 12 | https://iptv-org.github.io/iptv/languages/glg.m3u |
Galolen | 1 | https://iptv-org.github.io/iptv/languages/gal.m3u |
Georgian | 8 | https://iptv-org.github.io/iptv/languages/kat.m3u |
- German | 279 | https://iptv-org.github.io/iptv/languages/deu.m3u |
+ German | 278 | https://iptv-org.github.io/iptv/languages/deu.m3u |
Gikuyu | 2 | https://iptv-org.github.io/iptv/languages/kik.m3u |
Goan Konkani | 1 | https://iptv-org.github.io/iptv/languages/gom.m3u |
Greek | 121 | https://iptv-org.github.io/iptv/languages/ell.m3u |
@@ -177,7 +177,7 @@ Same thing, but split up into separate files:
Kinyarwanda | 3 | https://iptv-org.github.io/iptv/languages/kin.m3u |
Kirghiz | 8 | https://iptv-org.github.io/iptv/languages/kir.m3u |
Konkani (macrolanguage) | 2 | https://iptv-org.github.io/iptv/languages/kok.m3u |
- Korean | 110 | https://iptv-org.github.io/iptv/languages/kor.m3u |
+ Korean | 111 | https://iptv-org.github.io/iptv/languages/kor.m3u |
Kurdish | 24 | https://iptv-org.github.io/iptv/languages/kur.m3u |
Lahnda | 1 | https://iptv-org.github.io/iptv/languages/lah.m3u |
Lao | 9 | https://iptv-org.github.io/iptv/languages/lao.m3u |
@@ -217,7 +217,7 @@ Same thing, but split up into separate files:
Slovak | 44 | https://iptv-org.github.io/iptv/languages/slk.m3u |
Slovenian | 16 | https://iptv-org.github.io/iptv/languages/slv.m3u |
Somali | 8 | https://iptv-org.github.io/iptv/languages/som.m3u |
- Spanish | 1846 | https://iptv-org.github.io/iptv/languages/spa.m3u |
+ Spanish | 1848 | https://iptv-org.github.io/iptv/languages/spa.m3u |
Swahili | 14 | https://iptv-org.github.io/iptv/languages/swa.m3u |
Swedish | 19 | https://iptv-org.github.io/iptv/languages/swe.m3u |
Tagalog | 14 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
@@ -238,7 +238,7 @@ Same thing, but split up into separate files:
Wolof | 2 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
Yue Chinese | 10 | https://iptv-org.github.io/iptv/languages/yue.m3u |
- Undefined | 1281 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ Undefined | 1253 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
@@ -298,8 +298,8 @@ Same thing, but split up into separate files:
Tucuman | 7 | https://iptv-org.github.io/iptv/subdivisions/ar-t.m3u |
🇦🇲 Armenia | 40 | https://iptv-org.github.io/iptv/countries/am.m3u |
🇦🇼 Aruba | 6 | https://iptv-org.github.io/iptv/countries/aw.m3u |
- 🇦🇺 Australia | 38 | https://iptv-org.github.io/iptv/countries/au.m3u |
- 🇦🇹 Austria | 48 | https://iptv-org.github.io/iptv/countries/at.m3u |
+ 🇦🇺 Australia | 51 | https://iptv-org.github.io/iptv/countries/au.m3u |
+ 🇦🇹 Austria | 47 | https://iptv-org.github.io/iptv/countries/at.m3u |
🇦🇿 Azerbaijan | 33 | https://iptv-org.github.io/iptv/countries/az.m3u |
🇧🇸 Bahamas | 7 | https://iptv-org.github.io/iptv/countries/bs.m3u |
🇧🇭 Bahrain | 38 | https://iptv-org.github.io/iptv/countries/bh.m3u |
@@ -344,7 +344,7 @@ Same thing, but split up into separate files:
🇻🇬 British Virgin Islands | 6 | https://iptv-org.github.io/iptv/countries/vg.m3u |
🇧🇳 Brunei | 31 | https://iptv-org.github.io/iptv/countries/bn.m3u |
🇧🇬 Bulgaria | 39 | https://iptv-org.github.io/iptv/countries/bg.m3u |
- 🇧🇫 Burkina Faso | 14 | https://iptv-org.github.io/iptv/countries/bf.m3u |
+ 🇧🇫 Burkina Faso | 15 | https://iptv-org.github.io/iptv/countries/bf.m3u |
🇧🇮 Burundi | 12 | https://iptv-org.github.io/iptv/countries/bi.m3u |
🇰🇭 Cambodia | 42 | https://iptv-org.github.io/iptv/countries/kh.m3u |
🇨🇲 Cameroon | 39 | https://iptv-org.github.io/iptv/countries/cm.m3u |
@@ -643,7 +643,7 @@ Same thing, but split up into separate files:
🇸🇴 Somalia | 61 | https://iptv-org.github.io/iptv/countries/so.m3u |
🇿🇦 South Africa | 36 | https://iptv-org.github.io/iptv/countries/za.m3u |
🇬🇸 South Georgia and the South Sandwich Islands | 3 | https://iptv-org.github.io/iptv/countries/gs.m3u |
- 🇰🇷 South Korea | 110 | https://iptv-org.github.io/iptv/countries/kr.m3u |
+ 🇰🇷 South Korea | 111 | https://iptv-org.github.io/iptv/countries/kr.m3u |
Busan-gwangyeoksi | 2 | https://iptv-org.github.io/iptv/subdivisions/kr-26.m3u |
Chungcheongbuk-do | 2 | https://iptv-org.github.io/iptv/subdivisions/kr-43.m3u |
Daegu-gwangyeoksi | 2 | https://iptv-org.github.io/iptv/subdivisions/kr-27.m3u |
@@ -701,7 +701,7 @@ Same thing, but split up into separate files:
🇦🇪 United Arab Emirates | 76 | https://iptv-org.github.io/iptv/countries/ae.m3u |
🇬🇧 United Kingdom | 194 | https://iptv-org.github.io/iptv/countries/uk.m3u |
Wales | 2 | https://iptv-org.github.io/iptv/subdivisions/gb-wls.m3u |
- 🇺🇸 United States | 1880 | https://iptv-org.github.io/iptv/countries/us.m3u |
+ 🇺🇸 United States | 1848 | https://iptv-org.github.io/iptv/countries/us.m3u |
Alabama | 4 | https://iptv-org.github.io/iptv/subdivisions/us-al.m3u |
Alaska | 2 | https://iptv-org.github.io/iptv/subdivisions/us-ak.m3u |
Arizona | 11 | https://iptv-org.github.io/iptv/subdivisions/us-az.m3u |
@@ -757,7 +757,7 @@ Same thing, but split up into separate files:
🇺🇿 Uzbekistan | 9 | https://iptv-org.github.io/iptv/countries/uz.m3u |
🇻🇺 Vanuatu | 6 | https://iptv-org.github.io/iptv/countries/vu.m3u |
🇻🇦 Vatican City | 19 | https://iptv-org.github.io/iptv/countries/va.m3u |
- 🇻🇪 Venezuela | 107 | https://iptv-org.github.io/iptv/countries/ve.m3u |
+ 🇻🇪 Venezuela | 108 | https://iptv-org.github.io/iptv/countries/ve.m3u |
Aragua | 2 | https://iptv-org.github.io/iptv/subdivisions/ve-d.m3u |
Lara | 1 | https://iptv-org.github.io/iptv/subdivisions/ve-k.m3u |
🇻🇳 Vietnam | 125 | https://iptv-org.github.io/iptv/countries/vn.m3u |
@@ -792,11 +792,11 @@ Same thing, but split up into separate files:
Region | Channels | Playlist |
- Africa | 423 | https://iptv-org.github.io/iptv/regions/afr.m3u |
- Americas | 3799 | https://iptv-org.github.io/iptv/regions/amer.m3u |
+ Africa | 424 | https://iptv-org.github.io/iptv/regions/afr.m3u |
+ Americas | 3767 | https://iptv-org.github.io/iptv/regions/amer.m3u |
Arab world | 417 | https://iptv-org.github.io/iptv/regions/arab.m3u |
- Asia | 2936 | https://iptv-org.github.io/iptv/regions/asia.m3u |
- Asia-Pacific | 1910 | https://iptv-org.github.io/iptv/regions/apac.m3u |
+ Asia | 2937 | https://iptv-org.github.io/iptv/regions/asia.m3u |
+ Asia-Pacific | 1924 | https://iptv-org.github.io/iptv/regions/apac.m3u |
Association of Southeast Asian Nations | 471 | https://iptv-org.github.io/iptv/regions/asean.m3u |
Benelux | 240 | https://iptv-org.github.io/iptv/regions/benelux.m3u |
Caribbean | 251 | https://iptv-org.github.io/iptv/regions/carib.m3u |
@@ -804,26 +804,26 @@ Same thing, but split up into separate files:
Central and Eastern Europe | 1020 | https://iptv-org.github.io/iptv/regions/cee.m3u |
Central Asia | 65 | https://iptv-org.github.io/iptv/regions/cas.m3u |
Commonwealth of Independent States | 461 | https://iptv-org.github.io/iptv/regions/cis.m3u |
- Europe | 3240 | https://iptv-org.github.io/iptv/regions/eur.m3u |
+ Europe | 3239 | https://iptv-org.github.io/iptv/regions/eur.m3u |
Europe, the Middle East and Africa | 4046 | https://iptv-org.github.io/iptv/regions/emea.m3u |
- Hispanic America | 1470 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
- Latin America | 1779 | https://iptv-org.github.io/iptv/regions/latam.m3u |
- Latin America and the Caribbean | 1801 | https://iptv-org.github.io/iptv/regions/lac.m3u |
+ Hispanic America | 1471 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
+ Latin America | 1780 | https://iptv-org.github.io/iptv/regions/latam.m3u |
+ Latin America and the Caribbean | 1802 | https://iptv-org.github.io/iptv/regions/lac.m3u |
Maghreb | 60 | https://iptv-org.github.io/iptv/regions/maghreb.m3u |
Middle East | 688 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
Middle East and North Africa | 739 | https://iptv-org.github.io/iptv/regions/mena.m3u |
Nordics | 96 | https://iptv-org.github.io/iptv/regions/nord.m3u |
- North America | 2611 | https://iptv-org.github.io/iptv/regions/noram.m3u |
- Northern America | 2014 | https://iptv-org.github.io/iptv/regions/nam.m3u |
+ North America | 2579 | https://iptv-org.github.io/iptv/regions/noram.m3u |
+ Northern America | 1982 | https://iptv-org.github.io/iptv/regions/nam.m3u |
Northern Europe | 125 | https://iptv-org.github.io/iptv/regions/neur.m3u |
- Oceania | 55 | https://iptv-org.github.io/iptv/regions/oce.m3u |
- South America | 1193 | https://iptv-org.github.io/iptv/regions/southam.m3u |
+ Oceania | 68 | https://iptv-org.github.io/iptv/regions/oce.m3u |
+ South America | 1194 | https://iptv-org.github.io/iptv/regions/southam.m3u |
South Asia | 593 | https://iptv-org.github.io/iptv/regions/sas.m3u |
Southeast Asia | 492 | https://iptv-org.github.io/iptv/regions/sea.m3u |
Southern Europe | 1095 | https://iptv-org.github.io/iptv/regions/ser.m3u |
- Sub-Saharan Africa | 339 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
- West Africa | 139 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
- Western Europe | 1003 | https://iptv-org.github.io/iptv/regions/wer.m3u |
+ Sub-Saharan Africa | 340 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
+ West Africa | 140 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
+ Western Europe | 1002 | https://iptv-org.github.io/iptv/regions/wer.m3u |
From 61ae9eafc83098f940524dca669ba98095abaf7c Mon Sep 17 00:00:00 2001
From: AntiPontifex
Date: Thu, 21 Sep 2023 08:57:43 -0400
Subject: [PATCH 30/50] Minor Edits
US (canelatv and cineverse)
---
streams/us_canelatv.m3u | 12 ++++++------
streams/us_cineversetv.m3u | 12 ++++++------
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/streams/us_canelatv.m3u b/streams/us_canelatv.m3u
index a2995bb52..3597cfeaf 100644
--- a/streams/us_canelatv.m3u
+++ b/streams/us_canelatv.m3u
@@ -11,19 +11,19 @@ https://stream.ads.ottera.tv/playlist.m3u8?network_id=654
https://stream.ads.ottera.tv/playlist.m3u8?network_id=2548
#EXTINF:-1 tvg-id="",Canela Telenovelas
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1152
-#EXTINF:-1 tvg-id="",CanelaTV
+#EXTINF:-1 tvg-id="CanelaTV.us",CanelaTV
https://stream.ads.ottera.tv/playlist.m3u8?network_id=119
#EXTINF:-1 tvg-id="",CHILL LATINO
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1085
-#EXTINF:-1 tvg-id="",Cine Romantico
+#EXTINF:-1 tvg-id="CineRomantico.us",Cine Romantico
https://stream.ads.ottera.tv/playlist.m3u8?network_id=656
#EXTINF:-1 tvg-id="",Combate Global
https://stream.ads.ottera.tv/playlist.m3u8?network_id=960
-#EXTINF:-1 tvg-id="",El Rey
+#EXTINF:-1 tvg-id="ElRey.us",El Rey
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1544
#EXTINF:-1 tvg-id="",El Talisman
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1079
-#EXTINF:-1 tvg-id="",Flou Cine
+#EXTINF:-1 tvg-id="FlouCine.us",Flou Cine
https://amg01768-flou-flou-canelatv-yri41.amagi.tv/playlist/amg01768-flou-flou-canelatv/playlist.m3u8
#EXTINF:-1 tvg-id="",Flow Caribe
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1083
@@ -35,7 +35,7 @@ https://stream.ads.ottera.tv/playlist.m3u8?network_id=3010
https://stream.ads.ottera.tv/playlist.m3u8?network_id=3366
#EXTINF:-1 tvg-id="",Novelas Turcas
https://stream.ads.ottera.tv/playlist.m3u8?network_id=5088
-#EXTINF:-1 tvg-id="",Novelisima
+#EXTINF:-1 tvg-id="Novelisima.us",Novelisima
https://stream.ads.ottera.tv/playlist.m3u8?network_id=2380
#EXTINF:-1 tvg-id="",Planeta de Aventuras
https://stream.ads.ottera.tv/playlist.m3u8?network_id=4311
@@ -47,7 +47,7 @@ https://stream.ads.ottera.tv/playlist.m3u8?network_id=1545
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1084
#EXTINF:-1 tvg-id="",Ritmos Inolvidables
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1081
-#EXTINF:-1 tvg-id="",Sony Canal Novelas
+#EXTINF:-1 tvg-id="SonyCanalNovelas.us",Sony Canal Novelas
https://a89829b8dca2471ab52ea9a57bc28a35.mediatailor.us-east-1.amazonaws.com/v1/master/0fb304b2320b25f067414d481a779b77db81760d/CanelaTV_SonyCanalNovelas/playlist.m3u8
#EXTINF:-1 tvg-id="",Tierra De Amor Y Venganza
https://stream.ads.ottera.tv/playlist.m3u8?network_id=1080
diff --git a/streams/us_cineversetv.m3u b/streams/us_cineversetv.m3u
index 8ab86478a..24762e492 100644
--- a/streams/us_cineversetv.m3u
+++ b/streams/us_cineversetv.m3u
@@ -1,5 +1,5 @@
#EXTM3U
-#EXTINF:-1 tvg-id="",ALF
+#EXTINF:-1 tvg-id="ALF.us",ALF
https://97bd5884f7a348aa93b50e48d031be0e.mediatailor.us-east-1.amazonaws.com/v1/master/f4e8c53a8367a5b58e20ce054ea3ce25a3e904d3/ONO_ALF/playlist.m3u8
#EXTINF:-1 tvg-id="AsianCrush.us",AsianCrush
https://amg01201-cinedigmenterta-asiancrush-cineverse-x701o.amagi.tv/playlist/amg01201-cinedigmenterta-asiancrush-cineverse/playlist.m3u8
@@ -13,9 +13,9 @@ https://amg01201-cinedigmenterta-crimehunters-cineverse-cnqvb.amagi.tv/playlist/
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-docurama-cineverse/playlist.m3u8
#EXTINF:-1 tvg-id="DoveChannel.us",Dove Channel
https://amg01201-cinedigmenterta-dove-cineverse-1fck5.amagi.tv/playlist/amg01201-cinedigmenterta-dove-cineverse/playlist.m3u8
-#EXTINF:-1 tvg-id="",El Rey Network
+#EXTINF:-1 tvg-id="ElRey.us",El Rey Network
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-elrey-cineverse/playlist.m3u8
-#EXTINF:-1 tvg-id="",Farscape
+#EXTINF:-1 tvg-id="Farscape.us",Farscape
https://a8d3367c658948afb1901efdd9babe5b.mediatailor.us-east-1.amazonaws.com/v1/master/f4e8c53a8367a5b58e20ce054ea3ce25a3e904d3/ONO_Farscape/playlist.m3u8
#EXTINF:-1 tvg-id="GustoTV.us",GustoTV
https://amg01077-gustoworldwidem-gustotv-cineverse-h7u1r.amagi.tv/playlist/amg01077-gustoworldwidem-gustotv-cineverse/playlist.m3u8
@@ -39,19 +39,19 @@ https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-retrocrush-lg
https://b1570a6919f94bcfa2f061daee64c70f.mediatailor.us-east-1.amazonaws.com/v1/master/04fd913bb278d8775298c26fdca9d9841f37601f/ONO_ScreamFactoryTV/playlist.m3u8
#EXTINF:-1 tvg-id="ShoutFactoryTV.us",Shout Factory TV
https://amg00163-shoutfactory-shoutfactory-dmr-maeqc.amagi.tv/playlist/amg00163-shoutfactory-shoutfactory-dmr/playlist.m3u8
-#EXTINF:-1 tvg-id="",Shout! Cult
+#EXTINF:-1 tvg-id="ShoutCult.us",Shout! Cult
https://837dd61e3fed471fbbe33391a57920d4.mediatailor.us-east-1.amazonaws.com/v1/master/f4e8c53a8367a5b58e20ce054ea3ce25a3e904d3/ONO_ShoutCult/playlist.m3u8
#EXTINF:-1 tvg-id="SoReal.us",So...Real
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-soreal-cineverse/playlist.m3u8
#EXTINF:-1 tvg-id="TheBobRossChannel.us",The Bob Ross Channel
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-bobross-cineverse/playlist.m3u8
-#EXTINF:-1 tvg-id="",The Bob Ross Channel Spanish
+#EXTINF:-1 tvg-id="TheBobRossChannelenEspanol.us",The Bob Ross Channel Spanish
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-bobrossspanish-lgus/playlist.m3u8
#EXTINF:-1 tvg-id="TheCarolBurnettShow.us",The Carol Burnett Show
https://amg00163-shoutfactory-carolburnett-dmr-cpk9r.amagi.tv/playlist/amg00163-shoutfactory-carolburnett-dmr/playlist.m3u8
#EXTINF:-1 tvg-id="TheCountryNetwork.us",The Country Network
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-countrynetwork-cineverse/playlist.m3u8
-#EXTINF:-1 tvg-id="",The Elvis Channel
+#EXTINF:-1 tvg-id="TheElvisPresleyChannel.us",The Elvis Presley Channel
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-elvis-cineverse/playlist.m3u8
#EXTINF:-1 tvg-id="TheFilmDetective.us",The Film Detective
https://cdn-uw2-prod.tsv2.amagi.tv/linear/amg01201-cinedigmenterta-filmdetective-cineverse/playlist.m3u8
From a59236fb44b932fa63bb438ae274ba220e09f20b Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Fri, 22 Sep 2023 00:08:18 +0000
Subject: [PATCH 31/50] [Bot] Update /streams
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6268385994) workflow.
closes #14296
---
streams/mc.m3u | 2 ++
1 file changed, 2 insertions(+)
diff --git a/streams/mc.m3u b/streams/mc.m3u
index 242e17e49..eedd55969 100644
--- a/streams/mc.m3u
+++ b/streams/mc.m3u
@@ -3,3 +3,5 @@
https://webtvmonacoinfo.mc/live/prod_720/index.m3u8
#EXTINF:-1 tvg-id="SuperyachtTV.mc",Superyacht TV (1080p)
https://sy.wns.live/hls/stream.m3u8
+#EXTINF:-1 tvg-id="TVMonaco.mc",TV Monaco (1080p)
+https://production-fast-mcrtv.content.okast.tv/channels/2116dc08-1959-465d-857f-3619daefb66b/b702b2b9-aebd-436c-be69-2118f56f3d86/2024/media.m3u8
From cc71f62267dbb151d4eed9df3be9987cdb72423c Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Fri, 22 Sep 2023 00:08:18 +0000
Subject: [PATCH 32/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6268385994) workflow.
---
README.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index a9a62f83a..85985f1ce 100644
--- a/README.md
+++ b/README.md
@@ -87,7 +87,7 @@ Same thing, but split up into separate files:
Travel | 30 | https://iptv-org.github.io/iptv/categories/travel.m3u |
Weather | 14 | https://iptv-org.github.io/iptv/categories/weather.m3u |
XXX | 46 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- Undefined | 5218 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ Undefined | 5219 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -149,7 +149,7 @@ Same thing, but split up into separate files:
Fataleka | 1 | https://iptv-org.github.io/iptv/languages/far.m3u |
Filipino | 1 | https://iptv-org.github.io/iptv/languages/fil.m3u |
Finnish | 24 | https://iptv-org.github.io/iptv/languages/fin.m3u |
- French | 386 | https://iptv-org.github.io/iptv/languages/fra.m3u |
+ French | 387 | https://iptv-org.github.io/iptv/languages/fra.m3u |
Galician | 12 | https://iptv-org.github.io/iptv/languages/glg.m3u |
Galolen | 1 | https://iptv-org.github.io/iptv/languages/gal.m3u |
Georgian | 8 | https://iptv-org.github.io/iptv/languages/kat.m3u |
@@ -433,7 +433,7 @@ Same thing, but split up into separate files:
🇫🇮 Finland | 40 | https://iptv-org.github.io/iptv/countries/fi.m3u |
Keski-Suomi | 1 | https://iptv-org.github.io/iptv/subdivisions/fi-08.m3u |
Pohjanmaa | 3 | https://iptv-org.github.io/iptv/subdivisions/fi-12.m3u |
- 🇫🇷 France | 264 | https://iptv-org.github.io/iptv/countries/fr.m3u |
+ 🇫🇷 France | 265 | https://iptv-org.github.io/iptv/countries/fr.m3u |
🇬🇫 French Guiana | 7 | https://iptv-org.github.io/iptv/countries/gf.m3u |
🇵🇫 French Polynesia | 7 | https://iptv-org.github.io/iptv/countries/pf.m3u |
🇹🇫 French Southern Territories | 12 | https://iptv-org.github.io/iptv/countries/tf.m3u |
@@ -557,7 +557,7 @@ Same thing, but split up into separate files:
Zacatecas | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-zac.m3u |
🇫🇲 Micronesia | 6 | https://iptv-org.github.io/iptv/countries/fm.m3u |
🇲🇩 Moldova | 30 | https://iptv-org.github.io/iptv/countries/md.m3u |
- 🇲🇨 Monaco | 12 | https://iptv-org.github.io/iptv/countries/mc.m3u |
+ 🇲🇨 Monaco | 13 | https://iptv-org.github.io/iptv/countries/mc.m3u |
🇲🇳 Mongolia | 26 | https://iptv-org.github.io/iptv/countries/mn.m3u |
🇲🇪 Montenegro | 18 | https://iptv-org.github.io/iptv/countries/me.m3u |
Ulcinj | 1 | https://iptv-org.github.io/iptv/subdivisions/me-20.m3u |
@@ -804,8 +804,8 @@ Same thing, but split up into separate files:
Central and Eastern Europe | 1020 | https://iptv-org.github.io/iptv/regions/cee.m3u |
Central Asia | 65 | https://iptv-org.github.io/iptv/regions/cas.m3u |
Commonwealth of Independent States | 461 | https://iptv-org.github.io/iptv/regions/cis.m3u |
- Europe | 3239 | https://iptv-org.github.io/iptv/regions/eur.m3u |
- Europe, the Middle East and Africa | 4046 | https://iptv-org.github.io/iptv/regions/emea.m3u |
+ Europe | 3240 | https://iptv-org.github.io/iptv/regions/eur.m3u |
+ Europe, the Middle East and Africa | 4047 | https://iptv-org.github.io/iptv/regions/emea.m3u |
Hispanic America | 1471 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
Latin America | 1780 | https://iptv-org.github.io/iptv/regions/latam.m3u |
Latin America and the Caribbean | 1802 | https://iptv-org.github.io/iptv/regions/lac.m3u |
@@ -823,7 +823,7 @@ Same thing, but split up into separate files:
Southern Europe | 1095 | https://iptv-org.github.io/iptv/regions/ser.m3u |
Sub-Saharan Africa | 340 | https://iptv-org.github.io/iptv/regions/ssa.m3u |
West Africa | 140 | https://iptv-org.github.io/iptv/regions/wafr.m3u |
- Western Europe | 1002 | https://iptv-org.github.io/iptv/regions/wer.m3u |
+ Western Europe | 1003 | https://iptv-org.github.io/iptv/regions/wer.m3u |
From f45fc84ef1f2d7c40bcec4166daf1f7dac1499c7 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 05:15:57 +0300
Subject: [PATCH 33/50] Update tests data
---
tests/__data__/input/issues/broken_stream.js | 2 +-
tests/__data__/input/issues/streams_add.js | 2 +-
tests/__data__/input/issues/streams_add_approved.js | 2 +-
tests/__data__/input/issues/streams_edit.js | 2 +-
tests/__data__/input/issues/streams_edit_approved.js | 2 +-
tests/__data__/input/issues/streams_remove_approved.js | 2 +-
6 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/tests/__data__/input/issues/broken_stream.js b/tests/__data__/input/issues/broken_stream.js
index 286f29504..68c205433 100644
--- a/tests/__data__/input/issues/broken_stream.js
+++ b/tests/__data__/input/issues/broken_stream.js
@@ -1,4 +1,4 @@
-export default [
+module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
diff --git a/tests/__data__/input/issues/streams_add.js b/tests/__data__/input/issues/streams_add.js
index c225c57de..4d0426e32 100644
--- a/tests/__data__/input/issues/streams_add.js
+++ b/tests/__data__/input/issues/streams_add.js
@@ -1,4 +1,4 @@
-export default [
+module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
diff --git a/tests/__data__/input/issues/streams_add_approved.js b/tests/__data__/input/issues/streams_add_approved.js
index 5c0f12b79..0d2b9bf96 100644
--- a/tests/__data__/input/issues/streams_add_approved.js
+++ b/tests/__data__/input/issues/streams_add_approved.js
@@ -1,4 +1,4 @@
-export default [
+module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
diff --git a/tests/__data__/input/issues/streams_edit.js b/tests/__data__/input/issues/streams_edit.js
index 238003c32..ed531ae01 100644
--- a/tests/__data__/input/issues/streams_edit.js
+++ b/tests/__data__/input/issues/streams_edit.js
@@ -1,4 +1,4 @@
-export default [
+module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
diff --git a/tests/__data__/input/issues/streams_edit_approved.js b/tests/__data__/input/issues/streams_edit_approved.js
index bf434d422..8e679a127 100644
--- a/tests/__data__/input/issues/streams_edit_approved.js
+++ b/tests/__data__/input/issues/streams_edit_approved.js
@@ -1,4 +1,4 @@
-export default [
+module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
diff --git a/tests/__data__/input/issues/streams_remove_approved.js b/tests/__data__/input/issues/streams_remove_approved.js
index 92cbc441c..3877ab97f 100644
--- a/tests/__data__/input/issues/streams_remove_approved.js
+++ b/tests/__data__/input/issues/streams_remove_approved.js
@@ -1,4 +1,4 @@
-export default [
+module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14151',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
From 03208a262adbee5fe23f0896e84eb83bd56cf12c Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 05:16:46 +0300
Subject: [PATCH 34/50] Update tsconfig.json
---
tsconfig.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tsconfig.json b/tsconfig.json
index ccc6f3ff7..56347ece7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,9 +1,9 @@
{
"compilerOptions": {
"strict": true,
- "target": "es2022",
- "module": "NodeNext",
- "moduleResolution": "NodeNext",
+ "target": "es2020",
+ "module": "nodeNext",
+ "moduleResolution": "nodeNext",
"typeRoots": [
"./scripts/types",
"./node_modules/@types"
From 4c92b4ecb1d2b0e40b8e0290b35aed62ed192bb4 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 05:17:22 +0300
Subject: [PATCH 35/50] Install @freearhey/core
---
package-lock.json | 61 ++++++-
package.json | 6 +-
scripts/commands/api/generate.ts | 3 +-
scripts/commands/playlist/format.ts | 3 +-
scripts/commands/playlist/generate.ts | 7 +-
scripts/commands/playlist/update.ts | 3 +-
scripts/commands/playlist/validate.ts | 3 +-
scripts/commands/readme/update.ts | 3 +-
scripts/commands/report/create.ts | 3 +-
scripts/core/collection.ts | 175 -------------------
scripts/core/dictionary.ts | 31 ----
scripts/core/file.ts | 31 ----
scripts/core/index.ts | 6 -
scripts/core/issueLoader.ts | 16 +-
scripts/core/issueParser.ts | 2 +-
scripts/core/logger.ts | 9 -
scripts/core/playlistParser.ts | 4 +-
scripts/core/storage.ts | 84 ---------
scripts/core/url.ts | 20 ---
scripts/generators/categoriesGenerator.ts | 2 +-
scripts/generators/countriesGenerator.ts | 2 +-
scripts/generators/indexCategoryGenerator.ts | 2 +-
scripts/generators/indexCountryGenerator.ts | 2 +-
scripts/generators/indexGenerator.ts | 2 +-
scripts/generators/indexLanguageGenerator.ts | 2 +-
scripts/generators/indexNsfwGenerator.ts | 2 +-
scripts/generators/indexRegionGenerator.ts | 2 +-
scripts/generators/languagesGenerator.ts | 2 +-
scripts/generators/regionsGenerator.ts | 2 +-
scripts/models/channel.ts | 2 +-
scripts/models/issue.ts | 2 +-
scripts/models/playlist.ts | 2 +-
scripts/models/region.ts | 2 +-
scripts/models/stream.ts | 8 +-
scripts/tables/categoryTable.ts | 7 +-
scripts/tables/countryTable.ts | 7 +-
scripts/tables/languageTable.ts | 7 +-
scripts/tables/regionTable.ts | 7 +-
yarn.lock | 27 ++-
39 files changed, 141 insertions(+), 420 deletions(-)
delete mode 100644 scripts/core/collection.ts
delete mode 100644 scripts/core/dictionary.ts
delete mode 100644 scripts/core/file.ts
delete mode 100644 scripts/core/logger.ts
delete mode 100644 scripts/core/storage.ts
delete mode 100644 scripts/core/url.ts
diff --git a/package-lock.json b/package-lock.json
index e16a1924b..ef1492447 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,7 @@
"name": "iptv",
"license": "MIT",
"dependencies": {
+ "@freearhey/core": "^0.1.2",
"@octokit/core": "^4.2.1",
"@octokit/plugin-paginate-rest": "^7.1.2",
"@octokit/plugin-rest-endpoint-methods": "^7.1.3",
@@ -675,6 +676,32 @@
"node": ">=12"
}
},
+ "node_modules/@freearhey/core": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.1.2.tgz",
+ "integrity": "sha512-o6FaLHiKED0JkUXxqHcUUM2P+Jd4kvE96p0MZlLjhCFAPii/lVr5mTwrHehKMzve/r7AbDUX7kyNLNG8Qec6uw==",
+ "dependencies": {
+ "@types/fs-extra": "^11.0.2",
+ "@types/lodash": "^4.14.198",
+ "fs-extra": "^11.1.1",
+ "glob": "^10.3.4",
+ "lodash": "^4.17.21",
+ "natural-orderby": "^3.0.2",
+ "normalize-url": "^6.1.0",
+ "signale": "^1.4.0"
+ }
+ },
+ "node_modules/@freearhey/core/node_modules/normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -1430,9 +1457,9 @@
}
},
"node_modules/@types/fs-extra": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz",
- "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==",
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz",
+ "integrity": "sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==",
"dependencies": {
"@types/jsonfile": "*",
"@types/node": "*"
@@ -5563,6 +5590,28 @@
"@jridgewell/trace-mapping": "0.3.9"
}
},
+ "@freearhey/core": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.1.2.tgz",
+ "integrity": "sha512-o6FaLHiKED0JkUXxqHcUUM2P+Jd4kvE96p0MZlLjhCFAPii/lVr5mTwrHehKMzve/r7AbDUX7kyNLNG8Qec6uw==",
+ "requires": {
+ "@types/fs-extra": "^11.0.2",
+ "@types/lodash": "^4.14.198",
+ "fs-extra": "^11.1.1",
+ "glob": "^10.3.4",
+ "lodash": "^4.17.21",
+ "natural-orderby": "^3.0.2",
+ "normalize-url": "^6.1.0",
+ "signale": "^1.4.0"
+ },
+ "dependencies": {
+ "normalize-url": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
+ "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
+ }
+ }
+ },
"@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -6201,9 +6250,9 @@
}
},
"@types/fs-extra": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz",
- "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==",
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz",
+ "integrity": "sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==",
"requires": {
"@types/jsonfile": "*",
"@types/node": "*"
diff --git a/package.json b/package.json
index 55ec7891f..ddeae6942 100644
--- a/package.json
+++ b/package.json
@@ -25,9 +25,9 @@
},
"jest": {
"transform": {
- "^.*test.(ts|js)$": "ts-jest"
+ "^.+\\.ts$": "ts-jest"
},
- "testRegex": "tests/(.*?/)?.*test.(ts|js)$",
+ "testRegex": "tests/(.*?/)?.*test.ts$",
"setupFilesAfterEnv": [
"jest-expect-message"
]
@@ -40,8 +40,8 @@
"author": "Arhey",
"private": true,
"license": "MIT",
- "type": "module",
"dependencies": {
+ "@freearhey/core": "^0.1.2",
"@octokit/core": "^4.2.1",
"@octokit/plugin-paginate-rest": "^7.1.2",
"@octokit/plugin-rest-endpoint-methods": "^7.1.3",
diff --git a/scripts/commands/api/generate.ts b/scripts/commands/api/generate.ts
index 0c0b033d7..f1acd6a8c 100644
--- a/scripts/commands/api/generate.ts
+++ b/scripts/commands/api/generate.ts
@@ -1,5 +1,6 @@
+import { Logger, Storage } from '@freearhey/core'
import { API_DIR, STREAMS_DIR } from '../../constants'
-import { Logger, PlaylistParser, Storage } from '../../core'
+import { PlaylistParser } from '../../core'
import { Stream } from '../../models'
async function main() {
diff --git a/scripts/commands/playlist/format.ts b/scripts/commands/playlist/format.ts
index 862b90e36..d532db607 100644
--- a/scripts/commands/playlist/format.ts
+++ b/scripts/commands/playlist/format.ts
@@ -1,5 +1,6 @@
+import { Logger, Storage, Collection } from '@freearhey/core'
import { STREAMS_DIR, DATA_DIR } from '../../constants'
-import { Storage, Logger, PlaylistParser, Collection } from '../../core'
+import { PlaylistParser } from '../../core'
import { Stream, Playlist, Channel } from '../../models'
import { program } from 'commander'
diff --git a/scripts/commands/playlist/generate.ts b/scripts/commands/playlist/generate.ts
index 44a75be23..7ca6d4a80 100644
--- a/scripts/commands/playlist/generate.ts
+++ b/scripts/commands/playlist/generate.ts
@@ -1,7 +1,6 @@
-import { File, PlaylistParser, Storage } from '../../core'
+import { Logger, Storage, Collection, File } from '@freearhey/core'
+import { PlaylistParser } from '../../core'
import { Stream, Category, Channel, Language, Country, Region, Subdivision } from '../../models'
-import { Collection } from '../../core/collection'
-import { Logger } from '../../core/logger'
import _ from 'lodash'
import {
CategoriesGenerator,
@@ -124,7 +123,7 @@ async function loadStreams({
if (channel.logo) stream.logo = channel.logo
} else {
const file = new File(stream.filepath)
- const [_, countryCode] = file.getFilename().match(/^([a-z]{2})(_|$)/) || [null, null]
+ const [_, countryCode] = file.name().match(/^([a-z]{2})(_|$)/) || [null, null]
const defaultBroadcastArea = countryCode ? [`c/${countryCode.toUpperCase()}`] : []
stream.broadcastArea = new Collection(defaultBroadcastArea)
diff --git a/scripts/commands/playlist/update.ts b/scripts/commands/playlist/update.ts
index 2eab9107d..b9814f463 100644
--- a/scripts/commands/playlist/update.ts
+++ b/scripts/commands/playlist/update.ts
@@ -1,5 +1,6 @@
+import { Logger, Storage, Collection, Dictionary } from '@freearhey/core'
import { DATA_DIR, STREAMS_DIR } from '../../constants'
-import { Storage, Logger, Collection, Dictionary, IssueLoader, PlaylistParser } from '../../core'
+import { IssueLoader, PlaylistParser } from '../../core'
import { Stream, Playlist, Channel, Issue } from '../../models'
let processedIssues = new Collection()
diff --git a/scripts/commands/playlist/validate.ts b/scripts/commands/playlist/validate.ts
index 03295a47c..b128058cf 100644
--- a/scripts/commands/playlist/validate.ts
+++ b/scripts/commands/playlist/validate.ts
@@ -1,4 +1,5 @@
-import { Logger, Storage, PlaylistParser, Collection, File, Dictionary } from '../../core'
+import { Logger, Storage, Collection, Dictionary, File } from '@freearhey/core'
+import { PlaylistParser } from '../../core'
import { Channel, Stream, Blocked } from '../../models'
import { program } from 'commander'
import chalk from 'chalk'
diff --git a/scripts/commands/readme/update.ts b/scripts/commands/readme/update.ts
index 5dc06ae98..7af55feff 100644
--- a/scripts/commands/readme/update.ts
+++ b/scripts/commands/readme/update.ts
@@ -1,5 +1,6 @@
+import { Logger } from '@freearhey/core'
import { CategoryTable, CountryTable, LanguageTable, RegionTable } from '../../tables'
-import { Logger, Markdown } from '../../core'
+import { Markdown } from '../../core'
import { README_DIR } from '../../constants'
import path from 'path'
diff --git a/scripts/commands/report/create.ts b/scripts/commands/report/create.ts
index 4327a4a59..030a10d60 100644
--- a/scripts/commands/report/create.ts
+++ b/scripts/commands/report/create.ts
@@ -1,5 +1,6 @@
+import { Logger, Storage, Collection, Dictionary } from '@freearhey/core'
import { DATA_DIR, STREAMS_DIR } from '../../constants'
-import { Collection, Dictionary, IssueLoader, Storage, Logger, PlaylistParser } from '../../core'
+import { IssueLoader, PlaylistParser } from '../../core'
import { Blocked, Channel, Issue, Stream } from '../../models'
async function main() {
diff --git a/scripts/core/collection.ts b/scripts/core/collection.ts
deleted file mode 100644
index 92836dcb5..000000000
--- a/scripts/core/collection.ts
+++ /dev/null
@@ -1,175 +0,0 @@
-import _ from 'lodash'
-import { orderBy, Order } from 'natural-orderby'
-import { Dictionary } from './'
-
-type Iteratee = (value: any, value2?: any) => void
-
-export class Collection {
- _items: any[]
-
- constructor(items?: any[]) {
- this._items = Array.isArray(items) ? items : []
- }
-
- first(predicate?: Iteratee) {
- if (predicate) {
- return this._items.find(predicate)
- }
-
- return this._items[0]
- }
-
- last(predicate?: Iteratee) {
- if (predicate) {
- return _.findLast(this._items, predicate)
- }
-
- return this._items[this._items.length - 1]
- }
-
- find(iteratee: Iteratee): Collection {
- const found = this._items.filter(iteratee)
-
- return new Collection(found)
- }
-
- add(data: any) {
- this._items.push(data)
-
- return this
- }
-
- intersects(collection: Collection): boolean {
- return _.intersection(this._items, collection.all()).length > 0
- }
-
- count() {
- return this._items.length
- }
-
- join(separator: string) {
- return this._items.join(separator)
- }
-
- indexOf(value: string) {
- return this._items.indexOf(value)
- }
-
- push(data: any) {
- this.add(data)
- }
-
- uniq() {
- const items = _.uniq(this._items)
-
- return new Collection(items)
- }
-
- reduce(iteratee: Iteratee, accumulator: any) {
- const items = _.reduce(this._items, iteratee, accumulator)
-
- return new Collection(items)
- }
-
- filter(iteratee: Iteratee) {
- const items = _.filter(this._items, iteratee)
-
- return new Collection(items)
- }
-
- forEach(iteratee: Iteratee) {
- for (let item of this._items) {
- iteratee(item)
- }
-
- return this
- }
-
- remove(iteratee: Iteratee): Collection {
- const removed = _.remove(this._items, iteratee)
-
- return new Collection(removed)
- }
-
- concat(collection: Collection) {
- const items = this._items.concat(collection._items)
-
- return new Collection(items)
- }
-
- isEmpty(): boolean {
- return this._items.length === 0
- }
-
- notEmpty(): boolean {
- return this._items.length > 0
- }
-
- sort() {
- const items = this._items.sort()
-
- return new Collection(items)
- }
-
- orderBy(iteratees: Iteratee | Iteratee[], orders?: Order | Order[]) {
- const items = orderBy(this._items, iteratees, orders)
-
- return new Collection(items)
- }
-
- keyBy(iteratee: Iteratee) {
- const items = _.keyBy(this._items, iteratee)
-
- return new Dictionary(items)
- }
-
- empty() {
- return this._items.length === 0
- }
-
- includes(value: any) {
- if (typeof value === 'function') {
- const found = this._items.find(value)
-
- return !!found
- }
-
- return this._items.includes(value)
- }
-
- missing(value: any) {
- if (typeof value === 'function') {
- const found = this._items.find(value)
-
- return !found
- }
-
- return !this._items.includes(value)
- }
-
- uniqBy(iteratee: Iteratee) {
- const items = _.uniqBy(this._items, iteratee)
-
- return new Collection(items)
- }
-
- groupBy(iteratee: Iteratee) {
- const object = _.groupBy(this._items, iteratee)
-
- return new Dictionary(object)
- }
-
- map(iteratee: Iteratee) {
- const items = this._items.map(iteratee)
-
- return new Collection(items)
- }
-
- all() {
- return this._items
- }
-
- toJSON() {
- return JSON.stringify(this._items)
- }
-}
diff --git a/scripts/core/dictionary.ts b/scripts/core/dictionary.ts
deleted file mode 100644
index 0058f58e4..000000000
--- a/scripts/core/dictionary.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-export class Dictionary {
- dict: any
-
- constructor(dict?: any) {
- this.dict = dict || {}
- }
-
- set(key: string, value: any) {
- this.dict[key] = value
- }
-
- has(key: string): boolean {
- return !!this.dict[key]
- }
-
- missing(key: string): boolean {
- return !this.dict[key]
- }
-
- get(key: string): any {
- return this.dict[key] ? this.dict[key] : undefined
- }
-
- keys(): string[] {
- return Object.keys(this.dict)
- }
-
- data() {
- return this.dict
- }
-}
diff --git a/scripts/core/file.ts b/scripts/core/file.ts
deleted file mode 100644
index 54c88fe64..000000000
--- a/scripts/core/file.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import * as path from 'path'
-
-export class File {
- filepath: string
- content: string
-
- constructor(filepath: string, content?: string) {
- this.filepath = path.normalize(filepath)
- this.content = content || ''
- }
-
- getFilename() {
- return path.parse(this.filepath).name
- }
-
- dirname() {
- return path.dirname(this.filepath)
- }
-
- basename() {
- return path.basename(this.filepath)
- }
-
- append(data: string) {
- this.content = this.content + data
- }
-
- extension() {
- return this.filepath.split('.').pop()
- }
-}
diff --git a/scripts/core/index.ts b/scripts/core/index.ts
index 75090eca2..a1419eb00 100644
--- a/scripts/core/index.ts
+++ b/scripts/core/index.ts
@@ -1,13 +1,7 @@
-export * from './logger'
export * from './playlistParser'
export * from './numberParser'
export * from './logParser'
export * from './markdown'
-export * from './file'
-export * from './collection'
-export * from './dictionary'
-export * from './storage'
-export * from './url'
export * from './issueLoader'
export * from './issueParser'
export * from './htmlTable'
diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts
index 9e0ecfaec..84f1177a2 100644
--- a/scripts/core/issueLoader.ts
+++ b/scripts/core/issueLoader.ts
@@ -1,7 +1,8 @@
+import { Collection } from '@freearhey/core'
import { restEndpointMethods } from '@octokit/plugin-rest-endpoint-methods'
import { paginateRest } from '@octokit/plugin-paginate-rest'
import { Octokit } from '@octokit/core'
-import { Collection, IssueParser } from './'
+import { IssueParser } from './'
import { TESTING, OWNER, REPO } from '../constants'
const CustomOctokit = Octokit.plugin(paginateRest, restEndpointMethods)
@@ -14,23 +15,22 @@ export class IssueLoader {
if (TESTING) {
switch (labels) {
case 'streams:add':
- issues = (await import('../../tests/__data__/input/issues/streams_add')).default
+ issues = require('../../tests/__data__/input/issues/streams_add.js')
break
case 'streams:edit':
- issues = (await import('../../tests/__data__/input/issues/streams_edit')).default
+ issues = require('../../tests/__data__/input/issues/streams_edit.js')
break
case 'broken stream':
- issues = (await import('../../tests/__data__/input/issues/broken_stream')).default
+ issues = require('../../tests/__data__/input/issues/broken_stream.js')
break
case 'streams:add,approved':
- issues = (await import('../../tests/__data__/input/issues/streams_add_approved')).default
+ issues = require('../../tests/__data__/input/issues/streams_add_approved.js')
break
case 'streams:edit,approved':
- issues = (await import('../../tests/__data__/input/issues/streams_edit_approved')).default
+ issues = require('../../tests/__data__/input/issues/streams_edit_approved.js')
break
case 'streams:remove,approved':
- issues = (await import('../../tests/__data__/input/issues/streams_remove_approved'))
- .default
+ issues = require('../../tests/__data__/input/issues/streams_remove_approved.js')
break
}
} else {
diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts
index 0114e703f..fc545ad6c 100644
--- a/scripts/core/issueParser.ts
+++ b/scripts/core/issueParser.ts
@@ -1,4 +1,4 @@
-import { Dictionary } from './'
+import { Dictionary } from '@freearhey/core'
import { Issue } from '../models'
import _ from 'lodash'
diff --git a/scripts/core/logger.ts b/scripts/core/logger.ts
deleted file mode 100644
index 0305ddd00..000000000
--- a/scripts/core/logger.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import signale from 'signale'
-
-const { Signale } = signale
-
-export class Logger extends Signale {
- constructor(options?: any) {
- super(options)
- }
-}
diff --git a/scripts/core/playlistParser.ts b/scripts/core/playlistParser.ts
index 7a96dacc7..776eb0cfd 100644
--- a/scripts/core/playlistParser.ts
+++ b/scripts/core/playlistParser.ts
@@ -1,6 +1,6 @@
+import { Collection, Storage } from '@freearhey/core'
import parser from 'iptv-playlist-parser'
import { Stream } from '../models'
-import { Collection, Storage } from './'
import path from 'path'
import { STREAMS_DIR } from '../constants'
@@ -26,7 +26,7 @@ export class PlaylistParser {
async parseFile(filepath: string): Promise {
const streams = new Collection()
- const content = await this.storage.read(filepath)
+ const content = await this.storage.load(filepath)
const parsed: parser.Playlist = parser.parse(content)
parsed.items.forEach((item: parser.PlaylistItem) => {
diff --git a/scripts/core/storage.ts b/scripts/core/storage.ts
deleted file mode 100644
index 81f2ede4f..000000000
--- a/scripts/core/storage.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-import { File, Collection } from './'
-import * as path from 'path'
-import fs from 'fs-extra'
-import { glob } from 'glob'
-
-export class Storage {
- rootDir: string
-
- constructor(rootDir?: string) {
- this.rootDir = path.normalize(rootDir || './')
- }
-
- async list(pattern: string): Promise {
- const files = await glob(pattern, {
- cwd: this.rootDir
- })
-
- return files.sort()
- }
-
- async createDir(dir: string): Promise {
- if (await fs.exists(dir)) return
-
- await fs.mkdir(dir, { recursive: true }).catch(console.error)
- }
-
- async load(filepath: string): Promise {
- return this.read(filepath)
- }
-
- async read(filepath: string): Promise {
- const absFilepath = path.join(this.rootDir, filepath)
-
- return await fs.readFile(absFilepath, { encoding: 'utf8' })
- }
-
- async json(filepath: string): Promise {
- const absFilepath = path.join(this.rootDir, filepath)
- const content = await fs.readFile(absFilepath, { encoding: 'utf8' })
-
- return JSON.parse(content)
- }
-
- async exists(filepath: string): Promise {
- const absFilepath = path.join(this.rootDir, filepath)
-
- return await fs.exists(absFilepath)
- }
-
- async write(filepath: string, data: string = ''): Promise {
- const absFilepath = path.join(this.rootDir, filepath)
- const dir = path.dirname(absFilepath)
-
- await this.createDir(dir)
- await fs.writeFile(absFilepath, data, { encoding: 'utf8', flag: 'w' })
- }
-
- async append(filepath: string, data: string = ''): Promise {
- const absFilepath = path.join(this.rootDir, filepath)
-
- await fs.appendFile(absFilepath, data, { encoding: 'utf8', flag: 'w' })
- }
-
- async clear(filepath: string): Promise {
- await this.write(filepath)
- }
-
- async createStream(filepath: string): Promise {
- const absFilepath = path.join(this.rootDir, filepath)
- const dir = path.dirname(absFilepath)
-
- await this.createDir(dir)
-
- return fs.createWriteStream(absFilepath) as unknown as NodeJS.WriteStream
- }
-
- async save(filepath: string, content: string): Promise {
- await this.write(filepath, content)
- }
-
- async saveFile(file: File): Promise {
- await this.write(file.filepath, file.content)
- }
-}
diff --git a/scripts/core/url.ts b/scripts/core/url.ts
deleted file mode 100644
index df6ff4dd8..000000000
--- a/scripts/core/url.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import normalizeUrl from 'normalize-url'
-
-export class URL {
- url: string
-
- constructor(url: string) {
- this.url = url
- }
-
- normalize(): URL {
- const normalized = normalizeUrl(this.url, { stripWWW: false })
- this.url = decodeURIComponent(normalized).replace(/\s/g, '+')
-
- return this
- }
-
- toString(): string {
- return this.url
- }
-}
diff --git a/scripts/generators/categoriesGenerator.ts b/scripts/generators/categoriesGenerator.ts
index 48a99107e..cf768b982 100644
--- a/scripts/generators/categoriesGenerator.ts
+++ b/scripts/generators/categoriesGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Stream, Category, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/countriesGenerator.ts b/scripts/generators/countriesGenerator.ts
index bd683760a..158bf031c 100644
--- a/scripts/generators/countriesGenerator.ts
+++ b/scripts/generators/countriesGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Country, Region, Subdivision, Stream, Playlist } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/indexCategoryGenerator.ts b/scripts/generators/indexCategoryGenerator.ts
index 733eb9186..fb4647e3a 100644
--- a/scripts/generators/indexCategoryGenerator.ts
+++ b/scripts/generators/indexCategoryGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Stream, Playlist, Category } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/indexCountryGenerator.ts b/scripts/generators/indexCountryGenerator.ts
index f48945047..72974e6d8 100644
--- a/scripts/generators/indexCountryGenerator.ts
+++ b/scripts/generators/indexCountryGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Stream, Playlist, Country, Subdivision, Region } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/indexGenerator.ts b/scripts/generators/indexGenerator.ts
index 9a8754db9..96784cc6e 100644
--- a/scripts/generators/indexGenerator.ts
+++ b/scripts/generators/indexGenerator.ts
@@ -1,4 +1,4 @@
-import { Collection, Logger, Storage } from '../core'
+import { Collection, Logger, Storage } from '@freearhey/core'
import { Stream, Playlist } from '../models'
import { Generator } from './generator'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/indexLanguageGenerator.ts b/scripts/generators/indexLanguageGenerator.ts
index 692e896dd..07f3d74aa 100644
--- a/scripts/generators/indexLanguageGenerator.ts
+++ b/scripts/generators/indexLanguageGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Stream, Playlist, Language } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/indexNsfwGenerator.ts b/scripts/generators/indexNsfwGenerator.ts
index 500d51c9a..c0b80b9a0 100644
--- a/scripts/generators/indexNsfwGenerator.ts
+++ b/scripts/generators/indexNsfwGenerator.ts
@@ -1,4 +1,4 @@
-import { Collection, Logger, Storage } from '../core'
+import { Collection, Logger, Storage } from '@freearhey/core'
import { Stream, Playlist } from '../models'
import { Generator } from './generator'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/indexRegionGenerator.ts b/scripts/generators/indexRegionGenerator.ts
index ebebb85e6..9f2096866 100644
--- a/scripts/generators/indexRegionGenerator.ts
+++ b/scripts/generators/indexRegionGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Stream, Playlist, Region } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/languagesGenerator.ts b/scripts/generators/languagesGenerator.ts
index 728807e9a..5a158a761 100644
--- a/scripts/generators/languagesGenerator.ts
+++ b/scripts/generators/languagesGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Playlist, Language, Stream } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/generators/regionsGenerator.ts b/scripts/generators/regionsGenerator.ts
index d2325c3a6..f6918951c 100644
--- a/scripts/generators/regionsGenerator.ts
+++ b/scripts/generators/regionsGenerator.ts
@@ -1,5 +1,5 @@
import { Generator } from './generator'
-import { Collection, Storage, Logger } from '../core'
+import { Collection, Storage, Logger } from '@freearhey/core'
import { Playlist, Subdivision, Region } from '../models'
import { PUBLIC_DIR } from '../constants'
diff --git a/scripts/models/channel.ts b/scripts/models/channel.ts
index 668b72914..dd7a7a1d9 100644
--- a/scripts/models/channel.ts
+++ b/scripts/models/channel.ts
@@ -1,4 +1,4 @@
-import { Collection } from '../core'
+import { Collection } from '@freearhey/core'
type ChannelProps = {
id: string
diff --git a/scripts/models/issue.ts b/scripts/models/issue.ts
index 622981d82..fecb1fde1 100644
--- a/scripts/models/issue.ts
+++ b/scripts/models/issue.ts
@@ -1,4 +1,4 @@
-import { Dictionary } from '../core'
+import { Dictionary } from '@freearhey/core'
type IssueProps = {
number: number
diff --git a/scripts/models/playlist.ts b/scripts/models/playlist.ts
index b9b5c60ac..6266282cc 100644
--- a/scripts/models/playlist.ts
+++ b/scripts/models/playlist.ts
@@ -1,4 +1,4 @@
-import { Collection } from '../core'
+import { Collection } from '@freearhey/core'
import { Stream } from '../models'
type PlaylistOptions = {
diff --git a/scripts/models/region.ts b/scripts/models/region.ts
index 6db1c3a43..72b30c192 100644
--- a/scripts/models/region.ts
+++ b/scripts/models/region.ts
@@ -1,4 +1,4 @@
-import { Collection } from '../core'
+import { Collection } from '@freearhey/core'
type RegionProps = {
code: string
diff --git a/scripts/models/stream.ts b/scripts/models/stream.ts
index b6d3e20c3..37559f931 100644
--- a/scripts/models/stream.ts
+++ b/scripts/models/stream.ts
@@ -1,4 +1,4 @@
-import { URL, Collection } from '../core'
+import { URL, Collection } from '@freearhey/core'
import { Category, Language } from './index'
type StreamProps = {
@@ -86,7 +86,7 @@ export class Stream {
}
noCategories(): boolean {
- return this.categories.empty()
+ return this.categories.isEmpty()
}
hasCategory(category: Category): boolean {
@@ -94,7 +94,7 @@ export class Stream {
}
noLanguages(): boolean {
- return this.languages.empty()
+ return this.languages.isEmpty()
}
hasLanguage(language: Language): boolean {
@@ -102,7 +102,7 @@ export class Stream {
}
noBroadcastArea(): boolean {
- return this.broadcastArea.empty()
+ return this.broadcastArea.isEmpty()
}
isInternational(): boolean {
diff --git a/scripts/tables/categoryTable.ts b/scripts/tables/categoryTable.ts
index 57f11c15b..a3fb49f14 100644
--- a/scripts/tables/categoryTable.ts
+++ b/scripts/tables/categoryTable.ts
@@ -1,4 +1,5 @@
-import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core'
+import { Storage, Collection, File } from '@freearhey/core'
+import { HTMLTable, LogParser, LogItem } from '../core'
import { Category } from '../models'
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
import { Table } from './table'
@@ -13,7 +14,7 @@ export class CategoryTable implements Table {
const parser = new LogParser()
const logsStorage = new Storage(LOGS_DIR)
- const generatorsLog = await logsStorage.read('generators.log')
+ const generatorsLog = await logsStorage.load('generators.log')
let data = new Collection()
parser
@@ -21,7 +22,7 @@ export class CategoryTable implements Table {
.filter((logItem: LogItem) => logItem.filepath.includes('categories/'))
.forEach((logItem: LogItem) => {
const file = new File(logItem.filepath)
- const categoryId = file.getFilename()
+ const categoryId = file.name()
const category: Category = categories.first(
(category: Category) => category.id === categoryId
)
diff --git a/scripts/tables/countryTable.ts b/scripts/tables/countryTable.ts
index c78a23eaa..c85a59a37 100644
--- a/scripts/tables/countryTable.ts
+++ b/scripts/tables/countryTable.ts
@@ -1,4 +1,5 @@
-import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core'
+import { Storage, Collection, File } from '@freearhey/core'
+import { HTMLTable, LogParser, LogItem } from '../core'
import { Country, Subdivision } from '../models'
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
import { Table } from './table'
@@ -17,7 +18,7 @@ export class CountryTable implements Table {
const parser = new LogParser()
const logsStorage = new Storage(LOGS_DIR)
- const generatorsLog = await logsStorage.read('generators.log')
+ const generatorsLog = await logsStorage.load('generators.log')
let data = new Collection()
parser
@@ -28,7 +29,7 @@ export class CountryTable implements Table {
)
.forEach((logItem: LogItem) => {
const file = new File(logItem.filepath)
- const code = file.getFilename().toUpperCase()
+ const code = file.name().toUpperCase()
const [countryCode, subdivisionCode] = code.split('-') || ['', '']
if (subdivisionCode) {
diff --git a/scripts/tables/languageTable.ts b/scripts/tables/languageTable.ts
index 2b298b180..f0b54d242 100644
--- a/scripts/tables/languageTable.ts
+++ b/scripts/tables/languageTable.ts
@@ -1,4 +1,5 @@
-import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core'
+import { Storage, Collection, File } from '@freearhey/core'
+import { HTMLTable, LogParser, LogItem } from '../core'
import { Language } from '../models'
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
import { Table } from './table'
@@ -13,7 +14,7 @@ export class LanguageTable implements Table {
const parser = new LogParser()
const logsStorage = new Storage(LOGS_DIR)
- const generatorsLog = await logsStorage.read('generators.log')
+ const generatorsLog = await logsStorage.load('generators.log')
let data = new Collection()
parser
@@ -21,7 +22,7 @@ export class LanguageTable implements Table {
.filter((logItem: LogItem) => logItem.filepath.includes('languages/'))
.forEach((logItem: LogItem) => {
const file = new File(logItem.filepath)
- const languageCode = file.getFilename()
+ const languageCode = file.name()
const language: Language = languages.first(
(language: Language) => language.code === languageCode
)
diff --git a/scripts/tables/regionTable.ts b/scripts/tables/regionTable.ts
index ee29f4088..60a6e5ff7 100644
--- a/scripts/tables/regionTable.ts
+++ b/scripts/tables/regionTable.ts
@@ -1,4 +1,5 @@
-import { Storage, HTMLTable, Collection, LogParser, LogItem, File } from '../core'
+import { Storage, Collection, File } from '@freearhey/core'
+import { HTMLTable, LogParser, LogItem } from '../core'
import { Region } from '../models'
import { DATA_DIR, LOGS_DIR, README_DIR } from '../constants'
import { Table } from './table'
@@ -13,7 +14,7 @@ export class RegionTable implements Table {
const parser = new LogParser()
const logsStorage = new Storage(LOGS_DIR)
- const generatorsLog = await logsStorage.read('generators.log')
+ const generatorsLog = await logsStorage.load('generators.log')
let data = new Collection()
parser
@@ -21,7 +22,7 @@ export class RegionTable implements Table {
.filter((logItem: LogItem) => logItem.filepath.includes('regions/'))
.forEach((logItem: LogItem) => {
const file = new File(logItem.filepath)
- const regionCode = file.getFilename().toUpperCase()
+ const regionCode = file.name().toUpperCase()
const region: Region = regions.first((region: Region) => region.code === regionCode)
if (region) {
diff --git a/yarn.lock b/yarn.lock
index 79504afd3..e85067f6a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -301,6 +301,20 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
+"@freearhey/core@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.1.2.tgz"
+ integrity sha512-o6FaLHiKED0JkUXxqHcUUM2P+Jd4kvE96p0MZlLjhCFAPii/lVr5mTwrHehKMzve/r7AbDUX7kyNLNG8Qec6uw==
+ dependencies:
+ "@types/fs-extra" "^11.0.2"
+ "@types/lodash" "^4.14.198"
+ fs-extra "^11.1.1"
+ glob "^10.3.4"
+ lodash "^4.17.21"
+ natural-orderby "^3.0.2"
+ normalize-url "^6.1.0"
+ signale "^1.4.0"
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
@@ -742,10 +756,10 @@
dependencies:
"@babel/types" "^7.20.7"
-"@types/fs-extra@^11.0.1":
- version "11.0.1"
- resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz"
- integrity sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==
+"@types/fs-extra@^11.0.1", "@types/fs-extra@^11.0.2":
+ version "11.0.2"
+ resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz"
+ integrity sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==
dependencies:
"@types/jsonfile" "*"
"@types/node" "*"
@@ -2340,6 +2354,11 @@ normalize-path@^3.0.0:
resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+normalize-url@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz"
+ integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
normalize-url@^7.2.0:
version "7.2.0"
resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-7.2.0.tgz"
From 477147fb530825fc142baa9b687a1de12e91c7b9 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 06:21:32 +0300
Subject: [PATCH 36/50] Install eslint
---
.eslintrc.json | 38 +
package-lock.json | 2235 +++++++++++++++++++++++++++++++++++++++++++--
package.json | 6 +
yarn.lock | 633 ++++++++++++-
4 files changed, 2820 insertions(+), 92 deletions(-)
create mode 100644 .eslintrc.json
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 000000000..21dfb44b9
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,38 @@
+{
+ "env": {
+ "browser": true,
+ "es2021": true
+ },
+ "extends": [
+ "eslint:recommended",
+ "plugin:@typescript-eslint/recommended"
+ ],
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "ecmaVersion": "latest",
+ "sourceType": "module"
+ },
+ "plugins": [
+ "@typescript-eslint"
+ ],
+ "rules": {
+ "no-case-declarations": "off",
+ "indent": [
+ "error",
+ 2,
+ { "SwitchCase": 1 }
+ ],
+ "linebreak-style": [
+ "error",
+ "unix"
+ ],
+ "quotes": [
+ "error",
+ "single"
+ ],
+ "semi": [
+ "error",
+ "never"
+ ]
+ }
+}
diff --git a/package-lock.json b/package-lock.json
index ef1492447..de69f1752 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34,6 +34,20 @@
"transliteration": "^2.3.5",
"ts-jest": "^29.1.1",
"typescript": "^5.2.2"
+ },
+ "devDependencies": {
+ "@typescript-eslint/eslint-plugin": "^6.7.2",
+ "@typescript-eslint/parser": "^6.7.2",
+ "eslint": "^8.49.0"
+ }
+ },
+ "node_modules/@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
}
},
"node_modules/@ampproject/remapping": {
@@ -676,6 +690,107 @@
"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",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz",
+ "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
+ "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "13.22.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+ "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
+ "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
"node_modules/@freearhey/core": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.1.2.tgz",
@@ -702,6 +817,39 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
+ "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -1172,6 +1320,41 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/@octokit/auth-token": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz",
@@ -1522,6 +1705,12 @@
"jest-expect-message": "*"
}
},
+ "node_modules/@types/json-schema": {
+ "version": "7.0.13",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz",
+ "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==",
+ "dev": true
+ },
"node_modules/@types/jsonfile": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz",
@@ -1545,6 +1734,12 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz",
"integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA=="
},
+ "node_modules/@types/semver": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz",
+ "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==",
+ "dev": true
+ },
"node_modules/@types/signale": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz",
@@ -1571,12 +1766,295 @@
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
"integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
},
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz",
+ "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "6.7.2",
+ "@typescript-eslint/type-utils": "6.7.2",
+ "@typescript-eslint/utils": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz",
+ "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "6.7.2",
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/typescript-estree": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz",
+ "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz",
+ "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "6.7.2",
+ "@typescript-eslint/utils": "6.7.2",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz",
+ "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==",
+ "dev": true,
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz",
+ "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz",
+ "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.7.2",
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/typescript-estree": "6.7.2",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz",
+ "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "6.7.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "optional": true,
- "peer": true,
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "devOptional": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1584,6 +2062,31 @@
"node": ">=0.4.0"
}
},
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -1859,7 +2362,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "peer": true,
"engines": {
"node": ">=6"
}
@@ -2017,10 +2519,9 @@
}
},
"node_modules/debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "peer": true,
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dependencies": {
"ms": "2.1.2"
},
@@ -2047,6 +2548,12 @@
}
}
},
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
"node_modules/deepmerge": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
@@ -2088,6 +2595,30 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -2150,6 +2681,244 @@
"node": ">=8"
}
},
+ "node_modules/eslint": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
+ "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.49.0",
+ "@humanwhocodes/config-array": "^0.11.11",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.22.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+ "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint/node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
@@ -2163,6 +2932,48 @@
"node": ">=4"
}
},
+ "node_modules/esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -2210,11 +3021,81 @@
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-glob/node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
"node_modules/fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
@@ -2243,6 +3124,18 @@
"node": ">=0.8.0"
}
},
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
"node_modules/filename-reserved-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
@@ -2306,6 +3199,26 @@
"node": ">=8"
}
},
+ "node_modules/flat-cache": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
+ "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.2.7",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
+ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "dev": true
+ },
"node_modules/foreground-child": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
@@ -2489,6 +3402,39 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-parent/node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-parent/node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/glob/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -2567,6 +3513,12 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
"integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
},
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
"node_modules/has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -2602,6 +3554,40 @@
"node": ">=10.17.0"
}
},
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/import-fresh/node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -2625,7 +3611,6 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "peer": true,
"engines": {
"node": ">=0.8.19"
}
@@ -2717,7 +3702,16 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"engines": {
- "node": ">=0.12.0"
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
}
},
"node_modules/is-plain-object": {
@@ -3611,6 +4605,12 @@
"node": ">=4"
}
},
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -3622,6 +4622,18 @@
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"peer": true
},
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -3652,6 +4664,15 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/keyv": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
+ "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+ "dev": true,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -3670,6 +4691,19 @@
"node": ">=6"
}
},
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -3731,6 +4765,12 @@
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
},
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -3830,6 +4870,15 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"peer": true
},
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -3873,14 +4922,12 @@
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "peer": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "peer": true
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
},
"node_modules/natural-orderby": {
"version": "3.0.2",
@@ -4003,6 +5050,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "dependencies": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -4036,6 +5100,18 @@
"node": ">=6"
}
},
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -4107,6 +5183,15 @@
"node": "14 || >=16.14"
}
},
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -4244,6 +5329,15 @@
"node": ">=8"
}
},
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/pretty-format": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz",
@@ -4281,6 +5375,15 @@
"node": ">= 6"
}
},
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/pure-rand": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
@@ -4306,6 +5409,26 @@
"teleport": ">=0.2.0"
}
},
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
"node_modules/react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
@@ -4366,6 +5489,74 @@
"node": ">=10"
}
},
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
"node_modules/safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -4617,7 +5808,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "peer": true,
"engines": {
"node": ">=8"
},
@@ -4701,6 +5891,12 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -4799,6 +5995,18 @@
"node": ">=0.8.0"
}
},
+ "node_modules/ts-api-utils": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "dev": true,
+ "engines": {
+ "node": ">=16.13.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.2.0"
+ }
+ },
"node_modules/ts-jest": {
"version": "29.1.1",
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz",
@@ -4917,6 +6125,18 @@
"node": ">=0.4.0"
}
},
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
"node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -4963,6 +6183,15 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
"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",
@@ -5103,7 +6332,6 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "peer": true,
"engines": {
"node": ">=10"
},
@@ -5113,6 +6341,12 @@
}
},
"dependencies": {
+ "@aashutoshrathi/word-wrap": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
+ "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
+ "dev": true
+ },
"@ampproject/remapping": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz",
@@ -5590,6 +6824,76 @@
"@jridgewell/trace-mapping": "0.3.9"
}
},
+ "@eslint-community/eslint-utils": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
+ "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@eslint-community/regexpp": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz",
+ "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==",
+ "dev": true
+ },
+ "@eslint/eslintrc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
+ "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "globals": {
+ "version": "13.22.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+ "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ }
+ }
+ },
+ "@eslint/js": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz",
+ "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==",
+ "dev": true
+ },
"@freearhey/core": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.1.2.tgz",
@@ -5612,6 +6916,29 @@
}
}
},
+ "@humanwhocodes/config-array": {
+ "version": "0.11.11",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
+ "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.5"
+ }
+ },
+ "@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
"@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -5984,6 +7311,32 @@
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
"@octokit/auth-token": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz",
@@ -6314,62 +7667,260 @@
"jest-expect-message": "*"
}
},
- "@types/jsonfile": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz",
- "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==",
+ "@types/json-schema": {
+ "version": "7.0.13",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz",
+ "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==",
+ "dev": true
+ },
+ "@types/jsonfile": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz",
+ "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/lodash": {
+ "version": "4.14.198",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz",
+ "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg=="
+ },
+ "@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="
+ },
+ "@types/node": {
+ "version": "17.0.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz",
+ "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA=="
+ },
+ "@types/semver": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz",
+ "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==",
+ "dev": true
+ },
+ "@types/signale": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz",
+ "integrity": "sha512-VYy4VL64gA4uyUIYVj4tiGFF0VpdnRbJeqNENKGX42toNiTvt83rRzxdr0XK4DR3V01zPM0JQNIsL+IwWWfhsQ==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/stack-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
+ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw=="
+ },
+ "@types/yargs": {
+ "version": "17.0.24",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
+ "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz",
+ "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "6.7.2",
+ "@typescript-eslint/type-utils": "6.7.2",
+ "@typescript-eslint/utils": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz",
+ "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "6.7.2",
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/typescript-estree": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz",
+ "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz",
+ "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "6.7.2",
+ "@typescript-eslint/utils": "6.7.2",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.0.1"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz",
+ "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz",
+ "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/visitor-keys": "6.7.2",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz",
+ "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==",
+ "dev": true,
"requires": {
- "@types/node": "*"
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.7.2",
+ "@typescript-eslint/types": "6.7.2",
+ "@typescript-eslint/typescript-estree": "6.7.2",
+ "semver": "^7.5.4"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
- "@types/lodash": {
- "version": "4.14.198",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz",
- "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg=="
- },
- "@types/minimatch": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
- "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA=="
- },
- "@types/node": {
- "version": "17.0.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz",
- "integrity": "sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA=="
- },
- "@types/signale": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz",
- "integrity": "sha512-VYy4VL64gA4uyUIYVj4tiGFF0VpdnRbJeqNENKGX42toNiTvt83rRzxdr0XK4DR3V01zPM0JQNIsL+IwWWfhsQ==",
+ "@typescript-eslint/visitor-keys": {
+ "version": "6.7.2",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz",
+ "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==",
+ "dev": true,
"requires": {
- "@types/node": "*"
+ "@typescript-eslint/types": "6.7.2",
+ "eslint-visitor-keys": "^3.4.1"
}
},
- "@types/stack-utils": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz",
- "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw=="
+ "acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "devOptional": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
},
- "@types/yargs": {
- "version": "17.0.24",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz",
- "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==",
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
"requires": {
- "@types/yargs-parser": "*"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
}
},
- "@types/yargs-parser": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
- "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
- },
- "acorn": {
- "version": "8.7.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
- "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==",
- "optional": true,
- "peer": true
- },
"ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -6582,8 +8133,7 @@
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "peer": true
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
},
"camelcase": {
"version": "5.3.1",
@@ -6690,10 +8240,9 @@
}
},
"debug": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
- "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
- "peer": true,
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"requires": {
"ms": "2.1.2"
}
@@ -6705,6 +8254,12 @@
"peer": true,
"requires": {}
},
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
"deepmerge": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
@@ -6734,6 +8289,24 @@
"resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
"integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="
},
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
"eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -6786,12 +8359,204 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="
},
+ "eslint": {
+ "version": "8.49.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz",
+ "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.2",
+ "@eslint/js": "8.49.0",
+ "@humanwhocodes/config-array": "^0.11.11",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "globals": {
+ "version": "13.22.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz",
+ "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ }
+ },
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"peer": true
},
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
"execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -6827,11 +8592,71 @@
"jest-util": "^29.6.3"
}
},
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
+ "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ }
+ }
+ },
"fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
"fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
@@ -6856,6 +8681,15 @@
}
}
},
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
"filename-reserved-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
@@ -6898,6 +8732,23 @@
"path-exists": "^4.0.0"
}
},
+ "flat-cache": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz",
+ "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.2.7",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
+ "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "dev": true
+ },
"foreground-child": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
@@ -7046,6 +8897,32 @@
}
}
},
+ "glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ },
+ "dependencies": {
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ }
+ }
+ },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -7089,6 +8966,12 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
"integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
},
+ "graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true
+ },
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
@@ -7115,6 +8998,30 @@
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"peer": true
},
+ "ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ }
+ }
+ },
"import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -7128,8 +9035,7 @@
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "peer": true
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
},
"inflight": {
"version": "1.0.6",
@@ -7200,6 +9106,12 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
@@ -7873,6 +9785,12 @@
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"peer": true
},
+ "json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true
+ },
"json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
@@ -7884,6 +9802,18 @@
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"peer": true
},
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
"json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -7905,6 +9835,15 @@
}
}
},
+ "keyv": {
+ "version": "4.5.3",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz",
+ "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==",
+ "dev": true,
+ "requires": {
+ "json-buffer": "3.0.1"
+ }
+ },
"kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -7917,6 +9856,16 @@
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"peer": true
},
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
"lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -7968,6 +9917,12 @@
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
},
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
"lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -8042,6 +9997,12 @@
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"peer": true
},
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
"micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -8073,14 +10034,12 @@
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "peer": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "peer": true
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
},
"natural-orderby": {
"version": "3.0.2",
@@ -8170,6 +10129,20 @@
"mimic-fn": "^2.1.0"
}
},
+ "optionator": {
+ "version": "0.9.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
+ "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+ "dev": true,
+ "requires": {
+ "@aashutoshrathi/word-wrap": "^1.2.3",
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0"
+ }
+ },
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -8191,6 +10164,15 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -8240,6 +10222,12 @@
}
}
},
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
"picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -8337,6 +10325,12 @@
"find-up": "^4.0.0"
}
},
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
"pretty-format": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz",
@@ -8364,6 +10358,12 @@
"sisteransi": "^1.0.5"
}
},
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true
+ },
"pure-rand": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz",
@@ -8375,6 +10375,12 @@
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
"integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
},
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
"react-is": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
@@ -8417,6 +10423,46 @@
"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"peer": true
},
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -8610,8 +10656,7 @@
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "peer": true
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
},
"strip-outer": {
"version": "1.0.1",
@@ -8669,6 +10714,12 @@
}
}
},
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
"tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -8743,6 +10794,13 @@
}
}
},
+ "ts-api-utils": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
+ "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "dev": true,
+ "requires": {}
+ },
"ts-jest": {
"version": "29.1.1",
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz",
@@ -8804,6 +10862,15 @@
}
}
},
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
"type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
@@ -8831,6 +10898,15 @@
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
},
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
"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",
@@ -8938,8 +11014,7 @@
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "peer": true
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
}
}
}
diff --git a/package.json b/package.json
index ddeae6942..fdef5ed7e 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,7 @@
"update": "npm run api:load && npm run playlist:generate && npm run api:generate && npm run readme:update",
"deploy": "npm run playlist:deploy && npm run api:deploy",
"report": "npm run api:load && npm run report:create",
+ "lint": "npx eslint ./scripts/**/*.ts ./tests/**/*.ts",
"test": "jest --runInBand",
"ts-node": "node --no-warnings=ExperimentalWarning --experimental-specifier-resolution=node --loader ts-node/esm"
},
@@ -68,5 +69,10 @@
"transliteration": "^2.3.5",
"ts-jest": "^29.1.1",
"typescript": "^5.2.2"
+ },
+ "devDependencies": {
+ "@typescript-eslint/eslint-plugin": "^6.7.2",
+ "@typescript-eslint/parser": "^6.7.2",
+ "eslint": "^8.49.0"
}
}
diff --git a/yarn.lock b/yarn.lock
index e85067f6a..7fa70ae1b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
# yarn lockfile v1
+"@aashutoshrathi/word-wrap@^1.2.3":
+ version "1.2.6"
+ resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz"
+ integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
+
"@ampproject/remapping@^2.0.0":
version "2.1.1"
resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.1.tgz"
@@ -301,6 +306,38 @@
dependencies:
"@jridgewell/trace-mapping" "0.3.9"
+"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
+ version "4.4.0"
+ resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz"
+ integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
+ dependencies:
+ eslint-visitor-keys "^3.3.0"
+
+"@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1":
+ version "4.8.1"
+ resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz"
+ integrity sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==
+
+"@eslint/eslintrc@^2.1.2":
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz"
+ integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@eslint/js@8.49.0":
+ version "8.49.0"
+ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz"
+ integrity sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==
+
"@freearhey/core@^0.1.2":
version "0.1.2"
resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.1.2.tgz"
@@ -315,6 +352,25 @@
normalize-url "^6.1.0"
signale "^1.4.0"
+"@humanwhocodes/config-array@^0.11.11":
+ version "0.11.11"
+ resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz"
+ integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.1"
+ debug "^4.1.1"
+ minimatch "^3.0.5"
+
+"@humanwhocodes/module-importer@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz"
+ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
+
+"@humanwhocodes/object-schema@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz"
+ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
"@isaacs/cliui@^8.0.2":
version "8.0.2"
resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz"
@@ -569,6 +625,27 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@nodelib/fs.scandir@2.1.5":
+ version "2.1.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz"
+ integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
+ dependencies:
+ "@nodelib/fs.stat" "2.0.5"
+ run-parallel "^1.1.9"
+
+"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
+ integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
+
+"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
+ version "1.2.8"
+ resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz"
+ integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
+ dependencies:
+ "@nodelib/fs.scandir" "2.1.5"
+ fastq "^1.6.0"
+
"@octokit/auth-token@^3.0.0":
version "3.0.4"
resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz"
@@ -813,6 +890,11 @@
expect "^29.0.0"
pretty-format "^29.0.0"
+"@types/json-schema@^7.0.12":
+ version "7.0.13"
+ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz"
+ integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==
+
"@types/jsonfile@*":
version "6.1.1"
resolved "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz"
@@ -835,6 +917,11 @@
resolved "https://registry.npmjs.org/@types/node/-/node-17.0.18.tgz"
integrity sha512-eKj4f/BsN/qcculZiRSujogjvp5O/k4lOW5m35NopjZM/QwLOR075a8pJW5hD+Rtdm2DaCVPENS6KtSQnUD6BA==
+"@types/semver@^7.5.0":
+ version "7.5.2"
+ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz"
+ integrity sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==
+
"@types/signale@^1.4.4":
version "1.4.4"
resolved "https://registry.npmjs.org/@types/signale/-/signale-1.4.4.tgz"
@@ -859,15 +946,115 @@
dependencies:
"@types/yargs-parser" "*"
+"@typescript-eslint/eslint-plugin@^6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz"
+ integrity sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==
+ dependencies:
+ "@eslint-community/regexpp" "^4.5.1"
+ "@typescript-eslint/scope-manager" "6.7.2"
+ "@typescript-eslint/type-utils" "6.7.2"
+ "@typescript-eslint/utils" "6.7.2"
+ "@typescript-eslint/visitor-keys" "6.7.2"
+ debug "^4.3.4"
+ graphemer "^1.4.0"
+ ignore "^5.2.4"
+ natural-compare "^1.4.0"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha", "@typescript-eslint/parser@^6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz"
+ integrity sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==
+ dependencies:
+ "@typescript-eslint/scope-manager" "6.7.2"
+ "@typescript-eslint/types" "6.7.2"
+ "@typescript-eslint/typescript-estree" "6.7.2"
+ "@typescript-eslint/visitor-keys" "6.7.2"
+ debug "^4.3.4"
+
+"@typescript-eslint/scope-manager@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz"
+ integrity sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==
+ dependencies:
+ "@typescript-eslint/types" "6.7.2"
+ "@typescript-eslint/visitor-keys" "6.7.2"
+
+"@typescript-eslint/type-utils@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz"
+ integrity sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==
+ dependencies:
+ "@typescript-eslint/typescript-estree" "6.7.2"
+ "@typescript-eslint/utils" "6.7.2"
+ debug "^4.3.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/types@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz"
+ integrity sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==
+
+"@typescript-eslint/typescript-estree@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz"
+ integrity sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==
+ dependencies:
+ "@typescript-eslint/types" "6.7.2"
+ "@typescript-eslint/visitor-keys" "6.7.2"
+ debug "^4.3.4"
+ globby "^11.1.0"
+ is-glob "^4.0.3"
+ semver "^7.5.4"
+ ts-api-utils "^1.0.1"
+
+"@typescript-eslint/utils@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz"
+ integrity sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.4.0"
+ "@types/json-schema" "^7.0.12"
+ "@types/semver" "^7.5.0"
+ "@typescript-eslint/scope-manager" "6.7.2"
+ "@typescript-eslint/types" "6.7.2"
+ "@typescript-eslint/typescript-estree" "6.7.2"
+ semver "^7.5.4"
+
+"@typescript-eslint/visitor-keys@6.7.2":
+ version "6.7.2"
+ resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz"
+ integrity sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==
+ dependencies:
+ "@typescript-eslint/types" "6.7.2"
+ eslint-visitor-keys "^3.4.1"
+
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
acorn-walk@^8.1.1:
version "8.2.0"
resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
-acorn@^8.4.1:
- version "8.7.0"
- resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz"
- integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0:
+ version "8.10.0"
+ resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz"
+ integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+
+ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
ansi-escapes@^4.2.1:
version "4.3.2"
@@ -930,6 +1117,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz"
@@ -937,6 +1129,11 @@ array-union@^1.0.1:
dependencies:
array-uniq "^1.0.1"
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
array-uniq@^1.0.1:
version "1.0.3"
resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz"
@@ -1215,7 +1412,7 @@ create-require@^1.1.0:
resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
-cross-spawn@^7.0.0, cross-spawn@^7.0.3:
+cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1224,10 +1421,10 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3:
shebang-command "^2.0.0"
which "^2.0.1"
-debug@^4.1.0, debug@^4.1.1:
- version "4.3.3"
- resolved "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz"
- integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
+debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
+ version "4.3.4"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
dependencies:
ms "2.1.2"
@@ -1236,6 +1433,11 @@ dedent@^1.0.0:
resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz"
integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==
+deep-is@^0.1.3:
+ version "0.1.4"
+ resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
+ integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
deepmerge@^4.2.2:
version "4.3.1"
resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz"
@@ -1261,6 +1463,20 @@ diff@^4.0.1:
resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
eastasianwidth@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
@@ -1318,11 +1534,105 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+eslint-scope@^7.2.2:
+ version "7.2.2"
+ resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz"
+ integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
+ version "3.4.3"
+ resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz"
+ integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
+
+"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^7.0.0 || ^8.0.0", eslint@^8.49.0:
+ version "8.49.0"
+ resolved "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz"
+ integrity sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.2"
+ "@eslint/js" "8.49.0"
+ "@humanwhocodes/config-array" "^0.11.11"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
+espree@^9.6.0, espree@^9.6.1:
+ version "9.6.1"
+ resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz"
+ integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
+ dependencies:
+ acorn "^8.9.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.4.1"
+
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+esquery@^1.4.2:
+ version "1.5.0"
+ resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz"
+ integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==
+ dependencies:
+ estraverse "^5.1.0"
+
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^5.1.0, estraverse@^5.2.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+esutils@^2.0.2:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz"
+ integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+
execa@^5.0.0:
version "5.1.1"
resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
@@ -1354,11 +1664,39 @@ expect@^29.0.0, expect@^29.6.4:
jest-message-util "^29.6.3"
jest-util "^29.6.3"
-fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x:
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-glob@^3.2.9:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz"
+ integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x:
version "2.1.0"
resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+fast-levenshtein@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz"
+ integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fastq@^1.6.0:
+ version "1.15.0"
+ resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz"
+ integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ dependencies:
+ reusify "^1.0.4"
+
fb-watchman@^2.0.0:
version "2.0.2"
resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz"
@@ -1373,6 +1711,13 @@ figures@^2.0.0:
dependencies:
escape-string-regexp "^1.0.5"
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
filename-reserved-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz"
@@ -1418,6 +1763,28 @@ find-up@^4.0.0, find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
+find-up@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+flat-cache@^3.0.4:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz"
+ integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==
+ dependencies:
+ flatted "^3.2.7"
+ keyv "^4.5.3"
+ rimraf "^3.0.2"
+
+flatted@^3.2.7:
+ version "3.2.9"
+ resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz"
+ integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+
foreground-child@^3.1.0:
version "3.1.1"
resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz"
@@ -1492,6 +1859,20 @@ gh-pages@^5.0.0:
fs-extra "^8.1.0"
globby "^6.1.0"
+glob-parent@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob-parent@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
glob@^10.3.4:
version "10.3.4"
resolved "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz"
@@ -1556,6 +1937,25 @@ globals@^11.1.0:
resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+globals@^13.19.0:
+ version "13.22.0"
+ resolved "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz"
+ integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==
+ dependencies:
+ type-fest "^0.20.2"
+
+globby@^11.1.0:
+ version "11.1.0"
+ resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz"
@@ -1572,6 +1972,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9:
resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
+graphemer@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz"
+ integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz"
@@ -1599,6 +2004,19 @@ human-signals@^2.1.0:
resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+ignore@^5.2.0, ignore@^5.2.4:
+ version "5.2.4"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
+import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
import-local@^3.0.2:
version "3.1.0"
resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz"
@@ -1650,6 +2068,11 @@ is-extglob@^1.0.0:
resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz"
integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
is-fullwidth-code-point@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
@@ -1667,6 +2090,27 @@ is-glob@^2.0.0:
dependencies:
is-extglob "^1.0.0"
+is-glob@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-glob@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-glob@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
is-invalid-path@^0.1.0:
version "0.1.0"
resolved "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz"
@@ -1679,6 +2123,11 @@ is-number@^7.0.0:
resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+is-path-inside@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz"
+ integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
+
is-plain-object@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz"
@@ -2140,11 +2589,23 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+json-buffer@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz"
+ integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
json-parse-better-errors@^1.0.1:
version "1.0.2"
resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz"
@@ -2155,6 +2616,16 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
json5@^2.1.2, json5@^2.2.3:
version "2.2.3"
resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"
@@ -2176,6 +2647,13 @@ jsonfile@^6.0.1:
optionalDependencies:
graceful-fs "^4.1.6"
+keyv@^4.5.3:
+ version "4.5.3"
+ resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz"
+ integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==
+ dependencies:
+ json-buffer "3.0.1"
+
kleur@^3.0.3:
version "3.0.3"
resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz"
@@ -2186,6 +2664,14 @@ leven@^3.1.0:
resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz"
@@ -2216,11 +2702,23 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
lodash.memoize@4.x:
version "4.1.2"
resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz"
integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
lodash@^4.17.21:
version "4.17.21"
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
@@ -2285,6 +2783,11 @@ merge-stream@^2.0.0:
resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+merge2@^1.3.0, merge2@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
+ integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
+
micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz"
@@ -2298,7 +2801,7 @@ mimic-fn@^2.1.0:
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-minimatch@^3.0.4, minimatch@^3.1.1:
+minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -2390,6 +2893,18 @@ onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
+optionator@^0.9.3:
+ version "0.9.3"
+ resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz"
+ integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==
+ dependencies:
+ "@aashutoshrathi/word-wrap" "^1.2.3"
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+
p-limit@^1.1.0:
version "1.3.0"
resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz"
@@ -2404,6 +2919,13 @@ p-limit@^2.2.0:
dependencies:
p-try "^2.0.0"
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
p-limit@^3.1.0:
version "3.1.0"
resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz"
@@ -2425,6 +2947,13 @@ p-locate@^4.1.0:
dependencies:
p-limit "^2.2.0"
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz"
@@ -2435,6 +2964,13 @@ p-try@^2.0.0:
resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
parse-json@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz"
@@ -2486,6 +3022,11 @@ path-scurry@^1.10.1:
lru-cache "^9.1.1 || ^10.0.0"
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz"
@@ -2538,6 +3079,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
pretty-format@^29.0.0, pretty-format@^29.6.3:
version "29.6.3"
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.3.tgz"
@@ -2555,6 +3101,11 @@ prompts@^2.0.1:
kleur "^3.0.3"
sisteransi "^1.0.5"
+punycode@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"
+ integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
pure-rand@^6.0.0:
version "6.0.3"
resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz"
@@ -2565,6 +3116,11 @@ q@^1.2.0:
resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz"
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+queue-microtask@^1.2.2:
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
react-is@^18.0.0:
version "18.2.0"
resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz"
@@ -2582,6 +3138,11 @@ resolve-cwd@^3.0.0:
dependencies:
resolve-from "^5.0.0"
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
resolve-from@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz"
@@ -2601,6 +3162,25 @@ resolve@^1.20.0:
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
+reusify@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
+ integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
+
+rimraf@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
+ integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+ dependencies:
+ glob "^7.1.3"
+
+run-parallel@^1.1.9:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"
+ integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
+ dependencies:
+ queue-microtask "^1.2.2"
+
safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
@@ -2814,6 +3394,11 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
tmpl@1.0.5:
version "1.0.5"
resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz"
@@ -2850,6 +3435,11 @@ trim-repeated@^1.0.0:
dependencies:
escape-string-regexp "^1.0.2"
+ts-api-utils@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz"
+ integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==
+
ts-jest@^29.1.1:
version "29.1.1"
resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz"
@@ -2883,17 +3473,29 @@ ts-node@>=9.0.0:
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
type-detect@4.0.8:
version "4.0.8"
resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"
integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
-typescript@^5.2.2, typescript@>=2.7, "typescript@>=4.3 <6":
+typescript@^5.2.2, typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6":
version "5.2.2"
resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz"
integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==
@@ -2913,6 +3515,13 @@ universalify@^2.0.0:
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
v8-compile-cache-lib@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"
From efcae8e3b5f4927f411d1445499a5dc7b267bdb7 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 06:21:43 +0300
Subject: [PATCH 37/50] Update CONTRIBUTING.md
---
CONTRIBUTING.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a83661b00..80f7f6b42 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -141,6 +141,7 @@ To run scripts use the `npm run ` command.
- `update`: (shorthand) sequentially runs the `api:load`, `playlist:generate`, `api:generate` and `readme:update` commands.
- `deploy`: (shorthand) sequentially runs the `playlist:deploy` and `api:deploy` commands.
- `report`: (shorthand) sequentially runs the `api:load` and `report:create` commands.
+- `lint`: сhecks the scripts for syntax errors.
- `test`: runs a test of all the scripts described above.
## Workflows
From 21efb82055bca6a11674ec93cce4e56966d7a113 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 06:22:47 +0300
Subject: [PATCH 38/50] Fix errors found by linter
---
scripts/core/htmlTable.ts | 10 +-
scripts/core/issueLoader.ts | 2 +-
scripts/core/issueParser.ts | 3 +-
scripts/core/logParser.ts | 2 +-
scripts/core/playlistParser.ts | 2 +-
scripts/generators/categoriesGenerator.ts | 108 +++++-----
scripts/generators/countriesGenerator.ts | 170 +++++++--------
scripts/generators/index.ts | 20 +-
scripts/generators/indexCategoryGenerator.ts | 106 +++++-----
scripts/generators/indexCountryGenerator.ts | 208 +++++++++----------
scripts/generators/indexGenerator.ts | 64 +++---
scripts/generators/indexLanguageGenerator.ts | 104 +++++-----
scripts/generators/indexNsfwGenerator.ts | 60 +++---
scripts/generators/indexRegionGenerator.ts | 166 +++++++--------
scripts/generators/languagesGenerator.ts | 102 ++++-----
scripts/generators/regionsGenerator.ts | 104 +++++-----
scripts/models/playlist.ts | 4 +-
scripts/tables/countryTable.ts | 2 +-
tests/commands/api/generate.test.ts | 4 +-
tests/commands/playlist/format.test.ts | 2 +-
tests/commands/playlist/generate.test.ts | 6 +-
tests/commands/playlist/update.test.ts | 2 +-
tests/commands/playlist/validate.test.ts | 8 +-
tests/commands/readme/update.test.ts | 2 +-
24 files changed, 632 insertions(+), 629 deletions(-)
diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts
index 12c39bbea..1caa85fa0 100644
--- a/scripts/core/htmlTable.ts
+++ b/scripts/core/htmlTable.ts
@@ -19,19 +19,19 @@ export class HTMLTable {
let output = '\n'
output += ' \n '
- for (let column of this.columns) {
+ for (const column of this.columns) {
output += `${column.name} | `
}
output += '
\n \n'
output += ' \n'
- for (let item of this.data) {
+ for (const item of this.data) {
output += ' '
let i = 0
- for (let prop in item) {
+ for (const prop in item) {
const column = this.columns[i]
- let nowrap = column.nowrap ? ` nowrap` : ''
- let align = column.align ? ` align="${column.align}"` : ''
+ const nowrap = column.nowrap ? ' nowrap' : ''
+ const align = column.align ? ` align="${column.align}"` : ''
output += `${item[prop]} | `
i++
}
diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts
index 84f1177a2..34c7cb2b0 100644
--- a/scripts/core/issueLoader.ts
+++ b/scripts/core/issueLoader.ts
@@ -11,7 +11,7 @@ const octokit = new CustomOctokit()
export class IssueLoader {
async load({ labels }: { labels: string[] | string }) {
labels = Array.isArray(labels) ? labels.join(',') : labels
- let issues: any[] = []
+ let issues: object[] = []
if (TESTING) {
switch (labels) {
case 'streams:add':
diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts
index fc545ad6c..196e03920 100644
--- a/scripts/core/issueParser.ts
+++ b/scripts/core/issueParser.ts
@@ -1,6 +1,5 @@
import { Dictionary } from '@freearhey/core'
import { Issue } from '../models'
-import _ from 'lodash'
const FIELDS = new Dictionary({
'Channel ID': 'channel_id',
@@ -21,7 +20,7 @@ const FIELDS = new Dictionary({
})
export class IssueParser {
- parse(issue: any): Issue {
+ parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue {
const fields = issue.body.split('###')
const data = new Dictionary()
diff --git a/scripts/core/logParser.ts b/scripts/core/logParser.ts
index 51b739fc9..322858e0c 100644
--- a/scripts/core/logParser.ts
+++ b/scripts/core/logParser.ts
@@ -4,7 +4,7 @@ export type LogItem = {
}
export class LogParser {
- parse(content: string): any[] {
+ parse(content: string): LogItem[] {
if (!content) return []
const lines = content.split('\n')
diff --git a/scripts/core/playlistParser.ts b/scripts/core/playlistParser.ts
index 776eb0cfd..296288e13 100644
--- a/scripts/core/playlistParser.ts
+++ b/scripts/core/playlistParser.ts
@@ -14,7 +14,7 @@ export class PlaylistParser {
async parse(files: string[]): Promise {
let streams = new Collection()
- for (let filepath of files) {
+ for (const filepath of files) {
const relativeFilepath = filepath.replace(path.normalize(STREAMS_DIR), '')
const _streams: Collection = await this.parseFile(relativeFilepath)
streams = streams.concat(_streams)
diff --git a/scripts/generators/categoriesGenerator.ts b/scripts/generators/categoriesGenerator.ts
index cf768b982..672af3d90 100644
--- a/scripts/generators/categoriesGenerator.ts
+++ b/scripts/generators/categoriesGenerator.ts
@@ -1,55 +1,53 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Category, Playlist } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type CategoriesGeneratorProps = {
- streams: Collection
- categories: Collection
- logger: Logger
-}
-
-export class CategoriesGenerator implements Generator {
- streams: Collection
- categories: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, categories, logger }: CategoriesGeneratorProps) {
- this.streams = streams
- this.categories = categories
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate() {
- const streams = this.streams.orderBy([(stream: Stream) => stream.getTitle()])
-
- this.categories.forEach(async (category: Category) => {
- let categoryStreams = streams
- .filter((stream: Stream) => stream.hasCategory(category))
- .map((stream: Stream) => {
- const groupTitle = stream.categories
- ? stream.categories
- .map((category: Category) => category.name)
- .sort()
- .join(';')
- : ''
- stream.groupTitle = groupTitle
-
- return stream
- })
-
- const playlist = new Playlist(categoryStreams, { public: true })
- const filepath = `categories/${category.id}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
-
- const undefinedStreams = streams.filter((stream: Stream) => stream.noCategories())
- const playlist = new Playlist(undefinedStreams, { public: true })
- const filepath = `categories/undefined.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Category, Playlist } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type CategoriesGeneratorProps = {
+ streams: Collection
+ categories: Collection
+ logger: Logger
+}
+
+export class CategoriesGenerator implements Generator {
+ streams: Collection
+ categories: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, categories, logger }: CategoriesGeneratorProps) {
+ this.streams = streams
+ this.categories = categories
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate() {
+ const streams = this.streams.orderBy([(stream: Stream) => stream.getTitle()])
+
+ this.categories.forEach(async (category: Category) => {
+ const categoryStreams = streams
+ .filter((stream: Stream) => stream.hasCategory(category))
+ .map((stream: Stream) => {
+ const streamCategories = stream.categories
+ .map((category: Category) => category.name)
+ .sort()
+ const groupTitle = stream.categories ? streamCategories.join(';') : ''
+ stream.groupTitle = groupTitle
+
+ return stream
+ })
+
+ const playlist = new Playlist(categoryStreams, { public: true })
+ const filepath = `categories/${category.id}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+
+ const undefinedStreams = streams.filter((stream: Stream) => stream.noCategories())
+ const playlist = new Playlist(undefinedStreams, { public: true })
+ const filepath = 'categories/undefined.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/countriesGenerator.ts b/scripts/generators/countriesGenerator.ts
index 158bf031c..0b5bc8c11 100644
--- a/scripts/generators/countriesGenerator.ts
+++ b/scripts/generators/countriesGenerator.ts
@@ -1,85 +1,85 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Country, Region, Subdivision, Stream, Playlist } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type CountriesGeneratorProps = {
- streams: Collection
- regions: Collection
- subdivisions: Collection
- countries: Collection
- logger: Logger
-}
-
-export class CountriesGenerator implements Generator {
- streams: Collection
- countries: Collection
- regions: Collection
- subdivisions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, countries, regions, subdivisions, logger }: CountriesGeneratorProps) {
- this.streams = streams
- this.countries = countries
- this.regions = regions
- this.subdivisions = subdivisions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let streams = this.streams
- .orderBy([stream => stream.getTitle()])
- .filter((stream: Stream) => stream.isSFW())
- let regions = this.regions.filter((region: Region) => region.code !== 'INT')
-
- this.countries.forEach(async (country: Country) => {
- const countrySubdivisions = this.subdivisions.filter(
- (subdivision: Subdivision) => subdivision.country === country.code
- )
-
- const countrySubdivisionsCodes = countrySubdivisions.map(
- (subdivision: Subdivision) => `s/${subdivision.code}`
- )
-
- const countryAreaCodes = regions
- .filter((region: Region) => region.countries.includes(country.code))
- .map((region: Region) => `r/${region.code}`)
- .concat(countrySubdivisionsCodes)
- .add(`c/${country.code}`)
-
- const countryStreams = streams.filter(stream =>
- stream.broadcastArea.intersects(countryAreaCodes)
- )
-
- if (countryStreams.isEmpty()) return
-
- const playlist = new Playlist(countryStreams, { public: true })
- const filepath = `countries/${country.code.toLowerCase()}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
-
- countrySubdivisions.forEach(async (subdivision: Subdivision) => {
- const subdivisionStreams = streams.filter(stream =>
- stream.broadcastArea.includes(`s/${subdivision.code}`)
- )
-
- if (subdivisionStreams.isEmpty()) return
-
- const playlist = new Playlist(subdivisionStreams, { public: true })
- const filepath = `subdivisions/${subdivision.code.toLowerCase()}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
- })
-
- const internationalStreams = streams.filter(stream => stream.isInternational())
- if (internationalStreams.notEmpty()) {
- const playlist = new Playlist(internationalStreams, { public: true })
- const filepath = `countries/int.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Country, Region, Subdivision, Stream, Playlist } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type CountriesGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ subdivisions: Collection
+ countries: Collection
+ logger: Logger
+}
+
+export class CountriesGenerator implements Generator {
+ streams: Collection
+ countries: Collection
+ regions: Collection
+ subdivisions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, countries, regions, subdivisions, logger }: CountriesGeneratorProps) {
+ this.streams = streams
+ this.countries = countries
+ this.regions = regions
+ this.subdivisions = subdivisions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy([stream => stream.getTitle()])
+ .filter((stream: Stream) => stream.isSFW())
+ const regions = this.regions.filter((region: Region) => region.code !== 'INT')
+
+ this.countries.forEach(async (country: Country) => {
+ const countrySubdivisions = this.subdivisions.filter(
+ (subdivision: Subdivision) => subdivision.country === country.code
+ )
+
+ const countrySubdivisionsCodes = countrySubdivisions.map(
+ (subdivision: Subdivision) => `s/${subdivision.code}`
+ )
+
+ const countryAreaCodes = regions
+ .filter((region: Region) => region.countries.includes(country.code))
+ .map((region: Region) => `r/${region.code}`)
+ .concat(countrySubdivisionsCodes)
+ .add(`c/${country.code}`)
+
+ const countryStreams = streams.filter(stream =>
+ stream.broadcastArea.intersects(countryAreaCodes)
+ )
+
+ if (countryStreams.isEmpty()) return
+
+ const playlist = new Playlist(countryStreams, { public: true })
+ const filepath = `countries/${country.code.toLowerCase()}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+
+ countrySubdivisions.forEach(async (subdivision: Subdivision) => {
+ const subdivisionStreams = streams.filter(stream =>
+ stream.broadcastArea.includes(`s/${subdivision.code}`)
+ )
+
+ if (subdivisionStreams.isEmpty()) return
+
+ const playlist = new Playlist(subdivisionStreams, { public: true })
+ const filepath = `subdivisions/${subdivision.code.toLowerCase()}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+ })
+
+ const internationalStreams = streams.filter(stream => stream.isInternational())
+ if (internationalStreams.notEmpty()) {
+ const playlist = new Playlist(internationalStreams, { public: true })
+ const filepath = 'countries/int.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+ }
+}
diff --git a/scripts/generators/index.ts b/scripts/generators/index.ts
index f2825f0c4..18b6c8e62 100644
--- a/scripts/generators/index.ts
+++ b/scripts/generators/index.ts
@@ -1,10 +1,10 @@
-export * from './categoriesGenerator'
-export * from './countriesGenerator'
-export * from './languagesGenerator'
-export * from './regionsGenerator'
-export * from './indexGenerator'
-export * from './indexNsfwGenerator'
-export * from './indexCategoryGenerator'
-export * from './indexCountryGenerator'
-export * from './indexLanguageGenerator'
-export * from './indexRegionGenerator'
+export * from './categoriesGenerator'
+export * from './countriesGenerator'
+export * from './languagesGenerator'
+export * from './regionsGenerator'
+export * from './indexGenerator'
+export * from './indexNsfwGenerator'
+export * from './indexCategoryGenerator'
+export * from './indexCountryGenerator'
+export * from './indexLanguageGenerator'
+export * from './indexRegionGenerator'
diff --git a/scripts/generators/indexCategoryGenerator.ts b/scripts/generators/indexCategoryGenerator.ts
index fb4647e3a..8fd5f2cbf 100644
--- a/scripts/generators/indexCategoryGenerator.ts
+++ b/scripts/generators/indexCategoryGenerator.ts
@@ -1,53 +1,53 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Category } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexCategoryGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexCategoryGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexCategoryGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- const streams = this.streams
- .orderBy(stream => stream.getTitle())
- .filter(stream => stream.isSFW())
-
- let groupedStreams = new Collection()
- streams.forEach((stream: Stream) => {
- if (stream.noCategories()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.add(streamClone)
- return
- }
-
- stream.categories.forEach((category: Category) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = category.name
- groupedStreams.push(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy(stream => {
- if (stream.groupTitle === 'Undefined') return 'ZZ'
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.category.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Category } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexCategoryGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexCategoryGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexCategoryGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+
+ let groupedStreams = new Collection()
+ streams.forEach((stream: Stream) => {
+ if (stream.noCategories()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.add(streamClone)
+ return
+ }
+
+ stream.categories.forEach((category: Category) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = category.name
+ groupedStreams.push(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy(stream => {
+ if (stream.groupTitle === 'Undefined') return 'ZZ'
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.category.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexCountryGenerator.ts b/scripts/generators/indexCountryGenerator.ts
index 72974e6d8..dcdb214f8 100644
--- a/scripts/generators/indexCountryGenerator.ts
+++ b/scripts/generators/indexCountryGenerator.ts
@@ -1,104 +1,104 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Country, Subdivision, Region } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexCountryGeneratorProps = {
- streams: Collection
- regions: Collection
- countries: Collection
- subdivisions: Collection
- logger: Logger
-}
-
-export class IndexCountryGenerator implements Generator {
- streams: Collection
- countries: Collection
- regions: Collection
- subdivisions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, regions, countries, subdivisions, logger }: IndexCountryGeneratorProps) {
- this.streams = streams
- this.countries = countries
- this.regions = regions
- this.subdivisions = subdivisions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let groupedStreams = new Collection()
-
- this.streams
- .orderBy(stream => stream.getTitle())
- .filter(stream => stream.isSFW())
- .forEach(stream => {
- if (stream.noBroadcastArea()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.add(streamClone)
- return
- }
-
- if (stream.isInternational()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'International'
- groupedStreams.add(streamClone)
- }
-
- this.getStreamBroadcastCountries(stream).forEach((country: Country) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = country.name
- groupedStreams.add(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy((stream: Stream) => {
- if (stream.groupTitle === 'International') return 'ZZ'
- if (stream.groupTitle === 'Undefined') return 'ZZZ'
-
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.country.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-
- getStreamBroadcastCountries(stream: Stream) {
- const groupedRegions = this.regions.keyBy((region: Region) => region.code)
- const groupedCountries = this.countries.keyBy((country: Country) => country.code)
- const groupedSubdivisions = this.subdivisions.keyBy(
- (subdivision: Subdivision) => subdivision.code
- )
-
- let broadcastCountries = new Collection()
-
- stream.broadcastArea.forEach(broadcastAreaCode => {
- const [type, code] = broadcastAreaCode.split('/')
- switch (type) {
- case 'c':
- broadcastCountries.add(code)
- break
- case 'r':
- if (code !== 'INT' && groupedRegions.has(code)) {
- broadcastCountries = broadcastCountries.concat(groupedRegions.get(code).countries)
- }
- break
- case 's':
- if (groupedSubdivisions.has(code)) {
- broadcastCountries.add(groupedSubdivisions.get(code).country)
- }
- break
- }
- })
-
- return broadcastCountries
- .uniq()
- .map(code => groupedCountries.get(code))
- .filter(Boolean)
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Country, Subdivision, Region } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexCountryGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ countries: Collection
+ subdivisions: Collection
+ logger: Logger
+}
+
+export class IndexCountryGenerator implements Generator {
+ streams: Collection
+ countries: Collection
+ regions: Collection
+ subdivisions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, regions, countries, subdivisions, logger }: IndexCountryGeneratorProps) {
+ this.streams = streams
+ this.countries = countries
+ this.regions = regions
+ this.subdivisions = subdivisions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ let groupedStreams = new Collection()
+
+ this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+ .forEach(stream => {
+ if (stream.noBroadcastArea()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.add(streamClone)
+ return
+ }
+
+ if (stream.isInternational()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'International'
+ groupedStreams.add(streamClone)
+ }
+
+ this.getStreamBroadcastCountries(stream).forEach((country: Country) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = country.name
+ groupedStreams.add(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy((stream: Stream) => {
+ if (stream.groupTitle === 'International') return 'ZZ'
+ if (stream.groupTitle === 'Undefined') return 'ZZZ'
+
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.country.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+
+ getStreamBroadcastCountries(stream: Stream) {
+ const groupedRegions = this.regions.keyBy((region: Region) => region.code)
+ const groupedCountries = this.countries.keyBy((country: Country) => country.code)
+ const groupedSubdivisions = this.subdivisions.keyBy(
+ (subdivision: Subdivision) => subdivision.code
+ )
+
+ let broadcastCountries = new Collection()
+
+ stream.broadcastArea.forEach(broadcastAreaCode => {
+ const [type, code] = broadcastAreaCode.split('/')
+ switch (type) {
+ case 'c':
+ broadcastCountries.add(code)
+ break
+ case 'r':
+ if (code !== 'INT' && groupedRegions.has(code)) {
+ broadcastCountries = broadcastCountries.concat(groupedRegions.get(code).countries)
+ }
+ break
+ case 's':
+ if (groupedSubdivisions.has(code)) {
+ broadcastCountries.add(groupedSubdivisions.get(code).country)
+ }
+ break
+ }
+ })
+
+ return broadcastCountries
+ .uniq()
+ .map(code => groupedCountries.get(code))
+ .filter(Boolean)
+ }
+}
diff --git a/scripts/generators/indexGenerator.ts b/scripts/generators/indexGenerator.ts
index 96784cc6e..b4389ff5f 100644
--- a/scripts/generators/indexGenerator.ts
+++ b/scripts/generators/indexGenerator.ts
@@ -1,32 +1,32 @@
-import { Collection, Logger, Storage } from '@freearhey/core'
-import { Stream, Playlist } from '../models'
-import { Generator } from './generator'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- const sfwStreams = this.streams
- .orderBy(stream => stream.getTitle())
- .filter((stream: Stream) => stream.isSFW())
-
- const playlist = new Playlist(sfwStreams, { public: true })
- const filepath = 'index.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Collection, Logger, Storage } from '@freearhey/core'
+import { Stream, Playlist } from '../models'
+import { Generator } from './generator'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const sfwStreams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter((stream: Stream) => stream.isSFW())
+
+ const playlist = new Playlist(sfwStreams, { public: true })
+ const filepath = 'index.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexLanguageGenerator.ts b/scripts/generators/indexLanguageGenerator.ts
index 07f3d74aa..a64ffaada 100644
--- a/scripts/generators/indexLanguageGenerator.ts
+++ b/scripts/generators/indexLanguageGenerator.ts
@@ -1,52 +1,52 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Language } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexLanguageGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexLanguageGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexLanguageGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let groupedStreams = new Collection()
- this.streams
- .orderBy(stream => stream.getTitle())
- .filter(stream => stream.isSFW())
- .forEach(stream => {
- if (stream.noLanguages()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.add(streamClone)
- return
- }
-
- stream.languages.forEach((language: Language) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = language.name
- groupedStreams.add(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy((stream: Stream) => {
- if (stream.groupTitle === 'Undefined') return 'ZZ'
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.language.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Language } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexLanguageGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexLanguageGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexLanguageGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ let groupedStreams = new Collection()
+ this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+ .forEach(stream => {
+ if (stream.noLanguages()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.add(streamClone)
+ return
+ }
+
+ stream.languages.forEach((language: Language) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = language.name
+ groupedStreams.add(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy((stream: Stream) => {
+ if (stream.groupTitle === 'Undefined') return 'ZZ'
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.language.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexNsfwGenerator.ts b/scripts/generators/indexNsfwGenerator.ts
index c0b80b9a0..a1f0a8062 100644
--- a/scripts/generators/indexNsfwGenerator.ts
+++ b/scripts/generators/indexNsfwGenerator.ts
@@ -1,30 +1,30 @@
-import { Collection, Logger, Storage } from '@freearhey/core'
-import { Stream, Playlist } from '../models'
-import { Generator } from './generator'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexNsfwGeneratorProps = {
- streams: Collection
- logger: Logger
-}
-
-export class IndexNsfwGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: IndexNsfwGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- const allStreams = this.streams.orderBy((stream: Stream) => stream.getTitle())
-
- const playlist = new Playlist(allStreams, { public: true })
- const filepath = 'index.nsfw.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Collection, Logger, Storage } from '@freearhey/core'
+import { Stream, Playlist } from '../models'
+import { Generator } from './generator'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexNsfwGeneratorProps = {
+ streams: Collection
+ logger: Logger
+}
+
+export class IndexNsfwGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: IndexNsfwGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const allStreams = this.streams.orderBy((stream: Stream) => stream.getTitle())
+
+ const playlist = new Playlist(allStreams, { public: true })
+ const filepath = 'index.nsfw.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/indexRegionGenerator.ts b/scripts/generators/indexRegionGenerator.ts
index 9f2096866..55affcaa3 100644
--- a/scripts/generators/indexRegionGenerator.ts
+++ b/scripts/generators/indexRegionGenerator.ts
@@ -1,83 +1,83 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Stream, Playlist, Region } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type IndexRegionGeneratorProps = {
- streams: Collection
- regions: Collection
- logger: Logger
-}
-
-export class IndexRegionGenerator implements Generator {
- streams: Collection
- regions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, regions, logger }: IndexRegionGeneratorProps) {
- this.streams = streams
- this.regions = regions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let groupedStreams = new Collection()
- this.streams
- .orderBy((stream: Stream) => stream.getTitle())
- .filter((stream: Stream) => stream.isSFW())
- .forEach((stream: Stream) => {
- if (stream.noBroadcastArea()) {
- const streamClone = stream.clone()
- streamClone.groupTitle = 'Undefined'
- groupedStreams.push(streamClone)
- return
- }
-
- this.getStreamRegions(stream).forEach((region: Region) => {
- const streamClone = stream.clone()
- streamClone.groupTitle = region.name
- groupedStreams.push(streamClone)
- })
- })
-
- groupedStreams = groupedStreams.orderBy((stream: Stream) => {
- if (stream.groupTitle === 'Undefined') return 'ZZ'
- return stream.groupTitle
- })
-
- const playlist = new Playlist(groupedStreams, { public: true })
- const filepath = 'index.region.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-
- getStreamRegions(stream: Stream) {
- let streamRegions = new Collection()
- stream.broadcastArea.forEach(broadcastAreaCode => {
- const [type, code] = broadcastAreaCode.split('/')
- switch (type) {
- case 'r':
- const groupedRegions = this.regions.keyBy((region: Region) => region.code)
- streamRegions.add(groupedRegions.get(code))
- break
- case 's':
- const [countryCode] = code.split('-')
- const subdivisionRegions = this.regions.filter((region: Region) =>
- region.countries.includes(countryCode)
- )
- streamRegions = streamRegions.concat(subdivisionRegions)
- break
- case 'c':
- const countryRegions = this.regions.filter((region: Region) =>
- region.countries.includes(code)
- )
- streamRegions = streamRegions.concat(countryRegions)
- break
- }
- })
-
- return streamRegions
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Stream, Playlist, Region } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type IndexRegionGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ logger: Logger
+}
+
+export class IndexRegionGenerator implements Generator {
+ streams: Collection
+ regions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, regions, logger }: IndexRegionGeneratorProps) {
+ this.streams = streams
+ this.regions = regions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ let groupedStreams = new Collection()
+ this.streams
+ .orderBy((stream: Stream) => stream.getTitle())
+ .filter((stream: Stream) => stream.isSFW())
+ .forEach((stream: Stream) => {
+ if (stream.noBroadcastArea()) {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = 'Undefined'
+ groupedStreams.push(streamClone)
+ return
+ }
+
+ this.getStreamRegions(stream).forEach((region: Region) => {
+ const streamClone = stream.clone()
+ streamClone.groupTitle = region.name
+ groupedStreams.push(streamClone)
+ })
+ })
+
+ groupedStreams = groupedStreams.orderBy((stream: Stream) => {
+ if (stream.groupTitle === 'Undefined') return 'ZZ'
+ return stream.groupTitle
+ })
+
+ const playlist = new Playlist(groupedStreams, { public: true })
+ const filepath = 'index.region.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+
+ getStreamRegions(stream: Stream) {
+ let streamRegions = new Collection()
+ stream.broadcastArea.forEach(broadcastAreaCode => {
+ const [type, code] = broadcastAreaCode.split('/')
+ switch (type) {
+ case 'r':
+ const groupedRegions = this.regions.keyBy((region: Region) => region.code)
+ streamRegions.add(groupedRegions.get(code))
+ break
+ case 's':
+ const [countryCode] = code.split('-')
+ const subdivisionRegions = this.regions.filter((region: Region) =>
+ region.countries.includes(countryCode)
+ )
+ streamRegions = streamRegions.concat(subdivisionRegions)
+ break
+ case 'c':
+ const countryRegions = this.regions.filter((region: Region) =>
+ region.countries.includes(code)
+ )
+ streamRegions = streamRegions.concat(countryRegions)
+ break
+ }
+ })
+
+ return streamRegions
+ }
+}
diff --git a/scripts/generators/languagesGenerator.ts b/scripts/generators/languagesGenerator.ts
index 5a158a761..d40d53d9b 100644
--- a/scripts/generators/languagesGenerator.ts
+++ b/scripts/generators/languagesGenerator.ts
@@ -1,50 +1,52 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Playlist, Language, Stream } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type LanguagesGeneratorProps = { streams: Collection; logger: Logger }
-
-export class LanguagesGenerator implements Generator {
- streams: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, logger }: LanguagesGeneratorProps) {
- this.streams = streams
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let streams = this.streams.orderBy(stream => stream.getTitle()).filter(stream => stream.isSFW())
-
- let languages = new Collection()
- streams.forEach((stream: Stream) => {
- languages = languages.concat(stream.languages)
- })
-
- languages
- .uniqBy((language: Language) => language.code)
- .orderBy((language: Language) => language.name)
- .forEach(async (language: Language) => {
- const languageStreams = streams.filter(stream => stream.hasLanguage(language))
-
- if (languageStreams.isEmpty()) return
-
- const playlist = new Playlist(languageStreams, { public: true })
- const filepath = `languages/${language.code}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
-
- const undefinedStreams = streams.filter(stream => stream.noLanguages())
-
- if (undefinedStreams.isEmpty()) return
-
- const playlist = new Playlist(undefinedStreams, { public: true })
- const filepath = 'languages/undefined.m3u'
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Playlist, Language, Stream } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type LanguagesGeneratorProps = { streams: Collection; logger: Logger }
+
+export class LanguagesGenerator implements Generator {
+ streams: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, logger }: LanguagesGeneratorProps) {
+ this.streams = streams
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+
+ let languages = new Collection()
+ streams.forEach((stream: Stream) => {
+ languages = languages.concat(stream.languages)
+ })
+
+ languages
+ .uniqBy((language: Language) => language.code)
+ .orderBy((language: Language) => language.name)
+ .forEach(async (language: Language) => {
+ const languageStreams = streams.filter(stream => stream.hasLanguage(language))
+
+ if (languageStreams.isEmpty()) return
+
+ const playlist = new Playlist(languageStreams, { public: true })
+ const filepath = `languages/${language.code}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+
+ const undefinedStreams = streams.filter(stream => stream.noLanguages())
+
+ if (undefinedStreams.isEmpty()) return
+
+ const playlist = new Playlist(undefinedStreams, { public: true })
+ const filepath = 'languages/undefined.m3u'
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ }
+}
diff --git a/scripts/generators/regionsGenerator.ts b/scripts/generators/regionsGenerator.ts
index f6918951c..9c29ee3a2 100644
--- a/scripts/generators/regionsGenerator.ts
+++ b/scripts/generators/regionsGenerator.ts
@@ -1,51 +1,53 @@
-import { Generator } from './generator'
-import { Collection, Storage, Logger } from '@freearhey/core'
-import { Playlist, Subdivision, Region } from '../models'
-import { PUBLIC_DIR } from '../constants'
-
-type RegionsGeneratorProps = {
- streams: Collection
- regions: Collection
- subdivisions: Collection
- logger: Logger
-}
-
-export class RegionsGenerator implements Generator {
- streams: Collection
- regions: Collection
- subdivisions: Collection
- storage: Storage
- logger: Logger
-
- constructor({ streams, regions, subdivisions, logger }: RegionsGeneratorProps) {
- this.streams = streams
- this.regions = regions
- this.subdivisions = subdivisions
- this.storage = new Storage(PUBLIC_DIR)
- this.logger = logger
- }
-
- async generate(): Promise {
- let streams = this.streams.orderBy(stream => stream.getTitle()).filter(stream => stream.isSFW())
-
- this.regions.forEach(async (region: Region) => {
- if (region.code === 'INT') return
-
- const regionSubdivisionsCodes = this.subdivisions
- .filter((subdivision: Subdivision) => region.countries.indexOf(subdivision.country) > -1)
- .map((subdivision: Subdivision) => `s/${subdivision.code}`)
-
- const regionCodes = region.countries
- .map((code: string) => `c/${code}`)
- .concat(regionSubdivisionsCodes)
- .add(`r/${region.code}`)
-
- const regionStreams = streams.filter(stream => stream.broadcastArea.intersects(regionCodes))
-
- const playlist = new Playlist(regionStreams, { public: true })
- const filepath = `regions/${region.code.toLowerCase()}.m3u`
- await this.storage.save(filepath, playlist.toString())
- this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
- })
- }
-}
+import { Generator } from './generator'
+import { Collection, Storage, Logger } from '@freearhey/core'
+import { Playlist, Subdivision, Region } from '../models'
+import { PUBLIC_DIR } from '../constants'
+
+type RegionsGeneratorProps = {
+ streams: Collection
+ regions: Collection
+ subdivisions: Collection
+ logger: Logger
+}
+
+export class RegionsGenerator implements Generator {
+ streams: Collection
+ regions: Collection
+ subdivisions: Collection
+ storage: Storage
+ logger: Logger
+
+ constructor({ streams, regions, subdivisions, logger }: RegionsGeneratorProps) {
+ this.streams = streams
+ this.regions = regions
+ this.subdivisions = subdivisions
+ this.storage = new Storage(PUBLIC_DIR)
+ this.logger = logger
+ }
+
+ async generate(): Promise {
+ const streams = this.streams
+ .orderBy(stream => stream.getTitle())
+ .filter(stream => stream.isSFW())
+
+ this.regions.forEach(async (region: Region) => {
+ if (region.code === 'INT') return
+
+ const regionSubdivisionsCodes = this.subdivisions
+ .filter((subdivision: Subdivision) => region.countries.indexOf(subdivision.country) > -1)
+ .map((subdivision: Subdivision) => `s/${subdivision.code}`)
+
+ const regionCodes = region.countries
+ .map((code: string) => `c/${code}`)
+ .concat(regionSubdivisionsCodes)
+ .add(`r/${region.code}`)
+
+ const regionStreams = streams.filter(stream => stream.broadcastArea.intersects(regionCodes))
+
+ const playlist = new Playlist(regionStreams, { public: true })
+ const filepath = `regions/${region.code.toLowerCase()}.m3u`
+ await this.storage.save(filepath, playlist.toString())
+ this.logger.info(JSON.stringify({ filepath, count: playlist.streams.count() }))
+ })
+ }
+}
diff --git a/scripts/models/playlist.ts b/scripts/models/playlist.ts
index 6266282cc..ba0a25c5c 100644
--- a/scripts/models/playlist.ts
+++ b/scripts/models/playlist.ts
@@ -17,10 +17,10 @@ export class Playlist {
}
toString() {
- let output = `#EXTM3U\n`
+ let output = '#EXTM3U\n'
this.streams.forEach((stream: Stream) => {
- output += stream.toString(this.options) + `\n`
+ output += stream.toString(this.options) + '\n'
})
return output
diff --git a/scripts/tables/countryTable.ts b/scripts/tables/countryTable.ts
index c85a59a37..5e167b7fd 100644
--- a/scripts/tables/countryTable.ts
+++ b/scripts/tables/countryTable.ts
@@ -48,7 +48,7 @@ export class CountryTable implements Table {
} else if (countryCode === 'INT') {
data.add([
'ZZ',
- `🌍 International`,
+ '🌍 International',
logItem.count,
`https://iptv-org.github.io/iptv/${logItem.filepath}
`
])
diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts
index fe3c1215d..86e34ce08 100644
--- a/tests/commands/api/generate.test.ts
+++ b/tests/commands/api/generate.test.ts
@@ -4,14 +4,14 @@ import fs from 'fs-extra'
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
- const stdout = execSync(
+ execSync(
'STREAMS_DIR=tests/__data__/input/streams_generate API_DIR=tests/__data__/output/.api npm run api:generate',
{ encoding: 'utf8' }
)
})
it('can create streams.json', () => {
- expect(content(`output/.api/streams.json`)).toMatchObject(content(`expected/.api/streams.json`))
+ expect(content('output/.api/streams.json')).toMatchObject(content('expected/.api/streams.json'))
})
function content(filepath: string) {
diff --git a/tests/commands/playlist/format.test.ts b/tests/commands/playlist/format.test.ts
index 0c867dd36..6a9fbafc5 100644
--- a/tests/commands/playlist/format.test.ts
+++ b/tests/commands/playlist/format.test.ts
@@ -8,7 +8,7 @@ beforeEach(() => {
})
it('can format playlists', () => {
- const stdout = execSync('STREAMS_DIR=tests/__data__/output/streams npm run playlist:format', {
+ execSync('STREAMS_DIR=tests/__data__/output/streams npm run playlist:format', {
encoding: 'utf8'
})
diff --git a/tests/commands/playlist/generate.test.ts b/tests/commands/playlist/generate.test.ts
index 8c6d80d6a..8cdbfeee8 100644
--- a/tests/commands/playlist/generate.test.ts
+++ b/tests/commands/playlist/generate.test.ts
@@ -5,7 +5,7 @@ import * as glob from 'glob'
beforeEach(() => {
fs.emptyDirSync('tests/__data__/output')
- const stdout = execSync(
+ execSync(
'STREAMS_DIR=tests/__data__/input/streams_generate DATA_DIR=tests/__data__/input/data PUBLIC_DIR=tests/__data__/output/.gh-pages LOGS_DIR=tests/__data__/output/logs npm run playlist:generate',
{ encoding: 'utf8' }
)
@@ -20,8 +20,8 @@ it('can generate playlists and logs', () => {
expect(content(`output/${filepath}`), filepath).toBe(content(`expected/${filepath}`))
})
- expect(content(`output/logs/generators.log`).split('\n').sort()).toStrictEqual(
- content(`expected/logs/generators.log`).split('\n').sort()
+ expect(content('output/logs/generators.log').split('\n').sort()).toStrictEqual(
+ content('expected/logs/generators.log').split('\n').sort()
)
})
diff --git a/tests/commands/playlist/update.test.ts b/tests/commands/playlist/update.test.ts
index 3b438ac79..d9c637db0 100644
--- a/tests/commands/playlist/update.test.ts
+++ b/tests/commands/playlist/update.test.ts
@@ -26,7 +26,7 @@ it('can format playlists', () => {
})
expect(stdout).toBe(
- `OUTPUT=closes #14151, closes #14140, closes #14139, closes #14110, closes #14179, closes #14178\n`
+ 'OUTPUT=closes #14151, closes #14140, closes #14139, closes #14110, closes #14179, closes #14178\n'
)
})
diff --git a/tests/commands/playlist/validate.test.ts b/tests/commands/playlist/validate.test.ts
index d0c6d1396..06ebc4cfe 100644
--- a/tests/commands/playlist/validate.test.ts
+++ b/tests/commands/playlist/validate.test.ts
@@ -10,11 +10,13 @@ it('show an error if channel name in the blocklist', () => {
)
console.log(stdout)
process.exit(1)
- } catch (error: any) {
+ } catch (error: unknown) {
+ // @ts-ignore
expect(error.status).toBe(1)
expect(
+ // @ts-ignore
error.stdout.includes(
- `us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n`
+ 'us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n'
)
).toBe(true)
}
@@ -30,7 +32,7 @@ it('show a warning if channel has wrong id', () => {
expect(
stdout.includes(
- `wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n`
+ 'wrong_id.m3u\n 2 warning "qib22lAq1L.us" is not in the database\n\n1 problems (0 errors, 1 warnings)\n'
)
).toBe(true)
})
diff --git a/tests/commands/readme/update.test.ts b/tests/commands/readme/update.test.ts
index e703ff1b0..0ee6addf3 100644
--- a/tests/commands/readme/update.test.ts
+++ b/tests/commands/readme/update.test.ts
@@ -14,7 +14,7 @@ beforeEach(() => {
'tests/__data__/output/.readme/template.md'
)
- const stdout = execSync(
+ execSync(
'DATA_DIR=tests/__data__/input/data LOGS_DIR=tests/__data__/input/logs README_DIR=tests/__data__/output/.readme npm run readme:update',
{ encoding: 'utf8' }
)
From b9a8f9f386c11cb83463acc21f04e6d1399ca5df Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 06:32:03 +0300
Subject: [PATCH 39/50] Update format.yml
---
.github/workflows/format.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml
index 448d62dbc..444b524f1 100644
--- a/.github/workflows/format.yml
+++ b/.github/workflows/format.yml
@@ -12,7 +12,7 @@ jobs:
- uses: actions/checkout@v3
with:
fetch-depth: 2
- - uses: tibdex/github-app-token@v2
+ - uses: tibdex/github-app-token@v1.8.2
if: ${{ !env.ACT }}
id: create-app-token
with:
From c0ac4105ac13bdb0d97f3b45a947483261437ada Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Fri, 22 Sep 2023 06:32:05 +0300
Subject: [PATCH 40/50] Update update.yml
---
.github/workflows/update.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml
index 0eff5f855..781bcdaa6 100644
--- a/.github/workflows/update.yml
+++ b/.github/workflows/update.yml
@@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- - uses: tibdex/github-app-token@v2
+ - uses: tibdex/github-app-token@v1.8.2
if: ${{ !env.ACT }}
id: create-app-token
with:
From a31c3e1240969c719c0691eb91888ebfcc37c4d6 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Fri, 22 Sep 2023 03:33:41 +0000
Subject: [PATCH 42/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6269781136) workflow.
---
README.md | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 85985f1ce..ce6e9ca9f 100644
--- a/README.md
+++ b/README.md
@@ -118,7 +118,7 @@ Same thing, but split up into separate files:
Albanian | 58 | https://iptv-org.github.io/iptv/languages/sqi.m3u |
Alemannic | 1 | https://iptv-org.github.io/iptv/languages/gsw.m3u |
Amharic | 5 | https://iptv-org.github.io/iptv/languages/amh.m3u |
- Arabic | 367 | https://iptv-org.github.io/iptv/languages/ara.m3u |
+ Arabic | 368 | https://iptv-org.github.io/iptv/languages/ara.m3u |
Armenian | 29 | https://iptv-org.github.io/iptv/languages/hye.m3u |
Assamese | 7 | https://iptv-org.github.io/iptv/languages/asm.m3u |
Assyrian Neo-Aramaic | 1 | https://iptv-org.github.io/iptv/languages/aii.m3u |
@@ -142,7 +142,7 @@ Same thing, but split up into separate files:
Dholuo | 1 | https://iptv-org.github.io/iptv/languages/luo.m3u |
Dimili | 1 | https://iptv-org.github.io/iptv/languages/zza.m3u |
Dutch | 191 | https://iptv-org.github.io/iptv/languages/nld.m3u |
- English | 2174 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ English | 2175 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
Ewe | 1 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
@@ -238,7 +238,7 @@ Same thing, but split up into separate files:
Wolof | 2 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
Yue Chinese | 10 | https://iptv-org.github.io/iptv/languages/yue.m3u |
- Undefined | 1253 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ Undefined | 1252 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
From 44302e3851f9d32c3ce62d3ab0499c7bbad74460 Mon Sep 17 00:00:00 2001
From: Carlinhos027 <111005658+Carlinhos027@users.noreply.github.com>
Date: Fri, 22 Sep 2023 12:25:01 +0200
Subject: [PATCH 43/50] Create sr.m3u
---
streams/sr.m3u | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 streams/sr.m3u
diff --git a/streams/sr.m3u b/streams/sr.m3u
new file mode 100644
index 000000000..ff07b6e4b
--- /dev/null
+++ b/streams/sr.m3u
@@ -0,0 +1,3 @@
+#EXTM3U
+#EXTINF:-1 tvg-id="TrishulBroadcastingNetwork.sr",TBN TV (720p) [Not 24/7]
+https://live.suricloud.com/hls/tbntv/index.m3u8
From fe6078b1b8074798998bfa0a736de2d9a7e622bf Mon Sep 17 00:00:00 2001
From: kaikyoofers <67206080+kaikyoofers@users.noreply.github.com>
Date: Fri, 22 Sep 2023 19:58:08 -0300
Subject: [PATCH 44/50] Update id.m3u
Closes https://github.com/iptv-org/iptv/issues/14273
---
streams/id.m3u | 2 ++
1 file changed, 2 insertions(+)
diff --git a/streams/id.m3u b/streams/id.m3u
index b888a3e5a..12050b1bd 100644
--- a/streams/id.m3u
+++ b/streams/id.m3u
@@ -526,3 +526,5 @@ https://cdn-telkomsel-01.akamaized.net/Content/HLS/Live/channel(18564c27-ff44-4d
https://ams.juraganstreaming.com:5443/LiveApp/streams/wesaltv.m3u8
#EXTINF:-1 tvg-id="ZeeBioskop.id",Zee Bioskop (360p) [Geo-blocked]
https://app-etslive-2.vidio.com/live/6399/master.m3u8
+#EXTINF:-1 tvg-id="CitraDangdut.id",Citra Dangdut [Geo-blocked]
+http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch377)/index.m3u8
From 68360e7f4405da6a533331c0c71ff90d438ba0fd Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Sat, 23 Sep 2023 00:08:15 +0000
Subject: [PATCH 45/50] [Bot] Update /streams
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6280253826) workflow.
closes #14309, closes #14308
---
streams/cl.m3u | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/streams/cl.m3u b/streams/cl.m3u
index 85318b5d3..0a1391edb 100644
--- a/streams/cl.m3u
+++ b/streams/cl.m3u
@@ -133,13 +133,13 @@ http://live.mundogo.cl/mundo/EquizTV/index.m3u8
https://github.com/MachineSystems/archived_m3u8/raw/main/elpinguino_cl.m3u8
#EXTINF:-1 tvg-id="ElTipografo.cl",El Tipógrafo (1080p)
http://live.mundogo.cl/mundo/Tipografo/index.m3u8
-#EXTINF:-1 tvg-id="",EnerGeek Fanpop (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="FanpopTV.cl",Fanpop TV (720p) [Not 24/7]
https://wifispeed.trapemn.tv:1936/infantil/energeek-2/playlist.m3u8
#EXTINF:-1 tvg-id="EnerGeekRadio.cl",EnerGeek Radio (936p)
https://wifiexpert-1.energeek.cl/energeek/radio/playlist.m3u8
#EXTINF:-1 tvg-id="",EnerGeek Retro (720p) [Not 24/7]
https://stream.wifispeed.cl:3103/live/energeek1live.m3u8
-#EXTINF:-1 tvg-id="",EnerGeek Retro (720p) [Not 24/7]
+#EXTINF:-1 tvg-id="EnerGeek.cl",EnerGeek (720p) [Not 24/7]
https://wifispeed.trapemn.tv:1936/infantil/energeek-1/playlist.m3u8
#EXTINF:-1 tvg-id="EnfoqueDigitalTV.cl",Enfoque Digital TV (1080p)
https://5eaccbab48461.streamlock.net:1936/8074/8074/playlist.m3u8
From ea02e30b72ba985b7d14cbafaa54d51ddd94a868 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Sat, 23 Sep 2023 00:08:15 +0000
Subject: [PATCH 46/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6280253826) workflow.
---
README.md | 54 +++++++++++++++++++++++++++---------------------------
1 file changed, 27 insertions(+), 27 deletions(-)
diff --git a/README.md b/README.md
index ce6e9ca9f..30703870c 100644
--- a/README.md
+++ b/README.md
@@ -59,7 +59,7 @@ Same thing, but split up into separate files:
Category | Channels | Playlist |
- Animation | 51 | https://iptv-org.github.io/iptv/categories/animation.m3u |
+ Animation | 53 | https://iptv-org.github.io/iptv/categories/animation.m3u |
Auto | 15 | https://iptv-org.github.io/iptv/categories/auto.m3u |
Business | 57 | https://iptv-org.github.io/iptv/categories/business.m3u |
Classic | 54 | https://iptv-org.github.io/iptv/categories/classic.m3u |
@@ -70,7 +70,7 @@ Same thing, but split up into separate files:
Education | 115 | https://iptv-org.github.io/iptv/categories/education.m3u |
Entertainment | 354 | https://iptv-org.github.io/iptv/categories/entertainment.m3u |
Family | 40 | https://iptv-org.github.io/iptv/categories/family.m3u |
- General | 1121 | https://iptv-org.github.io/iptv/categories/general.m3u |
+ General | 1122 | https://iptv-org.github.io/iptv/categories/general.m3u |
Kids | 183 | https://iptv-org.github.io/iptv/categories/kids.m3u |
Legislative | 167 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
Lifestyle | 77 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
@@ -87,7 +87,7 @@ Same thing, but split up into separate files:
Travel | 30 | https://iptv-org.github.io/iptv/categories/travel.m3u |
Weather | 14 | https://iptv-org.github.io/iptv/categories/weather.m3u |
XXX | 46 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- Undefined | 5219 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ Undefined | 5217 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -141,7 +141,7 @@ Same thing, but split up into separate files:
Dhivehi | 3 | https://iptv-org.github.io/iptv/languages/div.m3u |
Dholuo | 1 | https://iptv-org.github.io/iptv/languages/luo.m3u |
Dimili | 1 | https://iptv-org.github.io/iptv/languages/zza.m3u |
- Dutch | 191 | https://iptv-org.github.io/iptv/languages/nld.m3u |
+ Dutch | 192 | https://iptv-org.github.io/iptv/languages/nld.m3u |
English | 2175 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
Ewe | 1 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
@@ -217,7 +217,7 @@ Same thing, but split up into separate files:
Slovak | 44 | https://iptv-org.github.io/iptv/languages/slk.m3u |
Slovenian | 16 | https://iptv-org.github.io/iptv/languages/slv.m3u |
Somali | 8 | https://iptv-org.github.io/iptv/languages/som.m3u |
- Spanish | 1848 | https://iptv-org.github.io/iptv/languages/spa.m3u |
+ Spanish | 1850 | https://iptv-org.github.io/iptv/languages/spa.m3u |
Swahili | 14 | https://iptv-org.github.io/iptv/languages/swa.m3u |
Swedish | 19 | https://iptv-org.github.io/iptv/languages/swe.m3u |
Tagalog | 14 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
@@ -238,7 +238,7 @@ Same thing, but split up into separate files:
Wolof | 2 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
Yue Chinese | 10 | https://iptv-org.github.io/iptv/languages/yue.m3u |
- Undefined | 1252 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ Undefined | 1250 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
@@ -272,7 +272,7 @@ Same thing, but split up into separate files:
🇦🇴 Angola | 14 | https://iptv-org.github.io/iptv/countries/ao.m3u |
🇦🇮 Anguilla | 5 | https://iptv-org.github.io/iptv/countries/ai.m3u |
🇦🇬 Antigua and Barbuda | 7 | https://iptv-org.github.io/iptv/countries/ag.m3u |
- 🇦🇷 Argentina | 316 | https://iptv-org.github.io/iptv/countries/ar.m3u |
+ 🇦🇷 Argentina | 318 | https://iptv-org.github.io/iptv/countries/ar.m3u |
Buenos Aires | 30 | https://iptv-org.github.io/iptv/subdivisions/ar-b.m3u |
Catamarca | 2 | https://iptv-org.github.io/iptv/subdivisions/ar-k.m3u |
Chaco | 5 | https://iptv-org.github.io/iptv/subdivisions/ar-h.m3u |
@@ -311,7 +311,7 @@ Same thing, but split up into separate files:
🇧🇯 Benin | 19 | https://iptv-org.github.io/iptv/countries/bj.m3u |
🇧🇲 Bermuda | 4 | https://iptv-org.github.io/iptv/countries/bm.m3u |
🇧🇹 Bhutan | 8 | https://iptv-org.github.io/iptv/countries/bt.m3u |
- 🇧🇴 Bolivia | 94 | https://iptv-org.github.io/iptv/countries/bo.m3u |
+ 🇧🇴 Bolivia | 96 | https://iptv-org.github.io/iptv/countries/bo.m3u |
Cochabamba | 1 | https://iptv-org.github.io/iptv/subdivisions/bo-c.m3u |
La Paz | 2 | https://iptv-org.github.io/iptv/subdivisions/bo-l.m3u |
Oruro | 1 | https://iptv-org.github.io/iptv/subdivisions/bo-o.m3u |
@@ -376,7 +376,7 @@ Same thing, but split up into separate files:
Nuble | 3 | https://iptv-org.github.io/iptv/subdivisions/cl-nb.m3u |
Valparaiso | 2 | https://iptv-org.github.io/iptv/subdivisions/cl-vs.m3u |
🇨🇳 China | 562 | https://iptv-org.github.io/iptv/countries/cn.m3u |
- 🇨🇴 Colombia | 137 | https://iptv-org.github.io/iptv/countries/co.m3u |
+ 🇨🇴 Colombia | 139 | https://iptv-org.github.io/iptv/countries/co.m3u |
Antioquia | 1 | https://iptv-org.github.io/iptv/subdivisions/co-ant.m3u |
Atlantico | 1 | https://iptv-org.github.io/iptv/subdivisions/co-atl.m3u |
Bolivar | 1 | https://iptv-org.github.io/iptv/subdivisions/co-bol.m3u |
@@ -395,11 +395,11 @@ Same thing, but split up into separate files:
Valle del Cauca | 5 | https://iptv-org.github.io/iptv/subdivisions/co-vac.m3u |
🇰🇲 Comoros | 41 | https://iptv-org.github.io/iptv/countries/km.m3u |
🇨🇰 Cook Islands | 6 | https://iptv-org.github.io/iptv/countries/ck.m3u |
- 🇨🇷 Costa Rica | 96 | https://iptv-org.github.io/iptv/countries/cr.m3u |
+ 🇨🇷 Costa Rica | 98 | https://iptv-org.github.io/iptv/countries/cr.m3u |
Puntarenas | 1 | https://iptv-org.github.io/iptv/subdivisions/cr-p.m3u |
San Jose | 1 | https://iptv-org.github.io/iptv/subdivisions/cr-sj.m3u |
🇭🇷 Croatia | 28 | https://iptv-org.github.io/iptv/countries/hr.m3u |
- 🇨🇺 Cuba | 53 | https://iptv-org.github.io/iptv/countries/cu.m3u |
+ 🇨🇺 Cuba | 55 | https://iptv-org.github.io/iptv/countries/cu.m3u |
🇨🇼 Curacao | 10 | https://iptv-org.github.io/iptv/countries/cw.m3u |
🇨🇾 Cyprus | 39 | https://iptv-org.github.io/iptv/countries/cy.m3u |
🇨🇿 Czech Republic | 43 | https://iptv-org.github.io/iptv/countries/cz.m3u |
@@ -407,7 +407,7 @@ Same thing, but split up into separate files:
🇩🇰 Denmark | 34 | https://iptv-org.github.io/iptv/countries/dk.m3u |
🇩🇯 Djibouti | 46 | https://iptv-org.github.io/iptv/countries/dj.m3u |
🇩🇲 Dominica | 5 | https://iptv-org.github.io/iptv/countries/dm.m3u |
- 🇩🇴 Dominican Republic | 207 | https://iptv-org.github.io/iptv/countries/do.m3u |
+ 🇩🇴 Dominican Republic | 209 | https://iptv-org.github.io/iptv/countries/do.m3u |
Distrito Nacional (Santo Domingo) | 2 | https://iptv-org.github.io/iptv/subdivisions/do-01.m3u |
La Altagracia | 2 | https://iptv-org.github.io/iptv/subdivisions/do-11.m3u |
La Vega | 3 | https://iptv-org.github.io/iptv/subdivisions/do-13.m3u |
@@ -417,12 +417,12 @@ Same thing, but split up into separate files:
Santiago | 1 | https://iptv-org.github.io/iptv/subdivisions/do-25.m3u |
Valverde | 1 | https://iptv-org.github.io/iptv/subdivisions/do-27.m3u |
🇹🇱 East Timor | 27 | https://iptv-org.github.io/iptv/countries/tl.m3u |
- 🇪🇨 Ecuador | 82 | https://iptv-org.github.io/iptv/countries/ec.m3u |
+ 🇪🇨 Ecuador | 84 | https://iptv-org.github.io/iptv/countries/ec.m3u |
Azuay | 1 | https://iptv-org.github.io/iptv/subdivisions/ec-a.m3u |
Loja | 1 | https://iptv-org.github.io/iptv/subdivisions/ec-l.m3u |
Orellana | 1 | https://iptv-org.github.io/iptv/subdivisions/ec-d.m3u |
🇪🇬 Egypt | 77 | https://iptv-org.github.io/iptv/countries/eg.m3u |
- 🇸🇻 El Salvador | 67 | https://iptv-org.github.io/iptv/countries/sv.m3u |
+ 🇸🇻 El Salvador | 69 | https://iptv-org.github.io/iptv/countries/sv.m3u |
🇬🇶 Equatorial Guinea | 14 | https://iptv-org.github.io/iptv/countries/gq.m3u |
🇪🇷 Eritrea | 12 | https://iptv-org.github.io/iptv/countries/er.m3u |
🇪🇪 Estonia | 24 | https://iptv-org.github.io/iptv/countries/ee.m3u |
@@ -447,7 +447,7 @@ Same thing, but split up into separate files:
🇬🇩 Grenada | 5 | https://iptv-org.github.io/iptv/countries/gd.m3u |
🇬🇵 Guadeloupe | 9 | https://iptv-org.github.io/iptv/countries/gp.m3u |
🇬🇺 Guam | 7 | https://iptv-org.github.io/iptv/countries/gu.m3u |
- 🇬🇹 Guatemala | 104 | https://iptv-org.github.io/iptv/countries/gt.m3u |
+ 🇬🇹 Guatemala | 106 | https://iptv-org.github.io/iptv/countries/gt.m3u |
Escuintla | 2 | https://iptv-org.github.io/iptv/subdivisions/gt-05.m3u |
Izabal | 1 | https://iptv-org.github.io/iptv/subdivisions/gt-18.m3u |
Quiche | 1 | https://iptv-org.github.io/iptv/subdivisions/gt-14.m3u |
@@ -461,7 +461,7 @@ Same thing, but split up into separate files:
🇬🇼 Guinea-Bissau | 12 | https://iptv-org.github.io/iptv/countries/gw.m3u |
🇬🇾 Guyana | 4 | https://iptv-org.github.io/iptv/countries/gy.m3u |
🇭🇹 Haiti | 40 | https://iptv-org.github.io/iptv/countries/ht.m3u |
- 🇭🇳 Honduras | 110 | https://iptv-org.github.io/iptv/countries/hn.m3u |
+ 🇭🇳 Honduras | 112 | https://iptv-org.github.io/iptv/countries/hn.m3u |
🇭🇰 Hong Kong | 21 | https://iptv-org.github.io/iptv/countries/hk.m3u |
🇭🇺 Hungary | 118 | https://iptv-org.github.io/iptv/countries/hu.m3u |
🇮🇸 Iceland | 16 | https://iptv-org.github.io/iptv/countries/is.m3u |
@@ -533,7 +533,7 @@ Same thing, but split up into separate files:
🇲🇷 Mauritania | 43 | https://iptv-org.github.io/iptv/countries/mr.m3u |
🇲🇺 Mauritius | 13 | https://iptv-org.github.io/iptv/countries/mu.m3u |
🇾🇹 Mayotte | 13 | https://iptv-org.github.io/iptv/countries/yt.m3u |
- 🇲🇽 Mexico | 209 | https://iptv-org.github.io/iptv/countries/mx.m3u |
+ 🇲🇽 Mexico | 211 | https://iptv-org.github.io/iptv/countries/mx.m3u |
Aguascalientes | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-agu.m3u |
Baja California | 1 | https://iptv-org.github.io/iptv/subdivisions/mx-bcn.m3u |
Chihuahua | 4 | https://iptv-org.github.io/iptv/subdivisions/mx-chh.m3u |
@@ -571,7 +571,7 @@ Same thing, but split up into separate files:
🇳🇱 Netherlands | 201 | https://iptv-org.github.io/iptv/countries/nl.m3u |
🇳🇨 New Caledonia | 6 | https://iptv-org.github.io/iptv/countries/nc.m3u |
🇳🇿 New Zealand | 32 | https://iptv-org.github.io/iptv/countries/nz.m3u |
- 🇳🇮 Nicaragua | 62 | https://iptv-org.github.io/iptv/countries/ni.m3u |
+ 🇳🇮 Nicaragua | 64 | https://iptv-org.github.io/iptv/countries/ni.m3u |
🇳🇪 Niger | 13 | https://iptv-org.github.io/iptv/countries/ne.m3u |
🇳🇬 Nigeria | 55 | https://iptv-org.github.io/iptv/countries/ng.m3u |
🇳🇺 Niue | 6 | https://iptv-org.github.io/iptv/countries/nu.m3u |
@@ -585,16 +585,16 @@ Same thing, but split up into separate files:
Islamabad | 1 | https://iptv-org.github.io/iptv/subdivisions/pk-is.m3u |
🇵🇼 Palau | 6 | https://iptv-org.github.io/iptv/countries/pw.m3u |
🇵🇸 Palestine | 59 | https://iptv-org.github.io/iptv/countries/ps.m3u |
- 🇵🇦 Panama | 69 | https://iptv-org.github.io/iptv/countries/pa.m3u |
+ 🇵🇦 Panama | 71 | https://iptv-org.github.io/iptv/countries/pa.m3u |
🇵🇬 Papua New Guinea | 6 | https://iptv-org.github.io/iptv/countries/pg.m3u |
- 🇵🇾 Paraguay | 88 | https://iptv-org.github.io/iptv/countries/py.m3u |
+ 🇵🇾 Paraguay | 90 | https://iptv-org.github.io/iptv/countries/py.m3u |
Alto Parana | 2 | https://iptv-org.github.io/iptv/subdivisions/py-10.m3u |
Boqueron | 1 | https://iptv-org.github.io/iptv/subdivisions/py-19.m3u |
Caaguazu | 1 | https://iptv-org.github.io/iptv/subdivisions/py-5.m3u |
Central | 1 | https://iptv-org.github.io/iptv/subdivisions/py-11.m3u |
Itapua | 1 | https://iptv-org.github.io/iptv/subdivisions/py-7.m3u |
Presidente Hayes | 1 | https://iptv-org.github.io/iptv/subdivisions/py-15.m3u |
- 🇵🇪 Peru | 200 | https://iptv-org.github.io/iptv/countries/pe.m3u |
+ 🇵🇪 Peru | 202 | https://iptv-org.github.io/iptv/countries/pe.m3u |
Amazonas | 1 | https://iptv-org.github.io/iptv/subdivisions/pe-ama.m3u |
Ancash | 1 | https://iptv-org.github.io/iptv/subdivisions/pe-anc.m3u |
Apurimac | 1 | https://iptv-org.github.io/iptv/subdivisions/pe-apu.m3u |
@@ -611,7 +611,7 @@ Same thing, but split up into separate files:
🇵🇳 Pitcairn Islands | 6 | https://iptv-org.github.io/iptv/countries/pn.m3u |
🇵🇱 Poland | 66 | https://iptv-org.github.io/iptv/countries/pl.m3u |
🇵🇹 Portugal | 53 | https://iptv-org.github.io/iptv/countries/pt.m3u |
- 🇵🇷 Puerto Rico | 85 | https://iptv-org.github.io/iptv/countries/pr.m3u |
+ 🇵🇷 Puerto Rico | 87 | https://iptv-org.github.io/iptv/countries/pr.m3u |
🇶🇦 Qatar | 38 | https://iptv-org.github.io/iptv/countries/qa.m3u |
🇨🇬 Republic of the Congo | 16 | https://iptv-org.github.io/iptv/countries/cg.m3u |
Brazzaville | 1 | https://iptv-org.github.io/iptv/subdivisions/cg-bzv.m3u |
@@ -677,7 +677,7 @@ Same thing, but split up into separate files:
Valenciana, Comunidad | 15 | https://iptv-org.github.io/iptv/subdivisions/es-vc.m3u |
🇱🇰 Sri Lanka | 20 | https://iptv-org.github.io/iptv/countries/lk.m3u |
🇸🇩 Sudan | 50 | https://iptv-org.github.io/iptv/countries/sd.m3u |
- 🇸🇷 Suriname | 3 | https://iptv-org.github.io/iptv/countries/sr.m3u |
+ 🇸🇷 Suriname | 4 | https://iptv-org.github.io/iptv/countries/sr.m3u |
🇸🇿 Swaziland | 13 | https://iptv-org.github.io/iptv/countries/sz.m3u |
🇸🇪 Sweden | 43 | https://iptv-org.github.io/iptv/countries/se.m3u |
🇨🇭 Switzerland | 71 | https://iptv-org.github.io/iptv/countries/ch.m3u |
@@ -753,11 +753,11 @@ Same thing, but split up into separate files:
Washington | 8 | https://iptv-org.github.io/iptv/subdivisions/us-wa.m3u |
Wisconsin | 7 | https://iptv-org.github.io/iptv/subdivisions/us-wi.m3u |
Wyoming | 1 | https://iptv-org.github.io/iptv/subdivisions/us-wy.m3u |
- 🇺🇾 Uruguay | 60 | https://iptv-org.github.io/iptv/countries/uy.m3u |
+ 🇺🇾 Uruguay | 62 | https://iptv-org.github.io/iptv/countries/uy.m3u |
🇺🇿 Uzbekistan | 9 | https://iptv-org.github.io/iptv/countries/uz.m3u |
🇻🇺 Vanuatu | 6 | https://iptv-org.github.io/iptv/countries/vu.m3u |
🇻🇦 Vatican City | 19 | https://iptv-org.github.io/iptv/countries/va.m3u |
- 🇻🇪 Venezuela | 108 | https://iptv-org.github.io/iptv/countries/ve.m3u |
+ 🇻🇪 Venezuela | 110 | https://iptv-org.github.io/iptv/countries/ve.m3u |
Aragua | 2 | https://iptv-org.github.io/iptv/subdivisions/ve-d.m3u |
Lara | 1 | https://iptv-org.github.io/iptv/subdivisions/ve-k.m3u |
🇻🇳 Vietnam | 125 | https://iptv-org.github.io/iptv/countries/vn.m3u |
@@ -793,7 +793,7 @@ Same thing, but split up into separate files:
Africa | 424 | https://iptv-org.github.io/iptv/regions/afr.m3u |
- Americas | 3767 | https://iptv-org.github.io/iptv/regions/amer.m3u |
+ Americas | 3768 | https://iptv-org.github.io/iptv/regions/amer.m3u |
Arab world | 417 | https://iptv-org.github.io/iptv/regions/arab.m3u |
Asia | 2937 | https://iptv-org.github.io/iptv/regions/asia.m3u |
Asia-Pacific | 1924 | https://iptv-org.github.io/iptv/regions/apac.m3u |
@@ -817,7 +817,7 @@ Same thing, but split up into separate files:
Northern America | 1982 | https://iptv-org.github.io/iptv/regions/nam.m3u |
Northern Europe | 125 | https://iptv-org.github.io/iptv/regions/neur.m3u |
Oceania | 68 | https://iptv-org.github.io/iptv/regions/oce.m3u |
- South America | 1194 | https://iptv-org.github.io/iptv/regions/southam.m3u |
+ South America | 1195 | https://iptv-org.github.io/iptv/regions/southam.m3u |
South Asia | 593 | https://iptv-org.github.io/iptv/regions/sas.m3u |
Southeast Asia | 492 | https://iptv-org.github.io/iptv/regions/sea.m3u |
Southern Europe | 1095 | https://iptv-org.github.io/iptv/regions/ser.m3u |
From 7ebca5ee484ba9a0a1359a54106789408c16dbf1 Mon Sep 17 00:00:00 2001
From: kaikyoofers <67206080+kaikyoofers@users.noreply.github.com>
Date: Sat, 23 Sep 2023 14:21:50 -0300
Subject: [PATCH 47/50] Update id.m3u
Closes https://github.com/iptv-org/iptv/issues/14275
---
streams/id.m3u | 2 ++
1 file changed, 2 insertions(+)
diff --git a/streams/id.m3u b/streams/id.m3u
index 12050b1bd..8fed9736d 100644
--- a/streams/id.m3u
+++ b/streams/id.m3u
@@ -528,3 +528,5 @@ https://ams.juraganstreaming.com:5443/LiveApp/streams/wesaltv.m3u8
https://app-etslive-2.vidio.com/live/6399/master.m3u8
#EXTINF:-1 tvg-id="CitraDangdut.id",Citra Dangdut [Geo-blocked]
http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch377)/index.m3u8
+#EXTINF:-1 tvg-id="CitraMuslim.id",Citra Muslim [Geo-blocked]
+http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch334)/index.m3u8
From 158e43e35dd19fbf6dd57796bf76489825ce193d Mon Sep 17 00:00:00 2001
From: kaikyoofers <67206080+kaikyoofers@users.noreply.github.com>
Date: Sat, 23 Sep 2023 14:36:16 -0300
Subject: [PATCH 48/50] Update id.m3u
From https://github.com/iptv-org/iptv/issues/14270 https://github.com/iptv-org/iptv/issues/14272 and https://github.com/iptv-org/iptv/issues/14274
---
streams/id.m3u | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/streams/id.m3u b/streams/id.m3u
index 8fed9736d..fd816d1ec 100644
--- a/streams/id.m3u
+++ b/streams/id.m3u
@@ -530,3 +530,9 @@ https://app-etslive-2.vidio.com/live/6399/master.m3u8
http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch377)/index.m3u8
#EXTINF:-1 tvg-id="CitraMuslim.id",Citra Muslim [Geo-blocked]
http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch334)/index.m3u8
+#EXTINF:-1 tvg-id="CitraDrama.id",Citra Drama (720p) [Geo-blocked]
+http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch378)/index.m3u8
+#EXTINF:-1 tvg-id="Horee.id",Horee! (720p) [Geo-blocked]
+http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch375)/index.m3u8
+#EXTINF:-1 tvg-id="IDXChannel.id",IDX Channel (720p) [Geo-blocked]
+http://vod.linknetott.swiftcontent.com/Content/HLS/Live/Channel(ch389)/index.m3u8
From a2ac1da878487cc8f00a0bd52549b53e9a1401a3 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Sun, 24 Sep 2023 00:08:37 +0000
Subject: [PATCH 50/50] [Bot] Update README.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/iptv/actions/runs/6286743023) workflow.
---
README.md | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/README.md b/README.md
index 30703870c..c32b577ae 100644
--- a/README.md
+++ b/README.md
@@ -63,7 +63,7 @@ Same thing, but split up into separate files:
Auto | 15 | https://iptv-org.github.io/iptv/categories/auto.m3u |
Business | 57 | https://iptv-org.github.io/iptv/categories/business.m3u |
Classic | 54 | https://iptv-org.github.io/iptv/categories/classic.m3u |
- Comedy | 57 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
+ Comedy | 58 | https://iptv-org.github.io/iptv/categories/comedy.m3u |
Cooking | 23 | https://iptv-org.github.io/iptv/categories/cooking.m3u |
Culture | 77 | https://iptv-org.github.io/iptv/categories/culture.m3u |
Documentary | 64 | https://iptv-org.github.io/iptv/categories/documentary.m3u |
@@ -74,20 +74,20 @@ Same thing, but split up into separate files:
Kids | 183 | https://iptv-org.github.io/iptv/categories/kids.m3u |
Legislative | 167 | https://iptv-org.github.io/iptv/categories/legislative.m3u |
Lifestyle | 77 | https://iptv-org.github.io/iptv/categories/lifestyle.m3u |
- Movies | 273 | https://iptv-org.github.io/iptv/categories/movies.m3u |
+ Movies | 275 | https://iptv-org.github.io/iptv/categories/movies.m3u |
Music | 484 | https://iptv-org.github.io/iptv/categories/music.m3u |
News | 703 | https://iptv-org.github.io/iptv/categories/news.m3u |
Outdoor | 44 | https://iptv-org.github.io/iptv/categories/outdoor.m3u |
Relax | 16 | https://iptv-org.github.io/iptv/categories/relax.m3u |
Religious | 442 | https://iptv-org.github.io/iptv/categories/religious.m3u |
Science | 25 | https://iptv-org.github.io/iptv/categories/science.m3u |
- Series | 158 | https://iptv-org.github.io/iptv/categories/series.m3u |
+ Series | 159 | https://iptv-org.github.io/iptv/categories/series.m3u |
Shop | 74 | https://iptv-org.github.io/iptv/categories/shop.m3u |
Sports | 205 | https://iptv-org.github.io/iptv/categories/sports.m3u |
Travel | 30 | https://iptv-org.github.io/iptv/categories/travel.m3u |
Weather | 14 | https://iptv-org.github.io/iptv/categories/weather.m3u |
XXX | 46 | https://iptv-org.github.io/iptv/categories/xxx.m3u |
- Undefined | 5217 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
+ Undefined | 5209 | https://iptv-org.github.io/iptv/categories/undefined.m3u |
@@ -142,7 +142,7 @@ Same thing, but split up into separate files:
Dholuo | 1 | https://iptv-org.github.io/iptv/languages/luo.m3u |
Dimili | 1 | https://iptv-org.github.io/iptv/languages/zza.m3u |
Dutch | 192 | https://iptv-org.github.io/iptv/languages/nld.m3u |
- English | 2175 | https://iptv-org.github.io/iptv/languages/eng.m3u |
+ English | 2182 | https://iptv-org.github.io/iptv/languages/eng.m3u |
Estonian | 9 | https://iptv-org.github.io/iptv/languages/est.m3u |
Ewe | 1 | https://iptv-org.github.io/iptv/languages/ewe.m3u |
Faroese | 1 | https://iptv-org.github.io/iptv/languages/fao.m3u |
@@ -175,7 +175,7 @@ Same thing, but split up into separate files:
Kazakh | 34 | https://iptv-org.github.io/iptv/languages/kaz.m3u |
Khmer | 12 | https://iptv-org.github.io/iptv/languages/khm.m3u |
Kinyarwanda | 3 | https://iptv-org.github.io/iptv/languages/kin.m3u |
- Kirghiz | 8 | https://iptv-org.github.io/iptv/languages/kir.m3u |
+ Kirghiz | 6 | https://iptv-org.github.io/iptv/languages/kir.m3u |
Konkani (macrolanguage) | 2 | https://iptv-org.github.io/iptv/languages/kok.m3u |
Korean | 111 | https://iptv-org.github.io/iptv/languages/kor.m3u |
Kurdish | 24 | https://iptv-org.github.io/iptv/languages/kur.m3u |
@@ -217,7 +217,7 @@ Same thing, but split up into separate files:
Slovak | 44 | https://iptv-org.github.io/iptv/languages/slk.m3u |
Slovenian | 16 | https://iptv-org.github.io/iptv/languages/slv.m3u |
Somali | 8 | https://iptv-org.github.io/iptv/languages/som.m3u |
- Spanish | 1850 | https://iptv-org.github.io/iptv/languages/spa.m3u |
+ Spanish | 1852 | https://iptv-org.github.io/iptv/languages/spa.m3u |
Swahili | 14 | https://iptv-org.github.io/iptv/languages/swa.m3u |
Swedish | 19 | https://iptv-org.github.io/iptv/languages/swe.m3u |
Tagalog | 14 | https://iptv-org.github.io/iptv/languages/tgl.m3u |
@@ -238,7 +238,7 @@ Same thing, but split up into separate files:
Wolof | 2 | https://iptv-org.github.io/iptv/languages/wol.m3u |
Yucatec Maya | 1 | https://iptv-org.github.io/iptv/languages/yua.m3u |
Yue Chinese | 10 | https://iptv-org.github.io/iptv/languages/yue.m3u |
- Undefined | 1250 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
+ Undefined | 1238 | https://iptv-org.github.io/iptv/languages/undefined.m3u |
@@ -511,7 +511,7 @@ Same thing, but split up into separate files:
🇰🇮 Kiribati | 6 | https://iptv-org.github.io/iptv/countries/ki.m3u |
🇽🇰 Kosovo | 25 | https://iptv-org.github.io/iptv/countries/xk.m3u |
🇰🇼 Kuwait | 38 | https://iptv-org.github.io/iptv/countries/kw.m3u |
- 🇰🇬 Kyrgyzstan | 10 | https://iptv-org.github.io/iptv/countries/kg.m3u |
+ 🇰🇬 Kyrgyzstan | 8 | https://iptv-org.github.io/iptv/countries/kg.m3u |
🇱🇦 Laos | 44 | https://iptv-org.github.io/iptv/countries/la.m3u |
🇱🇻 Latvia | 25 | https://iptv-org.github.io/iptv/countries/lv.m3u |
🇱🇧 Lebanon | 57 | https://iptv-org.github.io/iptv/countries/lb.m3u |
@@ -701,7 +701,7 @@ Same thing, but split up into separate files:
🇦🇪 United Arab Emirates | 76 | https://iptv-org.github.io/iptv/countries/ae.m3u |
🇬🇧 United Kingdom | 194 | https://iptv-org.github.io/iptv/countries/uk.m3u |
Wales | 2 | https://iptv-org.github.io/iptv/subdivisions/gb-wls.m3u |
- 🇺🇸 United States | 1848 | https://iptv-org.github.io/iptv/countries/us.m3u |
+ 🇺🇸 United States | 1845 | https://iptv-org.github.io/iptv/countries/us.m3u |
Alabama | 4 | https://iptv-org.github.io/iptv/subdivisions/us-al.m3u |
Alaska | 2 | https://iptv-org.github.io/iptv/subdivisions/us-ak.m3u |
Arizona | 11 | https://iptv-org.github.io/iptv/subdivisions/us-az.m3u |
@@ -793,17 +793,17 @@ Same thing, but split up into separate files:
Africa | 424 | https://iptv-org.github.io/iptv/regions/afr.m3u |
- Americas | 3768 | https://iptv-org.github.io/iptv/regions/amer.m3u |
+ Americas | 3765 | https://iptv-org.github.io/iptv/regions/amer.m3u |
Arab world | 417 | https://iptv-org.github.io/iptv/regions/arab.m3u |
- Asia | 2937 | https://iptv-org.github.io/iptv/regions/asia.m3u |
+ Asia | 2935 | https://iptv-org.github.io/iptv/regions/asia.m3u |
Asia-Pacific | 1924 | https://iptv-org.github.io/iptv/regions/apac.m3u |
Association of Southeast Asian Nations | 471 | https://iptv-org.github.io/iptv/regions/asean.m3u |
Benelux | 240 | https://iptv-org.github.io/iptv/regions/benelux.m3u |
Caribbean | 251 | https://iptv-org.github.io/iptv/regions/carib.m3u |
Central America | 205 | https://iptv-org.github.io/iptv/regions/cenamer.m3u |
Central and Eastern Europe | 1020 | https://iptv-org.github.io/iptv/regions/cee.m3u |
- Central Asia | 65 | https://iptv-org.github.io/iptv/regions/cas.m3u |
- Commonwealth of Independent States | 461 | https://iptv-org.github.io/iptv/regions/cis.m3u |
+ Central Asia | 63 | https://iptv-org.github.io/iptv/regions/cas.m3u |
+ Commonwealth of Independent States | 459 | https://iptv-org.github.io/iptv/regions/cis.m3u |
Europe | 3240 | https://iptv-org.github.io/iptv/regions/eur.m3u |
Europe, the Middle East and Africa | 4047 | https://iptv-org.github.io/iptv/regions/emea.m3u |
Hispanic America | 1471 | https://iptv-org.github.io/iptv/regions/hispam.m3u |
@@ -813,8 +813,8 @@ Same thing, but split up into separate files:
Middle East | 688 | https://iptv-org.github.io/iptv/regions/mideast.m3u |
Middle East and North Africa | 739 | https://iptv-org.github.io/iptv/regions/mena.m3u |
Nordics | 96 | https://iptv-org.github.io/iptv/regions/nord.m3u |
- North America | 2579 | https://iptv-org.github.io/iptv/regions/noram.m3u |
- Northern America | 1982 | https://iptv-org.github.io/iptv/regions/nam.m3u |
+ North America | 2576 | https://iptv-org.github.io/iptv/regions/noram.m3u |
+ Northern America | 1979 | https://iptv-org.github.io/iptv/regions/nam.m3u |
Northern Europe | 125 | https://iptv-org.github.io/iptv/regions/neur.m3u |
Oceania | 68 | https://iptv-org.github.io/iptv/regions/oce.m3u |
South America | 1195 | https://iptv-org.github.io/iptv/regions/southam.m3u |