From b79b3336a0a3d16253a21354c5e9677eed18896c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Tue, 17 Dec 2024 16:31:16 +0100 Subject: [PATCH 01/64] chaines-tv.orange.fr : fix --- sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js index d8b49148..643be39c 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js @@ -16,7 +16,7 @@ module.exports = { const start = parseStart(item) const stop = parseStop(item, start) programs.push({ - title: item.season?.serie?.title ? item.season.serie.title : item.title, + title: item?.season?.serie?.title ? item.title : item?.season?.serie?.title, category: item.genreDetailed, description: item.synopsis, image: parseImage(item), From 5fd4eaf869faff73ed1d6be3d963cddc6c9447d5 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 15 Dec 2024 22:49:55 +0700 Subject: [PATCH 02/64] Update tvplus.com.tr guide. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: ```sh npm test -- tvplus.com.tr > test > run-script-os tvplus.com.tr > test:win32 > SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr PASS sites/tvplus.com.tr/tvplus.com.tr.test.js √ can generate valid url (4 ms) √ can parse response (15 ms) √ can handle empty guide Test Suites: 1 passed, 1 total Tests: 3 passed, 3 total Snapshots: 0 total Time: 3.648 s, estimated 4 s Ran all test suites matching /tvplus.com.tr/i. ``` Grab: ```sh npm run grab -- --site=tvplus.com.tr > grab > npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr starting... config: output: guide.xml maxConnections: 1 gzip: false site: tvplus.com.tr loading channels... found 10 channel(s) run #1: [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs) [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs) [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs) [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs) [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs) [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs) [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs) [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs) [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs) [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs) [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs) [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs) [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs) [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs) [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs) [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs) [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs) [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs) [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs) [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs) saving to "guide.xml"... done in 00h 02m 17s ``` Signed-off-by: Toha --- sites/tvplus.com.tr/__data__/content.json | 8691 +++++++++++++++++ .../tvplus.com.tr/tvplus.com.tr.channels.xml | 288 +- sites/tvplus.com.tr/tvplus.com.tr.config.js | 124 +- sites/tvplus.com.tr/tvplus.com.tr.test.js | 75 +- 4 files changed, 8934 insertions(+), 244 deletions(-) create mode 100644 sites/tvplus.com.tr/__data__/content.json diff --git a/sites/tvplus.com.tr/__data__/content.json b/sites/tvplus.com.tr/__data__/content.json new file mode 100644 index 00000000..953ac597 --- /dev/null +++ b/sites/tvplus.com.tr/__data__/content.json @@ -0,0 +1,8691 @@ +{ + "pageProps": { + "channelName": "Nick JR", + "allPlaybillList": [ + [ + { + "id": "195082880", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 00:10:00 UTC+03:00", + "endtime": "2024-12-14 00:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/96/2126321533085eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195082886", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 00:20:00 UTC+03:00", + "endtime": "2024-12-14 00:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/39/2126321533115eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195082892", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 00:25:00 UTC+03:00", + "endtime": "2024-12-14 00:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/9/2126321533145eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195082898", + "name": "Peppa Pig", + "starttime": "2024-12-14 00:35:00 UTC+03:00", + "endtime": "2024-12-14 00:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/55/2126321533175eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195082904", + "name": "Peppa Pig", + "starttime": "2024-12-14 00:40:00 UTC+03:00", + "endtime": "2024-12-14 00:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/87/2126321533205eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 121. Bölüm" + }, + { + "id": "195082910", + "name": "Peppa Pig", + "starttime": "2024-12-14 00:45:00 UTC+03:00", + "endtime": "2024-12-14 00:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/94/2126321533235eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 122. Bölüm" + }, + { + "id": "195082916", + "name": "Peppa Pig", + "starttime": "2024-12-14 00:50:00 UTC+03:00", + "endtime": "2024-12-14 00:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/27/2126321543265eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 123. Bölüm" + }, + { + "id": "195086634", + "name": "Minik Şef", + "starttime": "2024-12-14 00:55:00 UTC+03:00", + "endtime": "2024-12-14 01:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/94/2126321543295eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef yağmurlu bir gün Peynirli Makaroni yapar ama akan bir çatı ağaç kütüğü mutfağında kaos yaratır! Minik Şef korsan patates yahnisi pişiriyor ve özel malzemeyi bulmak için bir hazine haritası kullanıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195086640", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-14 01:15:00 UTC+03:00", + "endtime": "2024-12-14 01:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/92/2126321543325eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapa ailesi bir bisiklet gezintisi sırasında harabe halindeki eski bir ortaçağ kalesini keşfeder. Barbapapa ve Lolita bir balonla seyahat ederken fırtınaya yakalanırlar ve ıssız bir adada mahsur kalırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195086646", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-14 01:40:00 UTC+03:00", + "endtime": "2024-12-14 02:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/84/2126321543355eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195086652", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 02:00:00 UTC+03:00", + "endtime": "2024-12-14 02:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/55/2126321543385eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 614. Bölüm" + }, + { + "id": "195086658", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 02:25:00 UTC+03:00", + "endtime": "2024-12-14 02:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/95/2126321543415eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Boingi'ler adlı sevimli yaratıklar Axle Şehrinde kaybolunca onları bir araya getirip eve sağ salim varmalarını sağlamak Blaze ve AJ'ye düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 615. Bölüm" + }, + { + "id": "195086664", + "name": "Paw Patrol", + "starttime": "2024-12-14 02:50:00 UTC+03:00", + "endtime": "2024-12-14 03:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/92/2126321543445eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yarış günü gelir, Köpekçikler en hızlı kim anlamak için şehrin karşı yakasına kadar yarışacak. Bay Porter pasta yarışmasına katılır ve yardıma ihtiyaç duyar. Pastayı yapıp yarışmaya yetiştirmek için çabuk olmaları gerekecek!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 125. Bölüm" + }, + { + "id": "195086670", + "name": "Paw Patrol", + "starttime": "2024-12-14 03:10:00 UTC+03:00", + "endtime": "2024-12-14 03:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/53/2126321553475eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Birileri Kaptan Turbot'un teknesinden balık çaşıorıp duruyor, o da Ryder ve paw patrol'dan yardım istiyor. Chase, yeni ajan ekipmanıyla tekneyi inceleyip gğüvertenin altında bir grup penguen olduğunu keşfediyor", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195086676", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-14 03:30:00 UTC+03:00", + "endtime": "2024-12-14 03:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/30/2126321553505eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Super Shark ve Kaptan Kelp olarak Baby Shark ve William oyun süresinden tasarruf etmek için yola çıktılar ancak Kaptan Kelp sadece bir yardımcı mı? Baby Shark minicik bir evcil hayvanı sahipleniyor ama büyük bir sorumluluğa hazır mı?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195086682", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-14 03:55:00 UTC+03:00", + "endtime": "2024-12-14 04:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/67/2126321553535eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bay Katı'nın ikizlerinin ziyaretlerine gittiği Barbabebekler bir hazine avı düzenler ve manzaranın tadını çıkarırlar. Barbapapalar bahçede yeni bir maceraya atılır. Ancak doğada yaşamak beklediklerinden daha karmaşık çıkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195086688", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-14 04:15:00 UTC+03:00", + "endtime": "2024-12-14 04:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/97/2126321553565eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington, çalışması için arkadaşa ihtiyaç duyan PaddingTron adında bir robot yapar. Baaz herkesi onunla birlikte Diwali'yi kutlamaya davet eder ve Paddington yardımcısıdır, ama ikisi de havai fişek finalinin tadını çıkarabilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 305. Bölüm" + }, + { + "id": "195086694", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 04:40:00 UTC+03:00", + "endtime": "2024-12-14 05:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/66/2126321563595eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Café Carl'ın patlamış mısır restoranının inşaatı kontrolden çıkınca temizlik moduna geçer. Sabunlu kaza, İnşaatçı Koyu'nda kaygan bir kargaşaya neden olur. Yavrular Başkan Greatway için zamanında temizleyebilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195086700", + "name": "Kaşif Dora", + "starttime": "2024-12-14 05:00:00 UTC+03:00", + "endtime": "2024-12-14 05:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/15/2126321563625eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dora'nın yengeç arkadaşları evleniyor ama Swiper yüzüğü çalıyor ve okyanusta kaybediyor. Dora yüzüğü geri almak zorundadır! Dora ve Boots, Bulut Krallığı'na geri dönmek için ihtiyacı olan sihirli flütünü kaybeden Vicuña Vicky ile tanışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195086706", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 05:25:00 UTC+03:00", + "endtime": "2024-12-14 05:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/13/2126321563655eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Alçak bir suçlu Axle Şehri'ndeki tüm diş fırçalarını çaldığında Blaze'in günü kurtarmak için tek şansı Özel Görev Blaze'i olmaktır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 616. Bölüm" + }, + { + "id": "195086712", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-14 05:45:00 UTC+03:00", + "endtime": "2024-12-14 06:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/4/2126321563685eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, Atıştırmalık Molası sırasında Stump Band'e en iyi fıstık ezmeli ve jöleli sandviçleri yapar. Bugün Patates Günü, Henry'nin en sevdiği bayram! Şef, Henry'nin patates yemeğini yapar ancak Henry yemeğin adını hatırlamaz!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195086718", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-14 06:10:00 UTC+03:00", + "endtime": "2024-12-14 06:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/55/2126321573715eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rayna, William'dan sorumlu davranmasını isteyince William, Billiam adında yetişkin balık olmaya çalışır. Baby, Hank ve Goldie'nin birbirleriyle konuşmadıklarını fark edince onları tekrar bir araya getirmek için ayrıntılı bir plan yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195086724", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 06:30:00 UTC+03:00", + "endtime": "2024-12-14 06:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/27/2126321573745eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 218. Bölüm" + }, + { + "id": "195086730", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 06:40:00 UTC+03:00", + "endtime": "2024-12-14 06:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/31/2126321573775eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 219. Bölüm" + }, + { + "id": "195086736", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 06:45:00 UTC+03:00", + "endtime": "2024-12-14 06:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/49/2126321573805eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 220. Bölüm" + }, + { + "id": "195086742", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 06:50:00 UTC+03:00", + "endtime": "2024-12-14 07:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/53/2126321583835eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195086748", + "name": "Paw Patrol", + "starttime": "2024-12-14 07:00:00 UTC+03:00", + "endtime": "2024-12-14 07:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/46/2126321583865eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Başkan Humdinger'ın doğum günü partisi, Marshall Kitty'nin bir pinyatanın içinde sıkışıp kalmasıyla ters gider. Başkan Humdinger sisi Macera Koyu'na iterken, bulutlarda kaybolan hayvanları bulmak ve günü kurtarmak Paw Patrol'a düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1012. Bölüm" + }, + { + "id": "195086754", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-14 07:20:00 UTC+03:00", + "endtime": "2024-12-14 07:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/42/2126321583895eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 412. Bölüm" + }, + { + "id": "195086760", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 07:30:00 UTC+03:00", + "endtime": "2024-12-14 07:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/5/2126322163925eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hız Ustası'nın treni evcil hayvan oyun gününü kontrolden çıkarınca, Rubble ve Ekibi daha büyük, iyi ve güvenli bir tren ile günü kurtarır. Bark Yard denetimi bugün! Ama Motor patlayacak ve Ekibe altın yıldıza mal olacak mı?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195086766", + "name": "Peppa Pig", + "starttime": "2024-12-14 07:55:00 UTC+03:00", + "endtime": "2024-12-14 08:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/92/2126322163955eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195086772", + "name": "Peppa Pig", + "starttime": "2024-12-14 08:00:00 UTC+03:00", + "endtime": "2024-12-14 08:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/69/2126322173985eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195086778", + "name": "Peppa Pig", + "starttime": "2024-12-14 08:05:00 UTC+03:00", + "endtime": "2024-12-14 08:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/62/2126322174015eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195086784", + "name": "Peppa Pig", + "starttime": "2024-12-14 08:10:00 UTC+03:00", + "endtime": "2024-12-14 08:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/45/2126322184045eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ayakkabılarını kaybeder ama yeni, kırmızı ayakkabılara sahip olur. Ayakkabılar onu o kadar mutlu eder ki ayağından hiç çıkarmak istemez.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195086790", + "name": "Anna ve Dostları", + "starttime": "2024-12-14 08:15:00 UTC+03:00", + "endtime": "2024-12-14 08:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/8/2126322194075eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bubu, Christopher'a alerjileri anlatır. Anna'nın Froga'nın yanındayken kontrolsüzce hapşırdığını görünce Anna'nın ona alerjisi olduğunu anlar! Bir daha eskisi gibi olup olamayacaklarını merak ediyorlar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 174. Bölüm" + }, + { + "id": "195086796", + "name": "Anna ve Dostları", + "starttime": "2024-12-14 08:20:00 UTC+03:00", + "endtime": "2024-12-14 08:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/53/2126322194105eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Froga bahçesinde inanılmaz derecede büyük bir çilek bulduğunda hemen ona bağımlı hale gelir. Froga bir grup dev çilek daha keşfettiğinde olaylar doruğa ulaşır ve Anna bile kovulur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 175. Bölüm" + }, + { + "id": "195086802", + "name": "Minik Şef", + "starttime": "2024-12-14 08:30:00 UTC+03:00", + "endtime": "2024-12-14 08:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/53/2126322204135eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef, mahalleye taşınan bir uğurböceğini karşılamak için kurabiye pişirir. Minik Şef tavada tatlı bezelye yapar ve kendi başına yemek yapmakta zorlandığında arkadaşlarının iyi mutfak yardımcıları olduğunu öğrenir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195086808", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-14 08:50:00 UTC+03:00", + "endtime": "2024-12-14 09:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/45/2126322214165eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dünyanın en küçük şefi tarafından yaratılan, dünyanın en küçük yemek programında, dünyanın en küçük yemekleri.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195086814", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 09:00:00 UTC+03:00", + "endtime": "2024-12-14 09:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/53/2126322214195eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Ezici ve Turşu, Blazeve arkadaşlarını yelkenli yarışına davet eder. Ama hile yapmaya çalışan Ezici iki tekneyi de tropik bir adaya çarptırır. Şimdi Blaze ve arkadaşlarının eve dönmek için teknelerin eksik parçalarını bulmaları gerekiyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195086820", + "name": "Hamster Diyarı", + "starttime": "2024-12-14 09:25:00 UTC+03:00", + "endtime": "2024-12-14 09:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/24/2126322214225eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hamsterlar, Num-Nuggtets adasını bulmak için Harry'nin yanardağına girerler ve kendilerini bilim fuarında bulurlar. / Hamsterlar Kral Harry'nin sihirli bir şekilde patatese dönüştüğüne inanırlar ve onu normale döndürmeye yemin ederler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195086826", + "name": "Paw Patrol", + "starttime": "2024-12-14 09:45:00 UTC+03:00", + "endtime": "2024-12-14 10:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/30/2126322214255eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kaptan Turbot ve kuzeni Francois, bir çift dağ keçisini gözlemlerken aniden çığ düşer. Çiftçi Al, mısır tarlasında gizemli hasat çemberleri bulur ve neler olduğunu öğrenmek için Paw Patrol'ü arar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "11. Sezon - 1108. Bölüm" + }, + { + "id": "195086832", + "name": "Paw Patrol", + "starttime": "2024-12-14 10:10:00 UTC+03:00", + "endtime": "2024-12-14 10:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/76/2126322214285eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Belediye Binası'nda verilen Şükran Günü yemeğindeki hindi Humdinger ve yavrularıyla kaçar! Güçlü bir rüzgar Macera Koyu Rüzgar Sörfü Yarışındaki bütün sörfçüleri alır götürür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 522. Bölüm" + }, + { + "id": "195086838", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-14 10:30:00 UTC+03:00", + "endtime": "2024-12-14 10:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/83/2126322214315eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kaptan Turbot, nadir bulunan bir kuşun fotoğrafını çekmeye karar veriyor, Fransız kuzeni yardım etmek istiyor, fakat bir uçurumda mahsur kalıyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 123. Bölüm" + }, + { + "id": "195086844", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 10:40:00 UTC+03:00", + "endtime": "2024-12-14 11:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/79/2126322214345eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Paw Patrol'dan Marshall'ın denetimiyle İnşaatçı Koyu'nun ilk İtfaiye İstasyonunu inşa ediyor! Ancak Speed Meister'ın sabotajı Marshall'ın İtfaiye Aracını tuzağa düşürünce, yavrular söndürmek için birlikte çalışırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 111. Bölüm" + }, + { + "id": "195086850", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 11:05:00 UTC+03:00", + "endtime": "2024-12-14 11:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/32/2126322224375eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "En sevdikleri TV yıldızı Hank Hammer iş yerinde görmeye geldiğinde yavrular çok şaşırıyor. Kaptan Turbot, Başkan Greatway'e sürpriz getiriyor. Ama yoğun sis bastırınca, yavruların hemen deniz feneri inşa etmeleri gerekiyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195086856", + "name": "Kaşif Dora", + "starttime": "2024-12-14 11:30:00 UTC+03:00", + "endtime": "2024-12-14 11:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/98/2126322224405eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Boots bir gezinti için çok kısa, büyük olmayı diliyor ve devleşiyor! Dora normal boyuna dönmesine yardım ediyor. Sırt Çantası'nda Dora için özel bir şey var ama Dora açamıyor! Onu tamir edebilmesi için En Yüksek Dağ'daki Abuela'ya giderler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195086862", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-14 11:50:00 UTC+03:00", + "endtime": "2024-12-14 12:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/56/2126322224435eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Vola, Goldie, Chucks ve Hank, Baby ve William'ın sır sakladığını öğrenince dışlanmış hissederler. İlk büyük TV röportajlarına hazırlanmak için Fishy Force, tıpkı en sevdikleri çizgi roman kahramanları gibi olmak için antrenman yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 221. Bölüm" + }, + { + "id": "195086868", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 12:15:00 UTC+03:00", + "endtime": "2024-12-14 12:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/99/2126322224465eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195086874", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 12:20:00 UTC+03:00", + "endtime": "2024-12-14 12:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/83/2126322224495eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195086880", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 12:25:00 UTC+03:00", + "endtime": "2024-12-14 12:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/0/2126322224525eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195086886", + "name": "Peppa Pig", + "starttime": "2024-12-14 12:35:00 UTC+03:00", + "endtime": "2024-12-14 12:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/40/2126322224555eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195086892", + "name": "Peppa Pig", + "starttime": "2024-12-14 12:40:00 UTC+03:00", + "endtime": "2024-12-14 12:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/90/2126322224585eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 121. Bölüm" + }, + { + "id": "195086898", + "name": "Peppa Pig", + "starttime": "2024-12-14 12:45:00 UTC+03:00", + "endtime": "2024-12-14 12:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/38/2126322234615eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 122. Bölüm" + }, + { + "id": "195086904", + "name": "Peppa Pig", + "starttime": "2024-12-14 12:50:00 UTC+03:00", + "endtime": "2024-12-14 12:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/64/2126322234645eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 123. Bölüm" + }, + { + "id": "195086910", + "name": "Minik Şef", + "starttime": "2024-12-14 12:55:00 UTC+03:00", + "endtime": "2024-12-14 13:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/89/2126322234675eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef yağmurlu bir gün Peynirli Makaroni yapar ama akan bir çatı ağaç kütüğü mutfağında kaos yaratır! Minik Şef korsan patates yahnisi pişiriyor ve özel malzemeyi bulmak için bir hazine haritası kullanıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195086916", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-14 13:15:00 UTC+03:00", + "endtime": "2024-12-14 13:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/72/2126322234705eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapa ailesi bir bisiklet gezintisi sırasında harabe halindeki eski bir ortaçağ kalesini keşfeder. Barbapapa ve Lolita bir balonla seyahat ederken fırtınaya yakalanırlar ve ıssız bir adada mahsur kalırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195086922", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-14 13:40:00 UTC+03:00", + "endtime": "2024-12-14 14:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/8/2126322234735eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195086928", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 14:00:00 UTC+03:00", + "endtime": "2024-12-14 14:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/76/2126322234765eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 614. Bölüm" + }, + { + "id": "195086934", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 14:25:00 UTC+03:00", + "endtime": "2024-12-14 14:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/60/2126322234795eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Boingi'ler adlı sevimli yaratıklar Axle Şehrinde kaybolunca onları bir araya getirip eve sağ salim varmalarını sağlamak Blaze ve AJ'ye düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 615. Bölüm" + }, + { + "id": "195086940", + "name": "Paw Patrol", + "starttime": "2024-12-14 14:50:00 UTC+03:00", + "endtime": "2024-12-14 15:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/72/2126322244825eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yarış günü gelir, Köpekçikler en hızlı kim anlamak için şehrin karşı yakasına kadar yarışacak. Bay Porter pasta yarışmasına katılır ve yardıma ihtiyaç duyar. Pastayı yapıp yarışmaya yetiştirmek için çabuk olmaları gerekecek!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 125. Bölüm" + }, + { + "id": "195086946", + "name": "Paw Patrol", + "starttime": "2024-12-14 15:10:00 UTC+03:00", + "endtime": "2024-12-14 15:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/78/2126322244855eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Birileri Kaptan Turbot'un teknesinden balık çaşıorıp duruyor, o da Ryder ve paw patrol'dan yardım istiyor. Chase, yeni ajan ekipmanıyla tekneyi inceleyip gğüvertenin altında bir grup penguen olduğunu keşfediyor", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195086952", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-14 15:35:00 UTC+03:00", + "endtime": "2024-12-14 15:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/39/2126322244885eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Super Shark ve Kaptan Kelp olarak Baby Shark ve William oyun süresinden tasarruf etmek için yola çıktılar ancak Kaptan Kelp sadece bir yardımcı mı? Baby Shark minicik bir evcil hayvanı sahipleniyor ama büyük bir sorumluluğa hazır mı?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195086958", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-14 15:55:00 UTC+03:00", + "endtime": "2024-12-14 16:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/65/2126322244915eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bay Katı'nın ikizlerinin ziyaretlerine gittiği Barbabebekler bir hazine avı düzenler ve manzaranın tadını çıkarırlar. Barbapapalar bahçede yeni bir maceraya atılır. Ancak doğada yaşamak beklediklerinden daha karmaşık çıkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195086964", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-14 16:15:00 UTC+03:00", + "endtime": "2024-12-14 16:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/91/2126322244945eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington, çalışması için arkadaşa ihtiyaç duyan PaddingTron adında bir robot yapar. Baaz herkesi onunla birlikte Diwali'yi kutlamaya davet eder ve Paddington yardımcısıdır, ama ikisi de havai fişek finalinin tadını çıkarabilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 305. Bölüm" + }, + { + "id": "195086970", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 16:40:00 UTC+03:00", + "endtime": "2024-12-14 17:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/93/2126322244975eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Café Carl'ın patlamış mısır restoranının inşaatı kontrolden çıkınca temizlik moduna geçer. Sabunlu kaza, İnşaatçı Koyu'nda kaygan bir kargaşaya neden olur. Yavrular Başkan Greatway için zamanında temizleyebilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195086976", + "name": "Kaşif Dora", + "starttime": "2024-12-14 17:00:00 UTC+03:00", + "endtime": "2024-12-14 17:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/13/2126322245005eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dora'nın yengeç arkadaşları evleniyor ama Swiper yüzüğü çalıyor ve okyanusta kaybediyor. Dora yüzüğü geri almak zorundadır! Dora ve Boots, Bulut Krallığı'na geri dönmek için ihtiyacı olan sihirli flütünü kaybeden Vicuña Vicky ile tanışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195086982", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 17:25:00 UTC+03:00", + "endtime": "2024-12-14 17:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/84/2126322255035eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Alçak bir suçlu Axle Şehri'ndeki tüm diş fırçalarını çaldığında Blaze'in günü kurtarmak için tek şansı Özel Görev Blaze'i olmaktır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 616. Bölüm" + }, + { + "id": "195086988", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-14 17:45:00 UTC+03:00", + "endtime": "2024-12-14 18:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/63/2126322255065eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, Atıştırmalık Molası sırasında Stump Band'e en iyi fıstık ezmeli ve jöleli sandviçleri yapar. Bugün Patates Günü, Henry'nin en sevdiği bayram! Şef, Henry'nin patates yemeğini yapar ancak Henry yemeğin adını hatırlamaz!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195086994", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-14 18:10:00 UTC+03:00", + "endtime": "2024-12-14 18:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/82/2126322255095eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rayna, William'dan sorumlu davranmasını isteyince William, Billiam adında yetişkin balık olmaya çalışır. Baby, Hank ve Goldie'nin birbirleriyle konuşmadıklarını fark edince onları tekrar bir araya getirmek için ayrıntılı bir plan yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195087000", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 18:30:00 UTC+03:00", + "endtime": "2024-12-14 18:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/51/2126322255125eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 218. Bölüm" + }, + { + "id": "195087006", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 18:40:00 UTC+03:00", + "endtime": "2024-12-14 18:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/37/2126322255155eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 219. Bölüm" + }, + { + "id": "195087012", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 18:45:00 UTC+03:00", + "endtime": "2024-12-14 18:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/47/2126322255185eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 220. Bölüm" + }, + { + "id": "195087018", + "name": "Camgöz (2020)", + "starttime": "2024-12-14 18:50:00 UTC+03:00", + "endtime": "2024-12-14 19:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/42/2126322255215eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195087024", + "name": "Paw Patrol", + "starttime": "2024-12-14 19:00:00 UTC+03:00", + "endtime": "2024-12-14 19:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/21/2126322265245eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Başkan Humdinger'ın doğum günü partisi, Marshall Kitty'nin bir pinyatanın içinde sıkışıp kalmasıyla ters gider. Başkan Humdinger sisi Macera Koyu'na iterken, bulutlarda kaybolan hayvanları bulmak ve günü kurtarmak Paw Patrol'a düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1012. Bölüm" + }, + { + "id": "195087030", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-14 19:20:00 UTC+03:00", + "endtime": "2024-12-14 19:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/15/2126322265275eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 412. Bölüm" + }, + { + "id": "195087036", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 19:30:00 UTC+03:00", + "endtime": "2024-12-14 20:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/37/2126322265305eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hız Ustası'nın treni evcil hayvan oyun gününü kontrolden çıkarınca, Rubble ve Ekibi daha büyük, iyi ve güvenli bir tren ile günü kurtarır. Bark Yard denetimi bugün! Ama Motor patlayacak ve Ekibe altın yıldıza mal olacak mı?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195087042", + "name": "Kaşif Dora", + "starttime": "2024-12-14 20:00:00 UTC+03:00", + "endtime": "2024-12-14 20:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/86/2126322265335eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Swiper görünmezlik örtüsü çalıyor! Görünmez Arakcı artık her şeyi silip süpürüyor ve onu durdurmak Dora ve Boots'a düşüyor. Dora'nın ailesi Mami'nin doğum günü için bir pinyata yapıyor, ama uçup gidiyor! Onu güvenli bir şekilde geri almak zorunda.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195087048", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-14 20:20:00 UTC+03:00", + "endtime": "2024-12-14 20:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/10/2126322265365eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabebekler TV'ye yapıştı. TV'yi çok sevdikleri için ebeveynleri onları kendi şovlarını yapmaya teşvik eder. Barbababa evrim müzesini ziyaret eder. Program: Dünya'nın yaratılışı, Prekambriyen denizaltısı ve... dinozorlar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 123. Bölüm" + }, + { + "id": "195087054", + "name": "Hamster Diyarı", + "starttime": "2024-12-14 20:40:00 UTC+03:00", + "endtime": "2024-12-14 21:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/51/2126322265395eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hamsterlar, babalarının alçak bir şövalye rolü oynadığını duyar ve onun şeytana dönüştüğüne inanırlar. Mondo, Harry'nin sihir gösterisinde süper kahraman hayatı ile en iyi arkadaşını kurtarmak arasında seçim yapmak zorundadır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 103. Bölüm" + }, + { + "id": "195087060", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 21:00:00 UTC+03:00", + "endtime": "2024-12-14 21:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/48/2126322275425eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bütün kamyonların ikili takımlar halinde yarıştığı Kamyon Takım Mücadelesi günü gelir çatar! Ezici, Turşu yerine yeni bir takım arkadaşı seçince hayal kırıklığına uğrayan Turşu kendini kanıtlamak için Blaze'le takım olur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195087066", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-14 21:25:00 UTC+03:00", + "endtime": "2024-12-14 21:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/63/2126322275455eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve AJ arkadaşları Çizgili'ye birkaç yavru hayvana bakması içiin yardım ederken küçük hayvanlar yanlışlıkla büyük baloncuklar üzerinde uzaklaşır. Küçük dostlarını bulup günü kurtarmak da bu üç bebek bakıcısına kalır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 504. Bölüm" + }, + { + "id": "195087072", + "name": "Paw Patrol", + "starttime": "2024-12-14 21:45:00 UTC+03:00", + "endtime": "2024-12-14 22:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/72/2126322275485eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Alex ve Bay Porter tropik bir adada kamp yaparken çılgın bir kar fırtınasına yakalanırlar. Bay Porter ünlü köpüren turşularından dağıtırken yoldaki tümsekler siparişleri karıştırır ve turşular patlamaya başlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 523. Bölüm" + }, + { + "id": "195087078", + "name": "Paw Patrol", + "starttime": "2024-12-14 22:10:00 UTC+03:00", + "endtime": "2024-12-14 22:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/38/2126322285515eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yumi'nin yeni robot mısır toplayıcısı kontrolden çıkınca Ryder ve Paw Patrol onu sakinleştirmeye çalışır. Cesur Danny X Macera Koyu için Kuş X kostümü giyince bir çift kartal onu yavrusu sanıp yanlarında götürür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 524. Bölüm" + }, + { + "id": "195087084", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-14 22:30:00 UTC+03:00", + "endtime": "2024-12-14 22:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/65/2126322285545eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Başkan Goodway yanlışlıkla bir balonla yükseldiğinde, Ryder ve Paw Patrol onu kurtarmak ve yarışı kazanmak için bir kurtarma operasyonuna başlıyo.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195087090", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 22:40:00 UTC+03:00", + "endtime": "2024-12-14 23:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/69/2126322285575eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dinozor kemiklerini çıkardıktan sonra, yavrular dinozor müzesi inşa etmeye karar verirler! Posta Taşıyıcısı Omar ayağını kırdığında, kasabaya rampalar inşa ederek dağıtmaya devam edebilmesini sağlamak yavrulara düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195087096", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-14 23:05:00 UTC+03:00", + "endtime": "2024-12-14 23:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/86/2126322285605eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Sıçrama parkı planları sorunlu sularda yüzen yavrular, kasabayı yaz boyunca serinletmek için yaratıcı olmak zorunda. Yavrular Lucas ve Lily için oyun odası inşa etmeye çalışırken, sincap bir ziyaretçi inşaatta sorunlara neden olur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195087102", + "name": "Kaşif Dora", + "starttime": "2024-12-14 23:30:00 UTC+03:00", + "endtime": "2024-12-14 23:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/53/2126322285635eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Swiper görünmezlik örtüsü çalıyor! Görünmez Arakcı artık her şeyi silip süpürüyor ve onu durdurmak Dora ve Boots'a düşüyor. Dora'nın ailesi Mami'nin doğum günü için bir pinyata yapıyor, ama uçup gidiyor! Onu güvenli bir şekilde geri almak zorunda.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195087108", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-14 23:50:00 UTC+03:00", + "endtime": "2024-12-15 00:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241208/66/2126322285665eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Fishy Force, Carnivore Koy'daki tüm ikramları çalan bir kötü adamla mücadele ediyor. Costello işi bırakınca Vigo, balıkları olmadan süper kötü olmaya karar verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 222. Bölüm" + } + ], + [ + { + "id": "195140786", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 00:10:00 UTC+03:00", + "endtime": "2024-12-15 00:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/21/2126356250845eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195140792", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 00:20:00 UTC+03:00", + "endtime": "2024-12-15 00:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/75/2126356250875eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195140798", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 00:25:00 UTC+03:00", + "endtime": "2024-12-15 00:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/65/2126356260905eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195140804", + "name": "Peppa Pig", + "starttime": "2024-12-15 00:35:00 UTC+03:00", + "endtime": "2024-12-15 00:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/32/2126356260935eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 127. Bölüm" + }, + { + "id": "195140810", + "name": "Peppa Pig", + "starttime": "2024-12-15 00:40:00 UTC+03:00", + "endtime": "2024-12-15 00:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/29/2126356260965eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 128. Bölüm" + }, + { + "id": "195140816", + "name": "Peppa Pig", + "starttime": "2024-12-15 00:45:00 UTC+03:00", + "endtime": "2024-12-15 00:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/5/2126356260995eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 129. Bölüm" + }, + { + "id": "195140822", + "name": "Peppa Pig", + "starttime": "2024-12-15 00:50:00 UTC+03:00", + "endtime": "2024-12-15 00:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/89/2126356261025eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anne ve Baba Domuz akşam dışarı çıkınca, Peppa ve George'a Büyükanne ve Büyükbaba Domuz bakar. Peppa ve George'un uykusu gelmeyince Büyükanne ve Büyükbaba Domuz onları yormaya çalışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 130. Bölüm" + }, + { + "id": "195140828", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-15 00:55:00 UTC+03:00", + "endtime": "2024-12-15 01:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/83/2126356261055eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, sürpriz doğum günü kahvaltısı için Olly'nin en sevdiği çörekleri onu uyandırmadan pişirmeye çalışır. Şef ve Olly bir yandan on iki uğur böceği bebeğe bakıcılık yaparken bir yandan da onlara atıştırmalık bir şeyler hazırlamaya çalışırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195140834", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-15 01:15:00 UTC+03:00", + "endtime": "2024-12-15 01:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/3/2126356271085eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapa, François'nın ailesinin onun için inşa ettiği eve sığınır. Barbapapa'nın evi, Barbaanne ve Barbabébé'nin hayatına girmesiyle artık çok küçüktür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195142504", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-15 01:40:00 UTC+03:00", + "endtime": "2024-12-15 02:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/65/2126356271115eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195142510", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 02:00:00 UTC+03:00", + "endtime": "2024-12-15 02:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/94/2126356271145eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 617. Bölüm" + }, + { + "id": "195142516", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 02:25:00 UTC+03:00", + "endtime": "2024-12-15 02:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/93/2126356271175eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 618. Bölüm" + }, + { + "id": "195142522", + "name": "Paw Patrol", + "starttime": "2024-12-15 02:50:00 UTC+03:00", + "endtime": "2024-12-15 03:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/18/2126356271205eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dünya dışı bir uay gemisi, çiftçi Yumi'nin topraklarına düşer! Paw Patrol, Zor duırumdaki kalan küçük uzaylıya yardım edip gemisini tamir edip gezegenine dönmesini yardım etmek için kolları sıvar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195142528", + "name": "Paw Patrol", + "starttime": "2024-12-15 03:10:00 UTC+03:00", + "endtime": "2024-12-15 03:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/43/2126356271235eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Jake ve Chase mağara keşif geziindeylen, Jake'in bileği düşen kayalara sıkışıp kalıyor! Alex, macera körfezi resmi geçidi gününde, Katie'nin yüzen küvetine fazla balon bağlayınca, küvet uçmaya başlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195142534", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-15 03:30:00 UTC+03:00", + "endtime": "2024-12-15 03:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/95/2126356271265eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark'ın popülaritesini kıskanan Shadow, Wreck'i kendi kişisel eğlence parkı olarak yeniden markalaştırıyor. Baby Shark ve arkadaşları şövalyeler ve asiller oynarken Vola bir prensesden daha fazlası olmak ister.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195142540", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-15 03:55:00 UTC+03:00", + "endtime": "2024-12-15 04:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/88/2126356271295eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kimyasal spreyler kırları pembe yapar! Barbapapalar hasta kuşları korumak için bir büyük kuş evi inşa eder. Aile çöplerle kaplı bir kumsal görür ve sahili temizleyip, çöplerden minyatür golf sahası yapmaya karar verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195142546", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-15 04:15:00 UTC+03:00", + "endtime": "2024-12-15 04:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/47/2126356281325eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington ilk güneş tutulmasının tadını çıkarmak için zamana karşı yarışıyor. Paddington, Simi için bir mucit ödülünü kabul ediyor ama Simi neden daha sonra kıskançlık ve üzüntü duyuyor?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 306. Bölüm" + }, + { + "id": "195142552", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 04:40:00 UTC+03:00", + "endtime": "2024-12-15 05:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/86/2126356281355eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Charger'ın bir sorunu var. Çok fazla enerjisi var! Moloztaş ve Ekibi her zaman bir inşaat çözümü olduğunu biliyor. Moloztaş ve yavruları Mix, Motor, Lucas ve Lily'ye havalı Süper Kıvrak Sincap oyun gününü inşa ediyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195142558", + "name": "Kaşif Dora", + "starttime": "2024-12-15 05:00:00 UTC+03:00", + "endtime": "2024-12-15 05:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/45/2126356281385eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dora ve Boots, genç yağmur bulutu Claudia'yı kuru bir su kaydırağında yağmur yağdırmaya götürür. Boots, arkadaşlarına yardım ederek sihirli çizgilerini elde ederse Kurbağa Ranita'nın tedavi edebileceği bir Gıdıklama Kuyruğu vakasına yakalanır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195142564", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 05:25:00 UTC+03:00", + "endtime": "2024-12-15 05:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/86/2126356281415eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyük bir kayak kazası Crusher ve Pickle'ın çok uzaklarda mahsur kalmasına neden olduğunda Blaze ve AJ tehlikeli bir kurtarma görevine çıkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 619. Bölüm" + }, + { + "id": "195142570", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-15 05:45:00 UTC+03:00", + "endtime": "2024-12-15 06:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/89/2126356281445eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Morton'un yol atıştırmalığı düşünce Şef ve Olly ona yolculuğu için en iyi atıştırmalığı yapmak üzerine yarışır. İlk aşçılık deneyimi için çok hevesli olan biri, Şef ve Olly'ye nachos yapımında yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195142576", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-15 06:10:00 UTC+03:00", + "endtime": "2024-12-15 06:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/37/2126356281475eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bebek Köpekbalığı, aile müzik grubunda çalması için annesinin mükemmel müzik aletini bulmasına yardım ediyor. Baba, Büyükbaba ve Bebek ChewTube'da komik bir videosunu yayınladıktan sonra utanır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195142582", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 06:30:00 UTC+03:00", + "endtime": "2024-12-15 06:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/31/2126356281505eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 102. Bölüm" + }, + { + "id": "195142588", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 06:40:00 UTC+03:00", + "endtime": "2024-12-15 06:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/5/2126356281535eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 103. Bölüm" + }, + { + "id": "195142594", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 06:45:00 UTC+03:00", + "endtime": "2024-12-15 06:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/36/2126356291565eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 104. Bölüm" + }, + { + "id": "195142600", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 06:50:00 UTC+03:00", + "endtime": "2024-12-15 07:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/58/2126356291595eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in babası Yılın Bahçesi ödülünü almayı çok ister ama Camgöz değerlendirmeden kısa bir süre önce bahçeyi mahvedince Köpek Balığı Sürüsü devreye girip her şeyi düzeltmesi gerekecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195142606", + "name": "Paw Patrol", + "starttime": "2024-12-15 07:00:00 UTC+03:00", + "endtime": "2024-12-15 07:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/17/2126356291625eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yavru bir geyik bir dağın yamacından aşağı hızla yuvarlanır. Yavruyu kurtarmak ve ailesine kavuşturmak Paw Patrol'a düşer. Luke Stars dev bir yuvarlanan otun içinde havaya uçtuğunda, Digi ve Tal kontrolden çıkan bir kopya yaparlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1015. Bölüm" + }, + { + "id": "195142612", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-15 07:20:00 UTC+03:00", + "endtime": "2024-12-15 07:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/14/2126356291655eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 414. Bölüm" + }, + { + "id": "195142618", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 07:30:00 UTC+03:00", + "endtime": "2024-12-15 07:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/81/2126356291685eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Çiftçi Zoe'nin yeni ineği Mooreen'i karşılamak için İnşaatçı Koyu'ndaki ilk tren istasyonunu inşa ediyor. Popstar Parıltılı Sierra Koy'a taşınıyor! Yavrular sürpriz bir karşılama planlayınca, Hız Ustası kendi planını yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195142624", + "name": "Peppa Pig", + "starttime": "2024-12-15 07:55:00 UTC+03:00", + "endtime": "2024-12-15 08:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/28/2126356291715eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195142630", + "name": "Peppa Pig", + "starttime": "2024-12-15 08:00:00 UTC+03:00", + "endtime": "2024-12-15 08:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/63/2126356301745eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 124. Bölüm" + }, + { + "id": "195142636", + "name": "Peppa Pig", + "starttime": "2024-12-15 08:05:00 UTC+03:00", + "endtime": "2024-12-15 08:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/32/2126356301775eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 125. Bölüm" + }, + { + "id": "195142642", + "name": "Peppa Pig", + "starttime": "2024-12-15 08:10:00 UTC+03:00", + "endtime": "2024-12-15 08:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/67/2126356301805eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 126. Bölüm" + }, + { + "id": "195142648", + "name": "Anna ve Dostları", + "starttime": "2024-12-15 08:15:00 UTC+03:00", + "endtime": "2024-12-15 08:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/56/2126356301835eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bitkileriyle çok konuştuktan sonra Froga, SESSİZLİK oynayarak dinlenmeye karar verir. Dostlarının onu konuşturmaya çalışması eğlenceli bir meydan okuma haline gelir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 176. Bölüm" + }, + { + "id": "195142654", + "name": "Anna ve Dostları", + "starttime": "2024-12-15 08:20:00 UTC+03:00", + "endtime": "2024-12-15 08:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/26/2126356301865eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Froga Eğlenceli Fotoğraflar Albümü'nü karıştırırken Anna'nın eğlenceli bir fotoğrafının olmamasına şaşırır! Durumu düzeltmek için yola çıkan Froga, Anna'nın komik bir fotoğrafını çekmek için yardım alır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 177. Bölüm" + }, + { + "id": "195142660", + "name": "Minik Şef", + "starttime": "2024-12-15 08:30:00 UTC+03:00", + "endtime": "2024-12-15 08:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/67/2126356301895eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef, büyük yarışma için elmalı turta pişiriyor ve bir kazadan sonra giriş bulmak için hızlı düşünmek zorunda. Minik Şef piknik için Guakamole yapar, arkadaşları mutfak aletlerini kullanarak yardım edince paylaşmayı öğrenmeli.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195142666", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-15 08:50:00 UTC+03:00", + "endtime": "2024-12-15 09:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/37/2126356301925eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dünyanın en küçük şefi tarafından yaratılan, dünyanın en küçük yemek programında, dünyanın en küçük yemekleri.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195142672", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 09:00:00 UTC+03:00", + "endtime": "2024-12-15 09:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/56/2126356301955eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bütün kamyonların ikili takımlar halinde yarıştığı Kamyon Takım Mücadelesi günü gelir çatar! Ezici, Turşu yerine yeni bir takım arkadaşı seçince hayal kırıklığına uğrayan Turşu kendini kanıtlamak için Blaze'le takım olur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195142678", + "name": "Hamster Diyarı", + "starttime": "2024-12-15 09:25:00 UTC+03:00", + "endtime": "2024-12-15 09:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/76/2126356311985eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Greg, arkadaşlarına korkutucu bir numara yapmak zorunda kalmamak için yaralı numarası yapar. Bir saklambaç oyunu sırasında Lil Pal o kadar iyi saklanır ki bulunamaz.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195142684", + "name": "Paw Patrol", + "starttime": "2024-12-15 09:45:00 UTC+03:00", + "endtime": "2024-12-15 10:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/25/2126356312015eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Alex ve Bay Porter tropik bir adada kamp yaparken çılgın bir kar fırtınasına yakalanırlar. Bay Porter ünlü köpüren turşularından dağıtırken yoldaki tümsekler siparişleri karıştırır ve turşular patlamaya başlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 523. Bölüm" + }, + { + "id": "195142690", + "name": "Paw Patrol", + "starttime": "2024-12-15 10:10:00 UTC+03:00", + "endtime": "2024-12-15 10:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/4/2126356312045eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yumi'nin yeni robot mısır toplayıcısı kontrolden çıkınca Ryder ve Paw Patrol onu sakinleştirmeye çalışır. Cesur Danny X Macera Koyu için Kuş X kostümü giyince bir çift kartal onu yavrusu sanıp yanlarında götürür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 524. Bölüm" + }, + { + "id": "195142696", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-15 10:30:00 UTC+03:00", + "endtime": "2024-12-15 10:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/82/2126356312075eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Başkan Goodway yanlışlıkla bir balonla yükseldiğinde, Ryder ve Paw Patrol onu kurtarmak ve yarışı kazanmak için bir kurtarma operasyonuna başlıyo.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195142702", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 10:40:00 UTC+03:00", + "endtime": "2024-12-15 11:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/37/2126356312105eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dinozor kemiklerini çıkardıktan sonra, yavrular dinozor müzesi inşa etmeye karar verirler! Posta Taşıyıcısı Omar ayağını kırdığında, kasabaya rampalar inşa ederek dağıtmaya devam edebilmesini sağlamak yavrulara düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195142708", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 11:05:00 UTC+03:00", + "endtime": "2024-12-15 11:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/31/2126356312135eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Sıçrama parkı planları sorunlu sularda yüzen yavrular, kasabayı yaz boyunca serinletmek için yaratıcı olmak zorunda. Yavrular Lucas ve Lily için oyun odası inşa etmeye çalışırken, sincap bir ziyaretçi inşaatta sorunlara neden olur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195142714", + "name": "Kaşif Dora", + "starttime": "2024-12-15 11:30:00 UTC+03:00", + "endtime": "2024-12-15 11:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/30/2126356312165eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Swiper görünmezlik örtüsü çalıyor! Görünmez Arakcı artık her şeyi silip süpürüyor ve onu durdurmak Dora ve Boots'a düşüyor. Dora'nın ailesi Mami'nin doğum günü için bir pinyata yapıyor, ama uçup gidiyor! Onu güvenli bir şekilde geri almak zorunda.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195142720", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-15 11:50:00 UTC+03:00", + "endtime": "2024-12-15 12:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/58/2126356322195eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Fishy Force, Carnivore Koy'daki tüm ikramları çalan bir kötü adamla mücadele ediyor. Costello işi bırakınca Vigo, balıkları olmadan süper kötü olmaya karar verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 222. Bölüm" + }, + { + "id": "195142726", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 12:15:00 UTC+03:00", + "endtime": "2024-12-15 12:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/58/2126356322225eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195142732", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 12:20:00 UTC+03:00", + "endtime": "2024-12-15 12:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/49/2126356322255eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195142738", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 12:25:00 UTC+03:00", + "endtime": "2024-12-15 12:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/50/2126356322285eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195142744", + "name": "Peppa Pig", + "starttime": "2024-12-15 12:35:00 UTC+03:00", + "endtime": "2024-12-15 12:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/65/2126356322315eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 127. Bölüm" + }, + { + "id": "195142750", + "name": "Peppa Pig", + "starttime": "2024-12-15 12:40:00 UTC+03:00", + "endtime": "2024-12-15 12:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/20/2126356322345eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 128. Bölüm" + }, + { + "id": "195142756", + "name": "Peppa Pig", + "starttime": "2024-12-15 12:45:00 UTC+03:00", + "endtime": "2024-12-15 12:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/62/2126356332375eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 129. Bölüm" + }, + { + "id": "195142762", + "name": "Peppa Pig", + "starttime": "2024-12-15 12:50:00 UTC+03:00", + "endtime": "2024-12-15 12:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/31/2126356332405eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anne ve Baba Domuz akşam dışarı çıkınca, Peppa ve George'a Büyükanne ve Büyükbaba Domuz bakar. Peppa ve George'un uykusu gelmeyince Büyükanne ve Büyükbaba Domuz onları yormaya çalışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 130. Bölüm" + }, + { + "id": "195142768", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-15 12:55:00 UTC+03:00", + "endtime": "2024-12-15 13:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/74/2126356332435eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, sürpriz doğum günü kahvaltısı için Olly'nin en sevdiği çörekleri onu uyandırmadan pişirmeye çalışır. Şef ve Olly bir yandan on iki uğur böceği bebeğe bakıcılık yaparken bir yandan da onlara atıştırmalık bir şeyler hazırlamaya çalışırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195142774", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-15 13:15:00 UTC+03:00", + "endtime": "2024-12-15 13:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/20/2126356332465eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapa, François'nın ailesinin onun için inşa ettiği eve sığınır. Barbapapa'nın evi, Barbaanne ve Barbabébé'nin hayatına girmesiyle artık çok küçüktür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195142780", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-15 13:40:00 UTC+03:00", + "endtime": "2024-12-15 14:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/54/2126356332495eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195142786", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 14:00:00 UTC+03:00", + "endtime": "2024-12-15 14:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/64/2126356332525eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 617. Bölüm" + }, + { + "id": "195142792", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 14:25:00 UTC+03:00", + "endtime": "2024-12-15 14:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/52/2126356332555eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 618. Bölüm" + }, + { + "id": "195142798", + "name": "Paw Patrol", + "starttime": "2024-12-15 14:50:00 UTC+03:00", + "endtime": "2024-12-15 15:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/85/2126356332585eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dünya dışı bir uay gemisi, çiftçi Yumi'nin topraklarına düşer! Paw Patrol, Zor duırumdaki kalan küçük uzaylıya yardım edip gemisini tamir edip gezegenine dönmesini yardım etmek için kolları sıvar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195142804", + "name": "Paw Patrol", + "starttime": "2024-12-15 15:10:00 UTC+03:00", + "endtime": "2024-12-15 15:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/51/2126356342615eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Jake ve Chase mağara keşif geziindeylen, Jake'in bileği düşen kayalara sıkışıp kalıyor! Alex, macera körfezi resmi geçidi gününde, Katie'nin yüzen küvetine fazla balon bağlayınca, küvet uçmaya başlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195142810", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-15 15:35:00 UTC+03:00", + "endtime": "2024-12-15 15:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/18/2126356342645eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark'ın popülaritesini kıskanan Shadow, Wreck'i kendi kişisel eğlence parkı olarak yeniden markalaştırıyor. Baby Shark ve arkadaşları şövalyeler ve asiller oynarken Vola bir prensesden daha fazlası olmak ister.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195142816", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-15 15:55:00 UTC+03:00", + "endtime": "2024-12-15 16:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/90/2126356342675eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kimyasal spreyler kırları pembe yapar! Barbapapalar hasta kuşları korumak için bir büyük kuş evi inşa eder. Aile çöplerle kaplı bir kumsal görür ve sahili temizleyip, çöplerden minyatür golf sahası yapmaya karar verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195142822", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-15 16:15:00 UTC+03:00", + "endtime": "2024-12-15 16:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/25/2126356342705eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington ilk güneş tutulmasının tadını çıkarmak için zamana karşı yarışıyor. Paddington, Simi için bir mucit ödülünü kabul ediyor ama Simi neden daha sonra kıskançlık ve üzüntü duyuyor?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 306. Bölüm" + }, + { + "id": "195142828", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 16:40:00 UTC+03:00", + "endtime": "2024-12-15 17:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/92/2126356342735eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Charger'ın bir sorunu var. Çok fazla enerjisi var! Moloztaş ve Ekibi her zaman bir inşaat çözümü olduğunu biliyor. Moloztaş ve yavruları Mix, Motor, Lucas ve Lily'ye havalı Süper Kıvrak Sincap oyun gününü inşa ediyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195142834", + "name": "Kaşif Dora", + "starttime": "2024-12-15 17:00:00 UTC+03:00", + "endtime": "2024-12-15 17:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/3/2126356342765eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dora ve Boots, genç yağmur bulutu Claudia'yı kuru bir su kaydırağında yağmur yağdırmaya götürür. Boots, arkadaşlarına yardım ederek sihirli çizgilerini elde ederse Kurbağa Ranita'nın tedavi edebileceği bir Gıdıklama Kuyruğu vakasına yakalanır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195142840", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 17:25:00 UTC+03:00", + "endtime": "2024-12-15 17:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/75/2126356342795eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyük bir kayak kazası Crusher ve Pickle'ın çok uzaklarda mahsur kalmasına neden olduğunda Blaze ve AJ tehlikeli bir kurtarma görevine çıkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 619. Bölüm" + }, + { + "id": "195142846", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-15 17:45:00 UTC+03:00", + "endtime": "2024-12-15 18:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/81/2126356342825eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Morton'un yol atıştırmalığı düşünce Şef ve Olly ona yolculuğu için en iyi atıştırmalığı yapmak üzerine yarışır. İlk aşçılık deneyimi için çok hevesli olan biri, Şef ve Olly'ye nachos yapımında yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195142852", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-15 18:10:00 UTC+03:00", + "endtime": "2024-12-15 18:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/28/2126356352855eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bebek Köpekbalığı, aile müzik grubunda çalması için annesinin mükemmel müzik aletini bulmasına yardım ediyor. Baba, Büyükbaba ve Bebek ChewTube'da komik bir videosunu yayınladıktan sonra utanır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195142858", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 18:30:00 UTC+03:00", + "endtime": "2024-12-15 18:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/99/2126356352885eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 102. Bölüm" + }, + { + "id": "195142864", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 18:40:00 UTC+03:00", + "endtime": "2024-12-15 18:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/76/2126356352915eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 103. Bölüm" + }, + { + "id": "195142870", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 18:45:00 UTC+03:00", + "endtime": "2024-12-15 18:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/59/2126356352945eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 104. Bölüm" + }, + { + "id": "195142876", + "name": "Camgöz (2020)", + "starttime": "2024-12-15 18:50:00 UTC+03:00", + "endtime": "2024-12-15 19:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/96/2126356352975eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in babası Yılın Bahçesi ödülünü almayı çok ister ama Camgöz değerlendirmeden kısa bir süre önce bahçeyi mahvedince Köpek Balığı Sürüsü devreye girip her şeyi düzeltmesi gerekecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195142882", + "name": "Paw Patrol", + "starttime": "2024-12-15 19:00:00 UTC+03:00", + "endtime": "2024-12-15 19:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/77/2126356353005eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yavru bir geyik bir dağın yamacından aşağı hızla yuvarlanır. Yavruyu kurtarmak ve ailesine kavuşturmak Paw Patrol'a düşer. Luke Stars dev bir yuvarlanan otun içinde havaya uçtuğunda, Digi ve Tal kontrolden çıkan bir kopya yaparlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1015. Bölüm" + }, + { + "id": "195142888", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-15 19:20:00 UTC+03:00", + "endtime": "2024-12-15 19:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/67/2126356353035eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 414. Bölüm" + }, + { + "id": "195142894", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 19:30:00 UTC+03:00", + "endtime": "2024-12-15 20:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/32/2126356353065eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Çiftçi Zoe'nin yeni ineği Mooreen'i karşılamak için İnşaatçı Koyu'ndaki ilk tren istasyonunu inşa ediyor. Popstar Parıltılı Sierra Koy'a taşınıyor! Yavrular sürpriz bir karşılama planlayınca, Hız Ustası kendi planını yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195142900", + "name": "Kaşif Dora", + "starttime": "2024-12-15 20:00:00 UTC+03:00", + "endtime": "2024-12-15 20:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/72/2126356363095eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Sürüngenler Kraliçesi Isa'yı ziyaret ediyor ama bahçe darmadağın! Dora, ziyaret için her şeyi zamanında hazırlamasına yardım eder. Dora, özel bir sürpriz göstermek için Kampa zamanında gitmesi gereken Sammy ile tanışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195142906", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-15 20:20:00 UTC+03:00", + "endtime": "2024-12-15 20:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/88/2126356363125eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbasaf yardıma hazır! Ama Barbazeki ve Barbasüslü, bu kibarlığı suistimal edip Barbasaf'ı çıldırtıyorlar! Barbasaf, Barbapapa'yı taklit edebildiğini fark eder. Bu fırsatı değerlendirip kardeşlerine ev işleri yaptırır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 124. Bölüm" + }, + { + "id": "195142912", + "name": "Hamster Diyarı", + "starttime": "2024-12-15 20:40:00 UTC+03:00", + "endtime": "2024-12-15 21:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/43/2126356363155eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Aile dışarıda kaldığında, Popcorn hamsterları onları kurtarmak için bir göreve götürür. Lil Pal, Flea Beast'in havlamasını taklit edebildiğini keşfeder ama bunun neden olduğu tehlikenin farkında değildir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 104. Bölüm" + }, + { + "id": "195142918", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 21:00:00 UTC+03:00", + "endtime": "2024-12-15 21:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/46/2126356363185eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Çizgili orman kornasına bayılıyor. Bu korna ormandaki bütün hayvanları çağırabilen özel bir korna. Ama bunu kıskanan Ezici kornayı çalınca Blaze ve Çizgili kornayı geri almak için ormanda Ezici'nin peşine düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195142924", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-15 21:25:00 UTC+03:00", + "endtime": "2024-12-15 21:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/97/2126356363215eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Turşu bütün Aks Şehri için bir sihir gösterisi hazırlıyor! Ama Ezici yanlışlıkla sihirli bir hata yapınca durumu tamir edip arkadaşlarını kurtarmak da Blaze ve Turşu'ya kalıyor! Abra Turşu kadabra!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 505. Bölüm" + }, + { + "id": "195142930", + "name": "Paw Patrol", + "starttime": "2024-12-15 21:45:00 UTC+03:00", + "endtime": "2024-12-15 22:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/68/2126356363245eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rocky ve Köpekçikler Ace Sorensen'in doğum günü için eski hurda bir arabayı tamir ediyorlar. Macera Koyu dünyanın en yüksek pizza kulesi rekoru için sıkı çalışıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 526. Bölüm" + }, + { + "id": "195142936", + "name": "Paw Patrol", + "starttime": "2024-12-15 22:10:00 UTC+03:00", + "endtime": "2024-12-15 22:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/68/2126356363275eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Üç penguen taşıyan bir buz kütlesi yağmur ormanına gelir. Köpekçiklerin penguenleri soğuk evlerine geri götürmeleri gerekecek// Turbot, deniz fenerini Cesur Danny'ye emanet eder ve Danny kapıda kalır. Hem de Fok Adasına bir yük gemisi yaklaşmaktayken", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 601. Bölüm" + }, + { + "id": "195142942", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-15 22:30:00 UTC+03:00", + "endtime": "2024-12-15 22:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/1/2126356373305eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195142948", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 22:40:00 UTC+03:00", + "endtime": "2024-12-15 23:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/18/2126356373335eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "İnşaatçı Koyu'nda okulun ilk günü... tabii Moloz ve Ekibi inşaatı zamanında bitirebilirse! Çiftçi Zoe'nin mahsullerini kurtarmak ve kunduz Crunchy'nin tüm suyu almasını engellemek için yavruların bir inşaat çözümüne ihtiyacı var!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195142954", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-15 23:05:00 UTC+03:00", + "endtime": "2024-12-15 23:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/62/2126356373365eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yavrular, River'ın kayan yıldızın harika bir fotoğrafını çekmesine yardımcı olmak için bir gözlemevi inşa etmeye başlıyor. Park Korucusu Rose ile tanıştıktan sonra yavrular doğa parkurunda mahsur kalır. Ama Rubble ve Ekibi, çözümü bulur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195142960", + "name": "Kaşif Dora", + "starttime": "2024-12-15 23:30:00 UTC+03:00", + "endtime": "2024-12-15 23:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/41/2126356373395eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195142966", + "name": "Kaşif Dora", + "starttime": "2024-12-15 23:40:00 UTC+03:00", + "endtime": "2024-12-15 23:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/54/2126356373425eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195142972", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-15 23:50:00 UTC+03:00", + "endtime": "2024-12-16 00:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/67/2126356373455eb88428_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark, ailesi ve arkadaşlarının tuzlu aptallıklarına dalın.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 223. Bölüm" + } + ], + [ + { + "id": "195209831", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 00:10:00 UTC+03:00", + "endtime": "2024-12-16 00:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/70/2126379608855eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195212269", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 00:20:00 UTC+03:00", + "endtime": "2024-12-16 00:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/14/2126379608885eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195212275", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 00:25:00 UTC+03:00", + "endtime": "2024-12-16 00:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/73/2126379618915eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195212281", + "name": "Peppa Pig", + "starttime": "2024-12-16 00:35:00 UTC+03:00", + "endtime": "2024-12-16 00:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/25/2126379618945eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George Büyükanne ve Büyükbaba Domuz'a öğle yemeğine giderler. Büyükanne Domuz salata yapar ama George yeşillik yemeyi sevmediği için Büyükanne Domuz, salataya dinozor şekli verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 134. Bölüm" + }, + { + "id": "195212287", + "name": "Peppa Pig", + "starttime": "2024-12-16 00:40:00 UTC+03:00", + "endtime": "2024-12-16 00:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/83/2126379618975eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve ailesi kampa gider ama Baba Domuz çadıra sığamayacak kadar büyüktür. Baba Domuz açık havada yatmaktan memnundur, ta ki yağmur başlayana dek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 135. Bölüm" + }, + { + "id": "195212293", + "name": "Peppa Pig", + "starttime": "2024-12-16 00:45:00 UTC+03:00", + "endtime": "2024-12-16 00:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/30/2126379619005eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baba Domuz, George'a uyumaya ihtiyacı olan bir prenses masalı anlatır. Masalda Peppa bir prenses, George bir prens, Anne Domuz bir kraliçe, Baba Domuz ise bir kral olmuştur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 136. Bölüm" + }, + { + "id": "195212299", + "name": "Peppa Pig", + "starttime": "2024-12-16 00:50:00 UTC+03:00", + "endtime": "2024-12-16 00:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/96/2126379619035eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 137. Bölüm" + }, + { + "id": "195212305", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-16 00:55:00 UTC+03:00", + "endtime": "2024-12-16 01:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/86/2126379619065eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Stump'a bilinmeyen bir meyve teslim edildiğinde, Dedektif Şef ve Olly pişirmeden önce bunun ne olduğunun gizemini çözmek zorundadır. Çetenin hapşırıkları tuttuğunda, matzo topu çorbasını tam bir tarif olmadan bitirmek Olly'ye kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195212311", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-16 01:15:00 UTC+03:00", + "endtime": "2024-12-16 01:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/57/2126379619095eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabebekler uyku zamanı hikayelerine bayılıyor, tabii hep aynı hikayeler olması dışında... Barbasüslü tüm böcekler yüzünden huzursuz bir gece geçirdi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195212317", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-16 01:40:00 UTC+03:00", + "endtime": "2024-12-16 02:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/7/2126379619125eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195212323", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 02:00:00 UTC+03:00", + "endtime": "2024-12-16 02:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/56/2126379619155eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 620. Bölüm" + }, + { + "id": "195212329", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 02:25:00 UTC+03:00", + "endtime": "2024-12-16 02:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/43/2126379629185eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "İlk Blaze Müzikali'nde Blaze, AJ, Crusher ve Pickle, Broken Key'in parçalarını bulmak ve gizli bir hazinenin kilidini açmak için cesur bir arayış içindeler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 621. Bölüm" + }, + { + "id": "195212335", + "name": "Paw Patrol", + "starttime": "2024-12-16 02:50:00 UTC+03:00", + "endtime": "2024-12-16 03:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/72/2126379629215eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Turbotlar derin dalıştayken dalış çanları bir yere sıkışır kalır! Paw Patrol günü kurtarmaya! Bir fırtına kunduzun barajını yıkınca, kunduz Çiftçi Yumi'nin bütün odunlarını keser! Paw Patrol yetişir ve evini tekrar inşa etmesine yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195212341", + "name": "Paw Patrol", + "starttime": "2024-12-16 03:10:00 UTC+03:00", + "endtime": "2024-12-16 03:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/81/2126379629245eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gizemli bir hayalet Lookout'ta ortalığı birbirine katar ama köpekçikler bunun bir hayalet değil uyur gezer Marshall olduğunu fark eder. Büyük gösteriden önce bir sahne parçası yıkılır ve Kaptan Turbot'u mahsur bırakır. Köpekçikler günü kurtarmaya!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195212347", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-16 03:30:00 UTC+03:00", + "endtime": "2024-12-16 03:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/45/2126379629275eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bencil bir balık mini golfü ele geçirince Baby Shark ve William onu yenecek şampiyon bir mini golf oyuncusu bulmalıdır. Hank evcil kayası Rocky'nin yardımı olmadan korkularının üstesinden gelmeye çalışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195212353", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-16 03:55:00 UTC+03:00", + "endtime": "2024-12-16 04:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/71/2126379629305eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbataşkın hıçkırığı geçmediği için resim yapamaz. Tam vazgeçmek üzereyken, yanlışlıkla yeni bir sanat hareketi başlatır. Barbalçalışkan bir yazı yarışmasına katılmak ister ama erkek ve kız kardeşleri onun konsantre olmasını engeller.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195212359", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-16 04:15:00 UTC+03:00", + "endtime": "2024-12-16 04:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/55/2126379629335eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Brown'lar tatil için sahile giderler ve vardıklarında deniz feneri bekçisi Shantee ile tanışırlar. Paddington, Jonathan ve Judy stajyer cankurtaran olurlar ve cankurtaran Taylor'ın yardımıyla Bay Brown'ı kurtarırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 307. Bölüm" + }, + { + "id": "195212365", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 04:40:00 UTC+03:00", + "endtime": "2024-12-16 05:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/15/2126379639365eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kafe Carl bir smoothie dükkânı açıyor! Ancak bardak altlığı hindistan cevizi kaosuna neden olduğunda, Rubble ve Ekibi işlerini bilir. Rubble ve Ekibi, Charger'ın zıplayan doğum günü sürprizinin kaldırılması gerektiğinde çözüm bulmak için çalışır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195212371", + "name": "Kaşif Dora", + "starttime": "2024-12-16 05:00:00 UTC+03:00", + "endtime": "2024-12-16 05:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/84/2126379639395eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212377", + "name": "Kaşif Dora", + "starttime": "2024-12-16 05:10:00 UTC+03:00", + "endtime": "2024-12-16 05:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/9/2126379639425eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212383", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 05:25:00 UTC+03:00", + "endtime": "2024-12-16 05:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/82/2126379639455eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bugün Blaze ve AJ cankurtaran görevindeler. Ancak resmi cankurtaran rozetini elde etmek için dört cesur kurtarma gerekecek ve sadece en cesur canavar kamyonlar bunu başarabilecek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 622. Bölüm" + }, + { + "id": "195212389", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-16 05:45:00 UTC+03:00", + "endtime": "2024-12-16 06:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/3/2126379639485eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Henry salyangoz yarışında! Yarış için hazırladığı meyve lokmalarının sertleşmesi uzun sürüyor! Ruby'nin harika bir opera sanatçısı olduğunu öğrenen Şef, Olly gürültülü bir şekilde konser sahnesi inşa ederken bir opera pastası yapmaya çalışıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195212395", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-16 06:10:00 UTC+03:00", + "endtime": "2024-12-16 06:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/19/2126379639515eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby, Vola ve William, Splashketball Finalleri'nde Shadow'un takımıyla karşılaşmak için Hydrospace'e gider. Dedektif Baby Shark ve William Watson, Slobber Slug'ı zor durumdan kurtarmak için Hank ile bir araya gelir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212401", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 06:30:00 UTC+03:00", + "endtime": "2024-12-16 06:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/24/2126379639545eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz'ü doyurmak için çok daha fazla balık kroket bulması gerekiyor ama bu arayışı sırasında şüpheci Kaptan Barb Quigley'yle yolları kesişiyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195212407", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 06:40:00 UTC+03:00", + "endtime": "2024-12-16 06:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/29/2126379639575eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max ve babası, birlikte köpek balığı özel bölümü izleme geleneklerini sürdürecekleri için heyecanlıdırlar ama bu yıl Camgöz de onlara katılmak isteyecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195212413", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 06:45:00 UTC+03:00", + "endtime": "2024-12-16 06:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/93/2126379639605eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195212419", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 06:50:00 UTC+03:00", + "endtime": "2024-12-16 07:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/61/2126379639635eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195212425", + "name": "Paw Patrol", + "starttime": "2024-12-16 07:00:00 UTC+03:00", + "endtime": "2024-12-16 07:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/53/2126379649665eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kaptan Turbot'un gemisi kaybolunca, Paw Patrol kayıp gemiyi bulmak için gizemli Macera Körfezi Üçgeni'ne girmek zorunda. Alex ve Bay Porter rolleri değiştirdiğinde, yavrular kaybolunca Mini-Patrol'ün izini sürmeye yardım etmelidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1018. Bölüm" + }, + { + "id": "195212431", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-16 07:20:00 UTC+03:00", + "endtime": "2024-12-16 07:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/21/2126379649695eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 414. Bölüm" + }, + { + "id": "195212437", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 07:30:00 UTC+03:00", + "endtime": "2024-12-16 07:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/97/2126379649725eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bir tavşan ailesi futbol sahasına atlayınca, Rubble ve Ekibi yeteneklerini kullanarak bir spor dalı inşa eder; Tavşan Topu! Yavrular yeni bir kelebek türü keşfettikten sonra, kelebek uçup gider! Dev bir kelebek bahçesi geri getirebilir mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195212443", + "name": "Peppa Pig", + "starttime": "2024-12-16 07:55:00 UTC+03:00", + "endtime": "2024-12-16 08:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/32/2126379649755eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195212449", + "name": "Peppa Pig", + "starttime": "2024-12-16 08:00:00 UTC+03:00", + "endtime": "2024-12-16 08:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/36/2126379649785eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ilk bale dersine gider ve orada arkadaşlarıyla tanışır. Anne Domuz ve Baba Domuz'a da dans etmeyi öğretmek ister ama onların kendine özgü hareketleri olduğunu fark eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 131. Bölüm" + }, + { + "id": "195212455", + "name": "Peppa Pig", + "starttime": "2024-12-16 08:05:00 UTC+03:00", + "endtime": "2024-12-16 08:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/57/2126379649815eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Fırtına çıktığı esnada Peppa ve George piknik yapıyordur. İçeri girerler ama şimşeklerin gürültüsü yüzünden Peppa ve George hâlâ korkuyordur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 132. Bölüm" + }, + { + "id": "195212461", + "name": "Peppa Pig", + "starttime": "2024-12-16 08:10:00 UTC+03:00", + "endtime": "2024-12-16 08:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/32/2126379659845eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 133. Bölüm" + }, + { + "id": "195212467", + "name": "Anna ve Dostları", + "starttime": "2024-12-16 08:15:00 UTC+03:00", + "endtime": "2024-12-16 08:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/93/2126379659875eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dostlar hediyeleşirler ve Bubu Christopher'dan bir hediye alır. Christopher, Bubu gerçek hediye için kutuyu karıştırdığında hediyesini beğenmediğini anlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 178. Bölüm" + }, + { + "id": "195212473", + "name": "Anna ve Dostları", + "starttime": "2024-12-16 08:20:00 UTC+03:00", + "endtime": "2024-12-16 08:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/7/2126379659905eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anna ve Froga, sezonun ilk çilekleriyle şimdiye kadarki en iyi çilekli turtayı yapacakları için heyecanlılar. Anna, turtayı yaparlarken Christopher'ın dikkatini dağıtmak için bir plan yapar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195212479", + "name": "Minik Şef", + "starttime": "2024-12-16 08:30:00 UTC+03:00", + "endtime": "2024-12-16 08:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/89/2126379659935eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef, piknik için Tomrukta Karıncalar yapar, ancak yiyecekler kaybolmaya başlayınca bir gizemi çözmesi gerekir! Minik Şef, Quesadilla yapar ama en sevdiği salsa kavanozunu o ve arkadaşları ne kadar uğraşırsa uğraşsın açamaz!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195212485", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-16 08:50:00 UTC+03:00", + "endtime": "2024-12-16 09:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/77/2126379659965eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dünyanın en küçük şefi tarafından yaratılan, dünyanın en küçük yemek programında, dünyanın en küçük yemekleri.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212491", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 09:00:00 UTC+03:00", + "endtime": "2024-12-16 09:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/20/2126379659995eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Çizgili orman kornasına bayılıyor. Bu korna ormandaki bütün hayvanları çağırabilen özel bir korna. Ama bunu kıskanan Ezici kornayı çalınca Blaze ve Çizgili kornayı geri almak için ormanda Ezici'nin peşine düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195212497", + "name": "Hamster Diyarı", + "starttime": "2024-12-16 09:25:00 UTC+03:00", + "endtime": "2024-12-16 09:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/15/2126379650025eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hamsterlar, Harry'nin kraliyet temalı doğum günü partisinin Hamsterdale istilası için bir paravan olduğuna ikna olurlar. Lil Pal'in en sevdiği oyuncağı havalandırma deliğine düşünce, Mondo onu almak için bir yolculuğa çıkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195212503", + "name": "Paw Patrol", + "starttime": "2024-12-16 09:45:00 UTC+03:00", + "endtime": "2024-12-16 10:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/89/2126379650055eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rocky ve Köpekçikler Ace Sorensen'in doğum günü için eski hurda bir arabayı tamir ediyorlar. Macera Koyu dünyanın en yüksek pizza kulesi rekoru için sıkı çalışıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 526. Bölüm" + }, + { + "id": "195212509", + "name": "Paw Patrol", + "starttime": "2024-12-16 10:10:00 UTC+03:00", + "endtime": "2024-12-16 10:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/96/2126379650085eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Üç penguen taşıyan bir buz kütlesi yağmur ormanına gelir. Köpekçiklerin penguenleri soğuk evlerine geri götürmeleri gerekecek// Turbot, deniz fenerini Cesur Danny'ye emanet eder ve Danny kapıda kalır. Hem de Fok Adasına bir yük gemisi yaklaşmaktayken", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 601. Bölüm" + }, + { + "id": "195212515", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-16 10:30:00 UTC+03:00", + "endtime": "2024-12-16 10:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/57/2126379660115eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195212521", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 10:40:00 UTC+03:00", + "endtime": "2024-12-16 11:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/90/2126379660145eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "İnşaatçı Koyu'nda okulun ilk günü... tabii Moloz ve Ekibi inşaatı zamanında bitirebilirse! Çiftçi Zoe'nin mahsullerini kurtarmak ve kunduz Crunchy'nin tüm suyu almasını engellemek için yavruların bir inşaat çözümüne ihtiyacı var!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195212527", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 11:05:00 UTC+03:00", + "endtime": "2024-12-16 11:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/49/2126379660175eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yavrular, River'ın kayan yıldızın harika bir fotoğrafını çekmesine yardımcı olmak için bir gözlemevi inşa etmeye başlıyor. Park Korucusu Rose ile tanıştıktan sonra yavrular doğa parkurunda mahsur kalır. Ama Rubble ve Ekibi, çözümü bulur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195212533", + "name": "Kaşif Dora", + "starttime": "2024-12-16 11:30:00 UTC+03:00", + "endtime": "2024-12-16 11:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/83/2126379660205eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212539", + "name": "Kaşif Dora", + "starttime": "2024-12-16 11:40:00 UTC+03:00", + "endtime": "2024-12-16 11:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/15/2126379660235eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212545", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-16 11:50:00 UTC+03:00", + "endtime": "2024-12-16 12:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/67/2126379660265eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark, ailesi ve arkadaşlarının tuzlu aptallıklarına dalın.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 223. Bölüm" + }, + { + "id": "195212551", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 12:15:00 UTC+03:00", + "endtime": "2024-12-16 12:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/52/2126379670295eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195212557", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 12:20:00 UTC+03:00", + "endtime": "2024-12-16 12:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/25/2126379670325eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195212563", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 12:25:00 UTC+03:00", + "endtime": "2024-12-16 12:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/71/2126379670355eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195212569", + "name": "Peppa Pig", + "starttime": "2024-12-16 12:35:00 UTC+03:00", + "endtime": "2024-12-16 12:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/27/2126379670385eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George Büyükanne ve Büyükbaba Domuz'a öğle yemeğine giderler. Büyükanne Domuz salata yapar ama George yeşillik yemeyi sevmediği için Büyükanne Domuz, salataya dinozor şekli verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 134. Bölüm" + }, + { + "id": "195212575", + "name": "Peppa Pig", + "starttime": "2024-12-16 12:40:00 UTC+03:00", + "endtime": "2024-12-16 12:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/30/2126379680415eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve ailesi kampa gider ama Baba Domuz çadıra sığamayacak kadar büyüktür. Baba Domuz açık havada yatmaktan memnundur, ta ki yağmur başlayana dek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 135. Bölüm" + }, + { + "id": "195212581", + "name": "Peppa Pig", + "starttime": "2024-12-16 12:45:00 UTC+03:00", + "endtime": "2024-12-16 12:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/32/2126379680445eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baba Domuz, George'a uyumaya ihtiyacı olan bir prenses masalı anlatır. Masalda Peppa bir prenses, George bir prens, Anne Domuz bir kraliçe, Baba Domuz ise bir kral olmuştur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 136. Bölüm" + }, + { + "id": "195212587", + "name": "Peppa Pig", + "starttime": "2024-12-16 12:50:00 UTC+03:00", + "endtime": "2024-12-16 12:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/25/2126379680475eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 137. Bölüm" + }, + { + "id": "195212593", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-16 12:55:00 UTC+03:00", + "endtime": "2024-12-16 13:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/95/2126379680505eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Stump'a bilinmeyen bir meyve teslim edildiğinde, Dedektif Şef ve Olly pişirmeden önce bunun ne olduğunun gizemini çözmek zorundadır. Çetenin hapşırıkları tuttuğunda, matzo topu çorbasını tam bir tarif olmadan bitirmek Olly'ye kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195212599", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-16 13:15:00 UTC+03:00", + "endtime": "2024-12-16 13:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/6/2126379680535eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabebekler uyku zamanı hikayelerine bayılıyor, tabii hep aynı hikayeler olması dışında... Barbasüslü tüm böcekler yüzünden huzursuz bir gece geçirdi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195212605", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-16 13:40:00 UTC+03:00", + "endtime": "2024-12-16 14:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/44/2126379680565eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195212611", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 14:00:00 UTC+03:00", + "endtime": "2024-12-16 14:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/64/2126379680595eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 620. Bölüm" + }, + { + "id": "195212617", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 14:25:00 UTC+03:00", + "endtime": "2024-12-16 14:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/33/2126379690625eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "İlk Blaze Müzikali'nde Blaze, AJ, Crusher ve Pickle, Broken Key'in parçalarını bulmak ve gizli bir hazinenin kilidini açmak için cesur bir arayış içindeler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 621. Bölüm" + }, + { + "id": "195212623", + "name": "Paw Patrol", + "starttime": "2024-12-16 14:50:00 UTC+03:00", + "endtime": "2024-12-16 15:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/69/2126379690655eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Turbotlar derin dalıştayken dalış çanları bir yere sıkışır kalır! Paw Patrol günü kurtarmaya! Bir fırtına kunduzun barajını yıkınca, kunduz Çiftçi Yumi'nin bütün odunlarını keser! Paw Patrol yetişir ve evini tekrar inşa etmesine yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195212629", + "name": "Paw Patrol", + "starttime": "2024-12-16 15:10:00 UTC+03:00", + "endtime": "2024-12-16 15:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/53/2126379690685eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gizemli bir hayalet Lookout'ta ortalığı birbirine katar ama köpekçikler bunun bir hayalet değil uyur gezer Marshall olduğunu fark eder. Büyük gösteriden önce bir sahne parçası yıkılır ve Kaptan Turbot'u mahsur bırakır. Köpekçikler günü kurtarmaya!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195212635", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-16 15:35:00 UTC+03:00", + "endtime": "2024-12-16 15:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/16/2126379690715eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bencil bir balık mini golfü ele geçirince Baby Shark ve William onu yenecek şampiyon bir mini golf oyuncusu bulmalıdır. Hank evcil kayası Rocky'nin yardımı olmadan korkularının üstesinden gelmeye çalışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195212641", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-16 15:55:00 UTC+03:00", + "endtime": "2024-12-16 16:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/60/2126379690745eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbataşkın hıçkırığı geçmediği için resim yapamaz. Tam vazgeçmek üzereyken, yanlışlıkla yeni bir sanat hareketi başlatır. Barbalçalışkan bir yazı yarışmasına katılmak ister ama erkek ve kız kardeşleri onun konsantre olmasını engeller.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195212647", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-16 16:15:00 UTC+03:00", + "endtime": "2024-12-16 16:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/21/2126379690775eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Brown'lar tatil için sahile giderler ve vardıklarında deniz feneri bekçisi Shantee ile tanışırlar. Paddington, Jonathan ve Judy stajyer cankurtaran olurlar ve cankurtaran Taylor'ın yardımıyla Bay Brown'ı kurtarırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 307. Bölüm" + }, + { + "id": "195212653", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 16:40:00 UTC+03:00", + "endtime": "2024-12-16 17:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/94/2126379690805eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kafe Carl bir smoothie dükkânı açıyor! Ancak bardak altlığı hindistan cevizi kaosuna neden olduğunda, Rubble ve Ekibi işlerini bilir. Rubble ve Ekibi, Charger'ın zıplayan doğum günü sürprizinin kaldırılması gerektiğinde çözüm bulmak için çalışır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195212659", + "name": "Kaşif Dora", + "starttime": "2024-12-16 17:00:00 UTC+03:00", + "endtime": "2024-12-16 17:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/44/2126379690835eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212665", + "name": "Kaşif Dora", + "starttime": "2024-12-16 17:10:00 UTC+03:00", + "endtime": "2024-12-16 17:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/93/2126379700865eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212671", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 17:25:00 UTC+03:00", + "endtime": "2024-12-16 17:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/11/2126379700895eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bugün Blaze ve AJ cankurtaran görevindeler. Ancak resmi cankurtaran rozetini elde etmek için dört cesur kurtarma gerekecek ve sadece en cesur canavar kamyonlar bunu başarabilecek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 622. Bölüm" + }, + { + "id": "195212677", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-16 17:45:00 UTC+03:00", + "endtime": "2024-12-16 18:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/24/2126379700925eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Henry salyangoz yarışında! Yarış için hazırladığı meyve lokmalarının sertleşmesi uzun sürüyor! Ruby'nin harika bir opera sanatçısı olduğunu öğrenen Şef, Olly gürültülü bir şekilde konser sahnesi inşa ederken bir opera pastası yapmaya çalışıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195212683", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-16 18:10:00 UTC+03:00", + "endtime": "2024-12-16 18:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/25/2126379700955eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby, Vola ve William, Splashketball Finalleri'nde Shadow'un takımıyla karşılaşmak için Hydrospace'e gider. Dedektif Baby Shark ve William Watson, Slobber Slug'ı zor durumdan kurtarmak için Hank ile bir araya gelir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212689", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 18:30:00 UTC+03:00", + "endtime": "2024-12-16 18:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/56/2126379700985eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz'ü doyurmak için çok daha fazla balık kroket bulması gerekiyor ama bu arayışı sırasında şüpheci Kaptan Barb Quigley'yle yolları kesişiyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195212695", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 18:40:00 UTC+03:00", + "endtime": "2024-12-16 18:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/59/2126379701015eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max ve babası, birlikte köpek balığı özel bölümü izleme geleneklerini sürdürecekleri için heyecanlıdırlar ama bu yıl Camgöz de onlara katılmak isteyecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195212701", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 18:45:00 UTC+03:00", + "endtime": "2024-12-16 18:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/60/2126379701045eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195212707", + "name": "Camgöz (2020)", + "starttime": "2024-12-16 18:50:00 UTC+03:00", + "endtime": "2024-12-16 19:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/27/2126379701075eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 109. Bölüm" + }, + { + "id": "195212713", + "name": "Paw Patrol", + "starttime": "2024-12-16 19:00:00 UTC+03:00", + "endtime": "2024-12-16 19:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/3/2126379711105eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kaptan Turbot'un gemisi kaybolunca, Paw Patrol kayıp gemiyi bulmak için gizemli Macera Körfezi Üçgeni'ne girmek zorunda. Alex ve Bay Porter rolleri değiştirdiğinde, yavrular kaybolunca Mini-Patrol'ün izini sürmeye yardım etmelidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1018. Bölüm" + }, + { + "id": "195212719", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-16 19:20:00 UTC+03:00", + "endtime": "2024-12-16 19:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/47/2126379711135eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 414. Bölüm" + }, + { + "id": "195212725", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 19:30:00 UTC+03:00", + "endtime": "2024-12-16 20:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/31/2126379711165eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bir tavşan ailesi futbol sahasına atlayınca, Rubble ve Ekibi yeteneklerini kullanarak bir spor dalı inşa eder; Tavşan Topu! Yavrular yeni bir kelebek türü keşfettikten sonra, kelebek uçup gider! Dev bir kelebek bahçesi geri getirebilir mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195212731", + "name": "Kaşif Dora", + "starttime": "2024-12-16 20:00:00 UTC+03:00", + "endtime": "2024-12-16 20:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/62/2126379711195eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212737", + "name": "Kaşif Dora", + "starttime": "2024-12-16 20:10:00 UTC+03:00", + "endtime": "2024-12-16 20:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/73/2126379711225eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212743", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-16 20:20:00 UTC+03:00", + "endtime": "2024-12-16 20:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/68/2126379711255eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bir talihsizliğin ardından Barbabravo şekil değiştirememeye başlar. Bütün aile ona yardım etmek için birleşir. Barbabravo uzun süre bir aktiviteye odaklanmakta zorlanır. Barbabala ona kendini kontrol etmeyi öğretmeyi teklif eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 125. Bölüm" + }, + { + "id": "195212749", + "name": "Hamster Diyarı", + "starttime": "2024-12-16 20:40:00 UTC+03:00", + "endtime": "2024-12-16 21:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/0/2126379711285eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Popcorn tacını Keesha'nın akvaryumunda kaybeder ve hamsterlar onu geri almak için suya dalar. Hamsterlar yerel bir hamster yarışmasına gittiklerinde, Clover beklenmedik bir şekilde yarışmak zorunda kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195212755", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 21:00:00 UTC+03:00", + "endtime": "2024-12-16 21:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/35/2126379721315eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze Kamyon Topu diye yeni ve heyecan verici bir spor keşfeder. Ezici ve ahbapları ona maç teklifi edince Blaze'in büyük maçtan önce bir takım kurmak için bütün Aks Şehri'ni alt üst etmesi gerekir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195212761", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-16 21:25:00 UTC+03:00", + "endtime": "2024-12-16 21:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/4/2126379721345eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Aks Şehri oyuncak dükkanında her istenen oyuncağı yapan muhteşem bir makine vardır ama Ezici, makineyle kontrolden çıkan bir sürü oyuncak yapar! Sadece Blaze ve Wattlar bu dev oyuncakların ortalığı birbirine katmadan durdurabilir!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 506. Bölüm" + }, + { + "id": "195212767", + "name": "Paw Patrol", + "starttime": "2024-12-16 21:45:00 UTC+03:00", + "endtime": "2024-12-16 22:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/81/2126379721375eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Vali Humdinger'ın en büyük kavun yarışmasını kazanma planı kavunu sekerek uzaklaşıp kasabayı birbirine katınca suya düşer! Çiftçi Al'ın kamyoneti yıkık bir köprüde mahsur kalır, onu kurtarmak da Köpekçiklere kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 603. Bölüm" + }, + { + "id": "195212773", + "name": "Paw Patrol", + "starttime": "2024-12-16 22:10:00 UTC+03:00", + "endtime": "2024-12-16 22:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/61/2126379721405eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yumi'nin nefis balı ve arı kovanları çiftlikten kaybolunca ortalık karışır! Vali Goodway'in cüzdanı içinde Çikiletta'yla birlikte kaybolur!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 604. Bölüm" + }, + { + "id": "195212779", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-16 22:30:00 UTC+03:00", + "endtime": "2024-12-16 22:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/82/2126379721435eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195212785", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 22:40:00 UTC+03:00", + "endtime": "2024-12-16 23:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/55/2126379721465eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kütüphane inşaatı arılarla dolup taşıyor! Bu da ekstra güzel bir inşaat çözümü gerektiriyor. Büyükbaba, Charger'a büyük dans yarışması için en iyi hareketlerini öğretiyor. Ama kaçan bir disko topu onlara birinciliğe mal olacak mı?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195212791", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-16 23:05:00 UTC+03:00", + "endtime": "2024-12-16 23:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/86/2126379721495eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Ekip Lucas ve Lily için özel bir limonata standı kurduktan sonra, ekşi bir Hız Ustası onu İnşaatçı Koyu'na yuvarlıyor! Kunduz Crunchy neden yolun karşısına geçiyor? Çünkü Rubble ve Ekibi karşıya geçmesi için bir köprü inşa ediyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195212797", + "name": "Kaşif Dora", + "starttime": "2024-12-16 23:30:00 UTC+03:00", + "endtime": "2024-12-16 23:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/22/2126379721525eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195212803", + "name": "Kaşif Dora", + "starttime": "2024-12-16 23:40:00 UTC+03:00", + "endtime": "2024-12-16 23:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/9/2126379721555eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195212809", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-16 23:50:00 UTC+03:00", + "endtime": "2024-12-17 00:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241210/12/2126379731585eb7f426_0_XL.jpg", + "isnpvr": "1", + "introduce": "Diğer tüm balıklar kış tatilinde şehir dışındayken, Baby ve William kendi yüzgeçli dostluk günlerini yaratırlar. Chucks, Balık İzcileri ile ilk gezisinde kamp yapmaya eşsiz bir yaklaşım getiriyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 224. Bölüm" + } + ], + [ + { + "id": "195272778", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 00:15:00 UTC+03:00", + "endtime": "2024-12-17 00:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/79/2126371378045eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195272784", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 00:20:00 UTC+03:00", + "endtime": "2024-12-17 00:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/81/2126371378075eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz'ün vahşi tarafı köpek parkındaki köpekleri korkutmaya devam etmektedir. Camgöz yeni arkadaşlar edinmek istiyorsa kendi iç sakinliğini bulmak zorunda kalacaktır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195272790", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 00:25:00 UTC+03:00", + "endtime": "2024-12-17 00:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/39/2126371378105eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz yanlışlıkla akvaryumda sergilenen en yeni parçayı yiyince, Max ve Köpek Balığı Sürüsü akvaryumun sahibi Bay Ceviche farkına varmadan önce bir plan yapmak zorunda kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195272796", + "name": "Peppa Pig", + "starttime": "2024-12-17 00:35:00 UTC+03:00", + "endtime": "2024-12-17 00:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/39/2126371388135eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George, kuzenleri Chloé'nin evini ziyaret eder. Chloé onlara çok horlayan bir domuzun olduğu bir kukla gösterisi yapar. Baba Domuz ve Amca Domuz, horlamakla meşgul oldukları için bu gösteriyi kaçırır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 141. Bölüm" + }, + { + "id": "195272802", + "name": "Peppa Pig", + "starttime": "2024-12-17 00:40:00 UTC+03:00", + "endtime": "2024-12-17 00:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/4/2126371388165eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baba Domuz şişman olduğu için, Peppa ona egzersiz yapmasını söyler. Baba Domuz, sağlıklı olmak için her gün egzersiz yapmak gerektiğini öğrenince dehşete düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 142. Bölüm" + }, + { + "id": "195273960", + "name": "Peppa Pig", + "starttime": "2024-12-17 00:45:00 UTC+03:00", + "endtime": "2024-12-17 00:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/4/2126371388195eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 143. Bölüm" + }, + { + "id": "195273966", + "name": "Peppa Pig", + "starttime": "2024-12-17 00:50:00 UTC+03:00", + "endtime": "2024-12-17 00:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/56/2126371388225eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George parka gider. Peppa'nın arkadaşları da oradadır. Peppa sallanmayı çok seviyordur ama George yüksekten korktuğu için sevmiyordur. Baba Domuz, George'a yüksek kaydıraktan kayması için yardım eder ama George kayarken sıkışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 144. Bölüm" + }, + { + "id": "195273972", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-17 00:55:00 UTC+03:00", + "endtime": "2024-12-17 01:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/84/2126371388255eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, Atıştırmalık Molası sırasında Stump Band'e en iyi fıstık ezmeli ve jöleli sandviçleri yapar. Bugün Patates Günü, Henry'nin en sevdiği bayram! Şef, Henry'nin patates yemeğini yapar ancak Henry yemeğin adını hatırlamaz!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195273978", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-17 01:15:00 UTC+03:00", + "endtime": "2024-12-17 01:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/70/2126371388285eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195273984", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-17 01:40:00 UTC+03:00", + "endtime": "2024-12-17 02:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/34/2126371388315eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbalala bir paket alır ve içinde SQUEAKIES adını verdiği küçük pembe hayvanlar keşfeder. Barbabravo, Barbalala ve Barbasüslü kardeşlerinin kendileriyle dalga geçmesinden bıkmışlardır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195273990", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 02:00:00 UTC+03:00", + "endtime": "2024-12-17 02:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/36/2126371388345eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yıldızların altında bir kamp! Blaze, AJ, Starla, Crusher ve Pickle, en şaşırtıcı hikayeleri anlatmak için kamp ateşinin etrafında toplandı! Peki ya en iyi kısmı ne? En iyi hikayeyi kim anlatırsa son lokumu kazanacak!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 623. Bölüm" + }, + { + "id": "195273996", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 02:25:00 UTC+03:00", + "endtime": "2024-12-17 02:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/84/2126371398375eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze'in süper güçleri onu SÜPER BLAZE'e dönüştürür! Hem de tam zamanında. Axle Şehri'ne uzaydan botlar iner ve ortalığı karıştırırlar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 624. Bölüm" + }, + { + "id": "195274002", + "name": "Paw Patrol", + "starttime": "2024-12-17 02:50:00 UTC+03:00", + "endtime": "2024-12-17 03:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/31/2126371398405eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kışın, bir buz fırtınası macera körfezi'ni birbirine katıyor Başkan Goodway, başkan Humdinger'in basketbol takımına meydan okuyor. Ama başkan'ın unuttuğu bir şey var--bir basketbol takımı!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195274008", + "name": "Paw Patrol", + "starttime": "2024-12-17 03:10:00 UTC+03:00", + "endtime": "2024-12-17 03:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/24/2126371398435eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Çiftçi Al ve çiftçi Yumi evleniyor! Skye'ın en sevdiği gösteri pilotu Ace Soarenson, muhteşem bir hava şovu içinmacera körfezi'ne gelir.Ama tam varacağı sıtrada motoru arıza yapar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195274014", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-17 03:30:00 UTC+03:00", + "endtime": "2024-12-17 03:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/52/2126371398465eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark ve William eğlenirken bir su altı fırtınası başlayınca içeride macera yaşayıp yaşayamayacaklarından şüphe duyarlar. William ve Vola Genç Bilim İnsanı Yarışması'na katılırlar ve rekabetçi ruhları onları zorlu bir duruma sokar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195274020", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-17 03:55:00 UTC+03:00", + "endtime": "2024-12-17 04:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/94/2126371398495eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbataşkın, gizli ajan gibi, Barbapapa'nın pastasını kimin çaldığını bulmak için aletleriyle bir soruşturmaya başlar. Barbalala, evin etrafında dev bir tavuk duyduğuna emindir. Barbabebekler, nöbet tutmak için organize olurlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195274026", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-17 04:15:00 UTC+03:00", + "endtime": "2024-12-17 04:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/33/2126371398525eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Mağaradaki garip sesleri ne çıkarıyor? Jonathan denizkızı olduğunu düşünüyor, ama Paddington emin değil. Judy sahilde bir fosil bulmak istiyor, onun dışında herkesin şansı yaver gidiyor, Paddington yardım edebilir mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 308. Bölüm" + }, + { + "id": "195274032", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 04:40:00 UTC+03:00", + "endtime": "2024-12-17 05:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/67/2126371398555eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Bakkal Gabriel'e güzel bir sahil günü yaşatmak istiyor... buna yepyeni dönme dolaba binmek de dahil! Çiftçi Zoe'nin hayvanları rahatlamaya ihtiyaç duyduğunda, köpüşler Koç Karima ile yoga yapacakları mükemmel bir yer inşa ediyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195274038", + "name": "Kaşif Dora", + "starttime": "2024-12-17 05:00:00 UTC+03:00", + "endtime": "2024-12-17 05:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/31/2126371408585eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274044", + "name": "Kaşif Dora", + "starttime": "2024-12-17 05:10:00 UTC+03:00", + "endtime": "2024-12-17 05:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/48/2126371408615eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195274050", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 05:25:00 UTC+03:00", + "endtime": "2024-12-17 05:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/97/2126371408645eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Crusher son hilelerinden biriyle Blaze'i uzağa gönderdiğinde, Blaze'in küçük kız kardeşi Sparkle günü kurtarmaya ve kardeşini zamanında geri getirmeye gelir, böylece Takım Çalışması Kupasını kazanmak için birlikte yarışabilirler!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 701. Bölüm" + }, + { + "id": "195274056", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-17 05:45:00 UTC+03:00", + "endtime": "2024-12-17 06:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/17/2126371408675eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bonzo, Şef'in ev yapımı dondurmasından hiç alamayınca, Şef dondurma makinesiyle daha fazlasını yapmaya çalışıyor. Şef ve Olly taze makarna yaptı, bu yüzden Brody Bambino'nun yavaş pişirilen sosunu yapıyorlar - yavaş olması önemli!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195274062", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-17 06:10:00 UTC+03:00", + "endtime": "2024-12-17 06:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/39/2126371408705eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby, aile fotoğrafı gününde yanlışlıkla ortalığı kirletir ve ailesi öğrenmeden önce temizlenmek için olağanüstü çaba sarf eder. Penny ve Wallace iki balıklı bir yetenek gösterisinde sahne almak için bir araya gelir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274068", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 06:30:00 UTC+03:00", + "endtime": "2024-12-17 06:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/43/2126371408735eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195274074", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 06:40:00 UTC+03:00", + "endtime": "2024-12-17 06:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/80/2126371418765eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz balık tutma gezisinde bir Büyük Beyaz Köpek Balığı'yla tanışınca Max, en iyi arkadaşının vahşi içgüdülerine yenileceğinden korkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 111. Bölüm" + }, + { + "id": "195274080", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 06:45:00 UTC+03:00", + "endtime": "2024-12-17 06:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/65/2126371418795eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195274086", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 06:50:00 UTC+03:00", + "endtime": "2024-12-17 07:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/75/2126371418825eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195274092", + "name": "Paw Patrol", + "starttime": "2024-12-17 07:00:00 UTC+03:00", + "endtime": "2024-12-17 07:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/3/2126371418855eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gezgin Travis'i kurtarmaya çalışırken Ryder ve yavruları efsanevi Filler Kaplıcası'na rastlar. Otis Amca altın bulduğuna inanır ama Korsan Sid, Otis'in iddiasının üzerine atlamaya çalışınca Otis batık bir nakliye konteynerinde mahsur kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1019. Bölüm" + }, + { + "id": "195274098", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-17 07:20:00 UTC+03:00", + "endtime": "2024-12-17 07:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/21/2126371418885eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 415. Bölüm" + }, + { + "id": "195274104", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 07:30:00 UTC+03:00", + "endtime": "2024-12-17 07:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/96/2126371418915eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibinin en sevdiği kitap serisine yeni eklemeler var! Kütüphanede onlara yer kalmayınca, yavruların yaratıcı olması gerek. Yavruların Moloztaş için bir sürprizi var; atıştırmalık dağıtıcısı! Rubble öğrenmeden önce bitirebilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195274110", + "name": "Peppa Pig", + "starttime": "2024-12-17 07:55:00 UTC+03:00", + "endtime": "2024-12-17 08:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/79/2126371418945eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195274116", + "name": "Peppa Pig", + "starttime": "2024-12-17 08:00:00 UTC+03:00", + "endtime": "2024-12-17 08:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/98/2126371418975eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George bir kostüm partisi düzenler. Peppa bir masal prensesi, George da bir dinozor olur. Peppa, en iyi kostümü giyen arkadaşını seçmelidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 138. Bölüm" + }, + { + "id": "195274122", + "name": "Peppa Pig", + "starttime": "2024-12-17 08:05:00 UTC+03:00", + "endtime": "2024-12-17 08:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/58/2126371429005eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve ailesi müzeye giderler. Peppa kendini Kral ve Kraliçe odasındaki bir Kraliçe gibi hayal eder. George ise kendisinin Dinozor Odası'ndaki bir dinozor olduğunu düşünür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 139. Bölüm" + }, + { + "id": "195274128", + "name": "Peppa Pig", + "starttime": "2024-12-17 08:10:00 UTC+03:00", + "endtime": "2024-12-17 08:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/5/2126371429035eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 140. Bölüm" + }, + { + "id": "195274134", + "name": "Anna ve Dostları", + "starttime": "2024-12-17 08:15:00 UTC+03:00", + "endtime": "2024-12-17 08:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/68/2126371429065eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anna ve Froga eski salıncağı bulduklarında onu elma ağacına asmak için heyecanlanırlar. Ancak bağlayacakları ipler kaybolmuştur! İki arkadaşın kayıp ipleri araması düşündüklerinden daha zor bir hal alır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 102. Bölüm" + }, + { + "id": "195274140", + "name": "Anna ve Dostları", + "starttime": "2024-12-17 08:20:00 UTC+03:00", + "endtime": "2024-12-17 08:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/25/2126371429095eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Froga çaresizdir. En sevdiği oyuncağı Süper Çakıl kayboldu! Şimdi Anna ve Ron, dedektifler olarak Froga için çalışıyor. Düşünceli Christopher'ın hediyesi sayesinde Froga kayıp Süper taşını bulur!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 103. Bölüm" + }, + { + "id": "195274146", + "name": "Minik Şef", + "starttime": "2024-12-17 08:30:00 UTC+03:00", + "endtime": "2024-12-17 08:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/69/2126371429125eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef yağmurlu bir gün Peynirli Makaroni yapar ama akan bir çatı ağaç kütüğü mutfağında kaos yaratır! Minik Şef korsan patates yahnisi pişiriyor ve özel malzemeyi bulmak için bir hazine haritası kullanıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195274152", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-17 08:50:00 UTC+03:00", + "endtime": "2024-12-17 09:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/89/2126371429155eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dünyanın en küçük şefi tarafından yaratılan, dünyanın en küçük yemek programında, dünyanın en küçük yemekleri.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195274158", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 09:00:00 UTC+03:00", + "endtime": "2024-12-17 09:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/65/2126371429185eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze Kamyon Topu diye yeni ve heyecan verici bir spor keşfeder. Ezici ve ahbapları ona maç teklifi edince Blaze'in büyük maçtan önce bir takım kurmak için bütün Aks Şehri'ni alt üst etmesi gerekir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195274164", + "name": "Hamster Diyarı", + "starttime": "2024-12-17 09:25:00 UTC+03:00", + "endtime": "2024-12-17 09:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/4/2126371429215eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hamsterlar internetteki popüler hayvan videolarıyla yarışmaya çalışır ve sonunda viral olurlar. Mondo yeni süper gücü (fırtınalara neden olmak) ve arkadaşı arasında seçim yapmak zorundadır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195274170", + "name": "Paw Patrol", + "starttime": "2024-12-17 09:45:00 UTC+03:00", + "endtime": "2024-12-17 10:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/46/2126371439245eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Vali Humdinger'ın en büyük kavun yarışmasını kazanma planı kavunu sekerek uzaklaşıp kasabayı birbirine katınca suya düşer! Çiftçi Al'ın kamyoneti yıkık bir köprüde mahsur kalır, onu kurtarmak da Köpekçiklere kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 603. Bölüm" + }, + { + "id": "195274176", + "name": "Paw Patrol", + "starttime": "2024-12-17 10:10:00 UTC+03:00", + "endtime": "2024-12-17 10:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/77/2126371439275eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yumi'nin nefis balı ve arı kovanları çiftlikten kaybolunca ortalık karışır! Vali Goodway'in cüzdanı içinde Çikiletta'yla birlikte kaybolur!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 604. Bölüm" + }, + { + "id": "195274182", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-17 10:30:00 UTC+03:00", + "endtime": "2024-12-17 10:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/19/2126371439305eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195274188", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 10:40:00 UTC+03:00", + "endtime": "2024-12-17 11:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/95/2126371439335eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kütüphane inşaatı arılarla dolup taşıyor! Bu da ekstra güzel bir inşaat çözümü gerektiriyor. Büyükbaba, Charger'a büyük dans yarışması için en iyi hareketlerini öğretiyor. Ama kaçan bir disko topu onlara birinciliğe mal olacak mı?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195274194", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 11:05:00 UTC+03:00", + "endtime": "2024-12-17 11:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/30/2126371439365eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Ekip Lucas ve Lily için özel bir limonata standı kurduktan sonra, ekşi bir Hız Ustası onu İnşaatçı Koyu'na yuvarlıyor! Kunduz Crunchy neden yolun karşısına geçiyor? Çünkü Rubble ve Ekibi karşıya geçmesi için bir köprü inşa ediyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195274200", + "name": "Kaşif Dora", + "starttime": "2024-12-17 11:30:00 UTC+03:00", + "endtime": "2024-12-17 11:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/90/2126371439395eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274206", + "name": "Kaşif Dora", + "starttime": "2024-12-17 11:40:00 UTC+03:00", + "endtime": "2024-12-17 11:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/77/2126371439425eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195274212", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-17 11:50:00 UTC+03:00", + "endtime": "2024-12-17 12:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/57/2126371449455eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Diğer tüm balıklar kış tatilinde şehir dışındayken, Baby ve William kendi yüzgeçli dostluk günlerini yaratırlar. Chucks, Balık İzcileri ile ilk gezisinde kamp yapmaya eşsiz bir yaklaşım getiriyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 224. Bölüm" + }, + { + "id": "195274218", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 12:15:00 UTC+03:00", + "endtime": "2024-12-17 12:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/54/2126371449485eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195274224", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 12:20:00 UTC+03:00", + "endtime": "2024-12-17 12:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/89/2126371449515eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz'ün vahşi tarafı köpek parkındaki köpekleri korkutmaya devam etmektedir. Camgöz yeni arkadaşlar edinmek istiyorsa kendi iç sakinliğini bulmak zorunda kalacaktır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195274230", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 12:25:00 UTC+03:00", + "endtime": "2024-12-17 12:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/34/2126371449545eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz yanlışlıkla akvaryumda sergilenen en yeni parçayı yiyince, Max ve Köpek Balığı Sürüsü akvaryumun sahibi Bay Ceviche farkına varmadan önce bir plan yapmak zorunda kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195274236", + "name": "Peppa Pig", + "starttime": "2024-12-17 12:35:00 UTC+03:00", + "endtime": "2024-12-17 12:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/38/2126371449575eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George, kuzenleri Chloé'nin evini ziyaret eder. Chloé onlara çok horlayan bir domuzun olduğu bir kukla gösterisi yapar. Baba Domuz ve Amca Domuz, horlamakla meşgul oldukları için bu gösteriyi kaçırır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 141. Bölüm" + }, + { + "id": "195274242", + "name": "Peppa Pig", + "starttime": "2024-12-17 12:40:00 UTC+03:00", + "endtime": "2024-12-17 12:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/29/2126371449605eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baba Domuz şişman olduğu için, Peppa ona egzersiz yapmasını söyler. Baba Domuz, sağlıklı olmak için her gün egzersiz yapmak gerektiğini öğrenince dehşete düşer.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 142. Bölüm" + }, + { + "id": "195274248", + "name": "Peppa Pig", + "starttime": "2024-12-17 12:45:00 UTC+03:00", + "endtime": "2024-12-17 12:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/7/2126371449635eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 143. Bölüm" + }, + { + "id": "195274254", + "name": "Peppa Pig", + "starttime": "2024-12-17 12:50:00 UTC+03:00", + "endtime": "2024-12-17 12:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/58/2126371459665eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George parka gider. Peppa'nın arkadaşları da oradadır. Peppa sallanmayı çok seviyordur ama George yüksekten korktuğu için sevmiyordur. Baba Domuz, George'a yüksek kaydıraktan kayması için yardım eder ama George kayarken sıkışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 144. Bölüm" + }, + { + "id": "195274260", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-17 12:55:00 UTC+03:00", + "endtime": "2024-12-17 13:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/86/2126371459695eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, Atıştırmalık Molası sırasında Stump Band'e en iyi fıstık ezmeli ve jöleli sandviçleri yapar. Bugün Patates Günü, Henry'nin en sevdiği bayram! Şef, Henry'nin patates yemeğini yapar ancak Henry yemeğin adını hatırlamaz!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195274266", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-17 13:15:00 UTC+03:00", + "endtime": "2024-12-17 13:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/55/2126371459725eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195274272", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-17 13:40:00 UTC+03:00", + "endtime": "2024-12-17 14:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/11/2126371459755eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbalala bir paket alır ve içinde SQUEAKIES adını verdiği küçük pembe hayvanlar keşfeder. Barbabravo, Barbalala ve Barbasüslü kardeşlerinin kendileriyle dalga geçmesinden bıkmışlardır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274278", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 14:00:00 UTC+03:00", + "endtime": "2024-12-17 14:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/88/2126371459785eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Yıldızların altında bir kamp! Blaze, AJ, Starla, Crusher ve Pickle, en şaşırtıcı hikayeleri anlatmak için kamp ateşinin etrafında toplandı! Peki ya en iyi kısmı ne? En iyi hikayeyi kim anlatırsa son lokumu kazanacak!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 623. Bölüm" + }, + { + "id": "195274284", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 14:25:00 UTC+03:00", + "endtime": "2024-12-17 14:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/38/2126371459815eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze'in süper güçleri onu SÜPER BLAZE'e dönüştürür! Hem de tam zamanında. Axle Şehri'ne uzaydan botlar iner ve ortalığı karıştırırlar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 624. Bölüm" + }, + { + "id": "195274290", + "name": "Paw Patrol", + "starttime": "2024-12-17 14:50:00 UTC+03:00", + "endtime": "2024-12-17 15:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/4/2126371459845eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Kışın, bir buz fırtınası macera körfezi'ni birbirine katıyor Başkan Goodway, başkan Humdinger'in basketbol takımına meydan okuyor. Ama başkan'ın unuttuğu bir şey var--bir basketbol takımı!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195274296", + "name": "Paw Patrol", + "starttime": "2024-12-17 15:10:00 UTC+03:00", + "endtime": "2024-12-17 15:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/61/2126371469875eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Çiftçi Al ve çiftçi Yumi evleniyor! Skye'ın en sevdiği gösteri pilotu Ace Soarenson, muhteşem bir hava şovu içinmacera körfezi'ne gelir.Ama tam varacağı sıtrada motoru arıza yapar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195274302", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-17 15:35:00 UTC+03:00", + "endtime": "2024-12-17 15:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/61/2126371469905eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark ve William eğlenirken bir su altı fırtınası başlayınca içeride macera yaşayıp yaşayamayacaklarından şüphe duyarlar. William ve Vola Genç Bilim İnsanı Yarışması'na katılırlar ve rekabetçi ruhları onları zorlu bir duruma sokar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195274308", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-17 15:55:00 UTC+03:00", + "endtime": "2024-12-17 16:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/41/2126371469935eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbataşkın, gizli ajan gibi, Barbapapa'nın pastasını kimin çaldığını bulmak için aletleriyle bir soruşturmaya başlar. Barbalala, evin etrafında dev bir tavuk duyduğuna emindir. Barbabebekler, nöbet tutmak için organize olurlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195274314", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-17 16:15:00 UTC+03:00", + "endtime": "2024-12-17 16:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/49/2126371469965eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Mağaradaki garip sesleri ne çıkarıyor? Jonathan denizkızı olduğunu düşünüyor, ama Paddington emin değil. Judy sahilde bir fosil bulmak istiyor, onun dışında herkesin şansı yaver gidiyor, Paddington yardım edebilir mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 308. Bölüm" + }, + { + "id": "195274320", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 16:40:00 UTC+03:00", + "endtime": "2024-12-17 17:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/75/2126371469995eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Bakkal Gabriel'e güzel bir sahil günü yaşatmak istiyor... buna yepyeni dönme dolaba binmek de dahil! Çiftçi Zoe'nin hayvanları rahatlamaya ihtiyaç duyduğunda, köpüşler Koç Karima ile yoga yapacakları mükemmel bir yer inşa ediyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195274326", + "name": "Kaşif Dora", + "starttime": "2024-12-17 17:00:00 UTC+03:00", + "endtime": "2024-12-17 17:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/55/2126371460025eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274332", + "name": "Kaşif Dora", + "starttime": "2024-12-17 17:10:00 UTC+03:00", + "endtime": "2024-12-17 17:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/13/2126371460055eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195274338", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 17:25:00 UTC+03:00", + "endtime": "2024-12-17 17:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/84/2126371470085eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Crusher son hilelerinden biriyle Blaze'i uzağa gönderdiğinde, Blaze'in küçük kız kardeşi Sparkle günü kurtarmaya ve kardeşini zamanında geri getirmeye gelir, böylece Takım Çalışması Kupasını kazanmak için birlikte yarışabilirler!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 701. Bölüm" + }, + { + "id": "195274344", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-17 17:45:00 UTC+03:00", + "endtime": "2024-12-17 18:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/96/2126371470115eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bonzo, Şef'in ev yapımı dondurmasından hiç alamayınca, Şef dondurma makinesiyle daha fazlasını yapmaya çalışıyor. Şef ve Olly taze makarna yaptı, bu yüzden Brody Bambino'nun yavaş pişirilen sosunu yapıyorlar - yavaş olması önemli!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195274350", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-17 18:10:00 UTC+03:00", + "endtime": "2024-12-17 18:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/59/2126371470145eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby, aile fotoğrafı gününde yanlışlıkla ortalığı kirletir ve ailesi öğrenmeden önce temizlenmek için olağanüstü çaba sarf eder. Penny ve Wallace iki balıklı bir yetenek gösterisinde sahne almak için bir araya gelir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274356", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 18:30:00 UTC+03:00", + "endtime": "2024-12-17 18:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/11/2126371470175eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 110. Bölüm" + }, + { + "id": "195274362", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 18:40:00 UTC+03:00", + "endtime": "2024-12-17 18:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/75/2126371470205eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz balık tutma gezisinde bir Büyük Beyaz Köpek Balığı'yla tanışınca Max, en iyi arkadaşının vahşi içgüdülerine yenileceğinden korkar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 111. Bölüm" + }, + { + "id": "195274368", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 18:45:00 UTC+03:00", + "endtime": "2024-12-17 18:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/42/2126371470235eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195274374", + "name": "Camgöz (2020)", + "starttime": "2024-12-17 18:50:00 UTC+03:00", + "endtime": "2024-12-17 19:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/21/2126371470265eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195274380", + "name": "Paw Patrol", + "starttime": "2024-12-17 19:00:00 UTC+03:00", + "endtime": "2024-12-17 19:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/65/2126371480295eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gezgin Travis'i kurtarmaya çalışırken Ryder ve yavruları efsanevi Filler Kaplıcası'na rastlar. Otis Amca altın bulduğuna inanır ama Korsan Sid, Otis'in iddiasının üzerine atlamaya çalışınca Otis batık bir nakliye konteynerinde mahsur kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1019. Bölüm" + }, + { + "id": "195274386", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-17 19:20:00 UTC+03:00", + "endtime": "2024-12-17 19:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/75/2126371480325eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 415. Bölüm" + }, + { + "id": "195274392", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 19:30:00 UTC+03:00", + "endtime": "2024-12-17 20:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/84/2126371480355eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibinin en sevdiği kitap serisine yeni eklemeler var! Kütüphanede onlara yer kalmayınca, yavruların yaratıcı olması gerek. Yavruların Moloztaş için bir sürprizi var; atıştırmalık dağıtıcısı! Rubble öğrenmeden önce bitirebilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195274398", + "name": "Kaşif Dora", + "starttime": "2024-12-17 20:00:00 UTC+03:00", + "endtime": "2024-12-17 20:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/38/2126371480385eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274404", + "name": "Kaşif Dora", + "starttime": "2024-12-17 20:10:00 UTC+03:00", + "endtime": "2024-12-17 20:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/38/2126371480415eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195274410", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-17 20:20:00 UTC+03:00", + "endtime": "2024-12-17 20:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/0/2126371480445eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabebekler, yediklerinin renk ve şekillerini değiştirdiğini düşünüyor. Bunun için doğru yiyeceği bulmaya çalışacaklar. Barbartist ilham bulamadığından sanat yapamaz. Bütün aile boyayacak yeni konular önererek ona yardımcı olur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 126. Bölüm" + }, + { + "id": "195274416", + "name": "Hamster Diyarı", + "starttime": "2024-12-17 20:40:00 UTC+03:00", + "endtime": "2024-12-17 21:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/29/2126371480475eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hamsterlar Kendrick'in eski yatar koltuğunun dışarı atılmasını engellemelidir. Bir anne kuş Lil Pal'ı kayıp yavrusu sandığında, hamsterlar arkadaşlarını kurtarır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195274422", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 21:00:00 UTC+03:00", + "endtime": "2024-12-17 21:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/2/2126371490505eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Acıkan Ezici yanlışlıkla fırın kamyonunun robotlarının dağınık modunu açar ve robotlar tekerlek çıkarıp gider! Aks Şehri unlu mamullerle kaplanmadan bütün başı boş robotları bulmak AJ ve Blaze'e kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 111. Bölüm" + }, + { + "id": "195274428", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-17 21:25:00 UTC+03:00", + "endtime": "2024-12-17 21:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/28/2126371490535eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gazkuaç, Blaze ve AJ'yi dondurma partisine çağırır! Ama çok önemli bir şey unutur - dondurmayı! Blaze dondurma aracına dönüşür ve Gazkuaç'ın evine vaktinde yetişir!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 507. Bölüm" + }, + { + "id": "195274434", + "name": "Paw Patrol", + "starttime": "2024-12-17 21:45:00 UTC+03:00", + "endtime": "2024-12-17 22:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/10/2126371490565eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bu koku da ne? Tuhaf bir koku ormandaki hayvanları evinden kaçırıyor. Devekuşu Olivia kanyona düştü! Köpekçiklerin yakında çatlayacak yumurtalarını sıcak tutarak Olivia'yı güvenli bir yere çıkarması gerek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 606. Bölüm" + }, + { + "id": "195274440", + "name": "Paw Patrol", + "starttime": "2024-12-17 22:10:00 UTC+03:00", + "endtime": "2024-12-17 22:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/87/2126371490595eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gustavo Goodway'in gitarı kayboldu. Köpekçiklerin kamp konserinden önce gitarı bulması gerekiyor. Çiftçi Yumi'nin Keçi Yogası sınıfı çok tutulur, ta ki keçileri kaybolana kadar. Keçileri bulup Yumi'nin çiftliğine getirmek de Paw Patrol'e kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 607. Bölüm" + }, + { + "id": "195274446", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-17 22:30:00 UTC+03:00", + "endtime": "2024-12-17 22:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/27/2126371490625eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195274452", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 22:40:00 UTC+03:00", + "endtime": "2024-12-17 23:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/89/2126371490655eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "İnşaatçı Koyu'nda bir gizem var! Tüm kasaba halkının heykelleri aniden ortadan kaybolunca Chase, kayıp heykel vakasını çözmek için Rubble ve Ekibi'ne katılır ve araştırmaya yardımcı olmak için yepyeni bir Bilim Merkezi inşa eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195274458", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-17 23:05:00 UTC+03:00", + "endtime": "2024-12-17 23:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/32/2126371490685eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hız Ustası Yetenek Gösterisi sahnesini sabote edince, yavrular günü kurtarmak için Motor'un yeteneğini kullanıyor. Parıltı Sierra İnşaçı Koyu Günü için şarkı söyleyecek! Grubun enstrümanları bozulunca, Rubble ve Ekibi'nin bir çözümü var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 121. Bölüm" + }, + { + "id": "195274464", + "name": "Kaşif Dora", + "starttime": "2024-12-17 23:30:00 UTC+03:00", + "endtime": "2024-12-17 23:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/48/2126371490715eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274470", + "name": "Kaşif Dora", + "starttime": "2024-12-17 23:40:00 UTC+03:00", + "endtime": "2024-12-17 23:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/72/2126371500745eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195274476", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-17 23:50:00 UTC+03:00", + "endtime": "2024-12-18 00:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241211/87/2126371500775eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Carnivore Koy'da dans etmek yasaklandığında, Baby Shark kasabanın tekrar dans etmesi için ne gerekiyorsa yapacaktır! Baby ve William, Ernie'nin en iyi arkadaşını edinmesine yardım etmeye çalışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 225. Bölüm" + } + ], + [ + { + "id": "195333870", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 00:15:00 UTC+03:00", + "endtime": "2024-12-18 00:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/78/2126427686425eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195333876", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 00:20:00 UTC+03:00", + "endtime": "2024-12-18 00:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/71/2126427686455eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz yıllık Fisher aile fotoğrafında yer alacağı için çok heyecanlıdır, ancak peş peşe gelen talihsizlikler onun mükemmel fotoğrafı için bir tehdit oluşturur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195333882", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 00:25:00 UTC+03:00", + "endtime": "2024-12-18 00:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/74/2126427686485eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dennis, Köpek Balığı Sürüsü'nü 3'e 3 basketbol oyununa davet ettiğinde, Camgöz harika bir oyuncu olduğunu gösterir. O kadar harikadır ki, sonunda Max'in yerini bile alabilir!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195333888", + "name": "Peppa Pig", + "starttime": "2024-12-18 00:35:00 UTC+03:00", + "endtime": "2024-12-18 00:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/0/2126427686515eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 149. Bölüm" + }, + { + "id": "195333894", + "name": "Peppa Pig", + "starttime": "2024-12-18 00:40:00 UTC+03:00", + "endtime": "2024-12-18 00:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/19/2126427686545eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 150. Bölüm" + }, + { + "id": "195333900", + "name": "Peppa Pig", + "starttime": "2024-12-18 00:45:00 UTC+03:00", + "endtime": "2024-12-18 00:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/8/2126427686575eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baba Domuz yeni bir video kamera alır. Önce Peppa, ona nasıl çalıştığını gösterir, sonra Baba Domuz, Peppa'nın şapşal görüntülerini kaydeder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 151. Bölüm" + }, + { + "id": "195333906", + "name": "Peppa Pig", + "starttime": "2024-12-18 00:50:00 UTC+03:00", + "endtime": "2024-12-18 00:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/2/2126427686605eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve arkadaşları, Kırmızı Başlıklı Kız ile ilgili bir okul temsilinde rol alır. Ama Midilli Pedro, sahneye çıkacağı için çok gergindir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 152. Bölüm" + }, + { + "id": "195333912", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-18 00:55:00 UTC+03:00", + "endtime": "2024-12-18 01:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/38/2126427686635eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Morton'un yol atıştırmalığı düşünce Şef ve Olly ona yolculuğu için en iyi atıştırmalığı yapmak üzerine yarışır. İlk aşçılık deneyimi için çok hevesli olan biri, Şef ve Olly'ye nachos yapımında yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195333918", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-18 01:15:00 UTC+03:00", + "endtime": "2024-12-18 01:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/85/2126427686665eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195333924", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-18 01:40:00 UTC+03:00", + "endtime": "2024-12-18 02:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/85/2126427696695eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapalar, altında doğdukları ağaca geri döner. Ağaç kötü durumda. Yakındaki hayvanları rahatsız etmeden onu kurtarmalı. Bugün Barbabebeklerin doğum günü. Hepsi Barbapapa'yla farklı bir şeyler yapmak istiyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195334442", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 02:00:00 UTC+03:00", + "endtime": "2024-12-18 02:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/86/2126427696725eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Üç devasa posta teslimatı olunca, hepsini teslim edebilecek tek bir canavar makine var: Posta Kamyonu Blaze! Denizleri yüzerek aşacak, dağlara tırmanacak ve Monster Dome'a girecek çünkü posta kamyonları her zaman teslimat yapar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 702. Bölüm" + }, + { + "id": "195334448", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 02:25:00 UTC+03:00", + "endtime": "2024-12-18 02:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/91/2126427696755eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükannenin doğum günü ama Crusher'ın hediye parası yok! Blaze ve AJ ona farklı işler yapmasında ve para kazanmasında yardım ediyor. Ancak, doğum günü partisine zamanında yetişebilmek için acele etmeleri gerek!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 703. Bölüm" + }, + { + "id": "195334454", + "name": "Paw Patrol", + "starttime": "2024-12-18 02:50:00 UTC+03:00", + "endtime": "2024-12-18 03:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/50/2126427696785eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bugün macera körfezi'nde yetenek şovu günü! Başkan Goodway heyecanlı ama yeterince gösteri olmayacağından endişeli! Ryder ve köpekçikler, Çiftçi Al'a mısırlı rostosunu ve mısır tarlası labirentini hazırlamasında yardım ediyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195334460", + "name": "Paw Patrol", + "starttime": "2024-12-18 03:10:00 UTC+03:00", + "endtime": "2024-12-18 03:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/8/2126427696815eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Diğer köpekçikler paraşüt eğitimindeyken, Marshall bir grup kedi yavrusunu tek başına toplamak zorunda. Ama diğer köpek sürüleriniden de destek görüyor! Ryder ve paw patrol, bir geyik ailesini kaygan buzların üstündem kurtarıyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195334466", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-18 03:30:00 UTC+03:00", + "endtime": "2024-12-18 03:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/94/2126427696845eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark'ın Midye Topu ekibi alışılmadık yöntemleri olan bir koç tutar. Baby Shark, Büyükanne Köpekbalığı ile yapacağı büyük dans partisinden önce büyük lokma yutar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195334472", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-18 03:55:00 UTC+03:00", + "endtime": "2024-12-18 04:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/24/2126427696875eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabebekler, anneye doğum günü için gösteri hazırlar. Sonra karnavala giderler ve Barbaartist bir alette mahsur kalır. Üç ayrı hikaye avlunun ortasında büyük bir hikayeye dönüşür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195334478", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-18 04:15:00 UTC+03:00", + "endtime": "2024-12-18 04:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/93/2126427706905eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington martıların cipslere bayıldığını ve almak için her şeyi yapacaklarını anlar, ama öğle yemeğini sıcak teslim edebilir mi? Deniz feneri bozulur ve sisli gecede Paddington denizdeki tekneyi kurtarmaya yardım edebilir mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 309. Bölüm" + }, + { + "id": "195334484", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 04:40:00 UTC+03:00", + "endtime": "2024-12-18 05:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/70/2126427706935eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Skye, Rubble ve Ekibi'nin inşaat projelerinin hava desteğine ihtiyacı olduğunda Macera Koyu'ndan gelir. Ancak Hız Ustası işi bitirmek için köpüşleri geçmeye çalıştığında, Skye, Rubble ve ekibin geri kalanı günü kurtarmak için kurtarma moduna geçer!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195334490", + "name": "Kaşif Dora", + "starttime": "2024-12-18 05:00:00 UTC+03:00", + "endtime": "2024-12-18 05:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/5/2126427706965eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334496", + "name": "Kaşif Dora", + "starttime": "2024-12-18 05:10:00 UTC+03:00", + "endtime": "2024-12-18 05:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/29/2126427706995eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334502", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 05:25:00 UTC+03:00", + "endtime": "2024-12-18 05:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/6/2126427707025eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Crusher ve Pickle, fokurdayan bir balçık takasının üzerindeki bir kafesin içinde mahsur kaldığında, şövalye olmak Blaze, AJ ve Sparkle'a kalır. Çok geç olmadan Crusher ve Pickle'ı bataklıktan kurtarabilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 704. Bölüm" + }, + { + "id": "195334508", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-18 05:45:00 UTC+03:00", + "endtime": "2024-12-18 06:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/46/2126427707055eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef ve Olly soğan sosu yapıyor ama Şef soğan yüzünden ağlamadan duramıyor! Kraliçe Arı Kütük'ün çay partisine gelir, Şef kraliçelere layık bir parti düzenlemeye kararlıdır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195334514", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-18 06:10:00 UTC+03:00", + "endtime": "2024-12-18 06:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/74/2126427717085eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bir grup tavşan sümüklüböceği başıboş dolaşmaya başlayınca Vola onları tek başına toplamaya koyulur. William, Chumby adında bir deniz domuzunu evlat edindiğinde, küçük bücür William'ın beklediğinden daha fazla sorun çıkarır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195334520", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 06:30:00 UTC+03:00", + "endtime": "2024-12-18 06:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/85/2126427717115eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195334526", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 06:40:00 UTC+03:00", + "endtime": "2024-12-18 06:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/97/2126427717145eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195334532", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 06:45:00 UTC+03:00", + "endtime": "2024-12-18 06:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/48/2126427717175eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195334538", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 06:50:00 UTC+03:00", + "endtime": "2024-12-18 07:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/29/2126427717205eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195334544", + "name": "Paw Patrol", + "starttime": "2024-12-18 07:00:00 UTC+03:00", + "endtime": "2024-12-18 07:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/52/2126427717235eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Humdinger'ın yansıtıcı panelini taşıyan drone bir ağaca çarpar, yansıtıcı bir ışık demetini ahşap bir köprü üzerinde yoğunlaştırarak yanmasına neden olur. Paw Patrol, dev bir egzersiz topunun içinde yuvarlanan Winnie ve bir kapibara'yı kurtarır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1020. Bölüm" + }, + { + "id": "195334550", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-18 07:20:00 UTC+03:00", + "endtime": "2024-12-18 07:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/9/2126427727265eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 415. Bölüm" + }, + { + "id": "195334556", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 07:30:00 UTC+03:00", + "endtime": "2024-12-18 07:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/53/2126427727295eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Gravel Dede'nin özel fotoğrafı için bir kuaför salonu inşa ediyor, ta ki şampuanla ilgili bir aksilikle karşılaşana dek! Motor ve Lily yavruların şimdiye kadar gördükleri en havalı ışık gösterisiyle parlak bir keşif yaparlar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195334562", + "name": "Peppa Pig", + "starttime": "2024-12-18 07:55:00 UTC+03:00", + "endtime": "2024-12-18 08:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/60/2126427727325eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195334568", + "name": "Peppa Pig", + "starttime": "2024-12-18 08:00:00 UTC+03:00", + "endtime": "2024-12-18 08:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/85/2126427727355eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anne Domuz evde yokken, Baba Domuz duvara Peppa ve George'un resmini asmak ister. Yanlışlıkla duvarı çatlatır ve Peppa ve George, Anne Domuz eve gelmeden Baba Domuz'a tamirat için yardım ederler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 145. Bölüm" + }, + { + "id": "195334574", + "name": "Peppa Pig", + "starttime": "2024-12-18 08:05:00 UTC+03:00", + "endtime": "2024-12-18 08:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/60/2126427727385eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve ailesi plaja gider ve Baba Domuz'u kumlara gömmek de dâhil, birçok şey yaparlar. Dönüş vakti geldiğinde Baba Domuz uyuyakaldığı için neredeyse onu unutacaklardır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 146. Bölüm" + }, + { + "id": "195334580", + "name": "Peppa Pig", + "starttime": "2024-12-18 08:10:00 UTC+03:00", + "endtime": "2024-12-18 08:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/80/2126427727415eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George, Büyükbaba Domuz'un teknesiyle gezintiye gider. Köpek Danny ve Büyükbaba Köpek de tekneyle açılmıştır. Büyükbaba Domuz ve Büyükbaba Köpek, kimin daha hızlı olduğunu anlamak için yarışırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 148. Bölüm" + }, + { + "id": "195334586", + "name": "Anna ve Dostları", + "starttime": "2024-12-18 08:15:00 UTC+03:00", + "endtime": "2024-12-18 08:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/91/2126427727445eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Christopher, Süper Christopher kostümüyle maceraya hazır şekilde Anna'yı ziyaret eder! Ancak bir süper kahraman olmak zorlukları da beraberinde getirir. Christopher sadece bir süper kahraman değil, aynı zamanda süper bir arkadaş.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 104. Bölüm" + }, + { + "id": "195334592", + "name": "Anna ve Dostları", + "starttime": "2024-12-18 08:20:00 UTC+03:00", + "endtime": "2024-12-18 08:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/77/2126427737475eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Polaroid kamera tüm dostlarının fotoğraflarını çekmeye karar verir. Herkes bunun harika bir fikir olduğunu düşünür ve Anna harika portreler çeker. Bir grup fotoğrafı çekmeye çalıştığında işler karmaşıklaşır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 105. Bölüm" + }, + { + "id": "195334598", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-18 08:30:00 UTC+03:00", + "endtime": "2024-12-18 08:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/33/2126427737505eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef, sürpriz doğum günü kahvaltısı için Olly'nin en sevdiği çörekleri onu uyandırmadan pişirmeye çalışır. Şef ve Olly bir yandan on iki uğur böceği bebeğe bakıcılık yaparken bir yandan da onlara atıştırmalık bir şeyler hazırlamaya çalışırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195334604", + "name": "Minik Şef", + "starttime": "2024-12-18 08:50:00 UTC+03:00", + "endtime": "2024-12-18 09:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/6/2126427737535eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef evinde küçük yemek şovu verir ve en iyi arkadaşları Olly, Ruby ve Henry ile lezzetli yemekler ve harika maceralar hazırlar. Minik Şef, buluşlarını arkadaşlarıyla paylaşmaktan keyif alır ve yaptığı her yemeğe sevgisini katar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195334610", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 09:00:00 UTC+03:00", + "endtime": "2024-12-18 09:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/13/2126427737565eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Acıkan Ezici yanlışlıkla fırın kamyonunun robotlarının dağınık modunu açar ve robotlar tekerlek çıkarıp gider! Aks Şehri unlu mamullerle kaplanmadan bütün başı boş robotları bulmak AJ ve Blaze'e kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 111. Bölüm" + }, + { + "id": "195334616", + "name": "Hamster Diyarı", + "starttime": "2024-12-18 09:25:00 UTC+03:00", + "endtime": "2024-12-18 09:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/75/2126427737595eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Greg çiğneme alışkanlığını bıraktığında dişleri kontrolden çıkar. Clover, Harry ona dört yapraklı bir yonca hediye ettiğinde kendisine iyi şans tılsımı verildiğini düşünür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 111. Bölüm" + }, + { + "id": "195334622", + "name": "Paw Patrol", + "starttime": "2024-12-18 09:45:00 UTC+03:00", + "endtime": "2024-12-18 10:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/30/2126427737625eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bu koku da ne? Tuhaf bir koku ormandaki hayvanları evinden kaçırıyor. Devekuşu Olivia kanyona düştü! Köpekçiklerin yakında çatlayacak yumurtalarını sıcak tutarak Olivia'yı güvenli bir yere çıkarması gerek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 606. Bölüm" + }, + { + "id": "195334628", + "name": "Paw Patrol", + "starttime": "2024-12-18 10:10:00 UTC+03:00", + "endtime": "2024-12-18 10:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/27/2126427737655eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Gustavo Goodway'in gitarı kayboldu. Köpekçiklerin kamp konserinden önce gitarı bulması gerekiyor. Çiftçi Yumi'nin Keçi Yogası sınıfı çok tutulur, ta ki keçileri kaybolana kadar. Keçileri bulup Yumi'nin çiftliğine getirmek de Paw Patrol'e kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 607. Bölüm" + }, + { + "id": "195334634", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-18 10:30:00 UTC+03:00", + "endtime": "2024-12-18 10:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/79/2126427737685eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195334640", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 10:40:00 UTC+03:00", + "endtime": "2024-12-18 11:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/38/2126427747715eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "İnşaatçı Koyu'nda bir gizem var! Tüm kasaba halkının heykelleri aniden ortadan kaybolunca Chase, kayıp heykel vakasını çözmek için Rubble ve Ekibi'ne katılır ve araştırmaya yardımcı olmak için yepyeni bir Bilim Merkezi inşa eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195334646", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 11:05:00 UTC+03:00", + "endtime": "2024-12-18 11:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/76/2126427747745eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hız Ustası Yetenek Gösterisi sahnesini sabote edince, yavrular günü kurtarmak için Motor'un yeteneğini kullanıyor. Parıltı Sierra İnşaçı Koyu Günü için şarkı söyleyecek! Grubun enstrümanları bozulunca, Rubble ve Ekibi'nin bir çözümü var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 121. Bölüm" + }, + { + "id": "195334652", + "name": "Kaşif Dora", + "starttime": "2024-12-18 11:30:00 UTC+03:00", + "endtime": "2024-12-18 11:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/43/2126427747775eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334658", + "name": "Kaşif Dora", + "starttime": "2024-12-18 11:40:00 UTC+03:00", + "endtime": "2024-12-18 11:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/50/2126427747805eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334664", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-18 11:50:00 UTC+03:00", + "endtime": "2024-12-18 12:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/35/2126427747835eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Carnivore Koy'da dans etmek yasaklandığında, Baby Shark kasabanın tekrar dans etmesi için ne gerekiyorsa yapacaktır! Baby ve William, Ernie'nin en iyi arkadaşını edinmesine yardım etmeye çalışır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 225. Bölüm" + }, + { + "id": "195334670", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 12:15:00 UTC+03:00", + "endtime": "2024-12-18 12:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/47/2126427757865eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195334676", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 12:20:00 UTC+03:00", + "endtime": "2024-12-18 12:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/46/2126427757895eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz yıllık Fisher aile fotoğrafında yer alacağı için çok heyecanlıdır, ancak peş peşe gelen talihsizlikler onun mükemmel fotoğrafı için bir tehdit oluşturur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195334682", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 12:25:00 UTC+03:00", + "endtime": "2024-12-18 12:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/39/2126427757925eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Dennis, Köpek Balığı Sürüsü'nü 3'e 3 basketbol oyununa davet ettiğinde, Camgöz harika bir oyuncu olduğunu gösterir. O kadar harikadır ki, sonunda Max'in yerini bile alabilir!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195334688", + "name": "Peppa Pig", + "starttime": "2024-12-18 12:35:00 UTC+03:00", + "endtime": "2024-12-18 12:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/82/2126427757955eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 149. Bölüm" + }, + { + "id": "195334694", + "name": "Peppa Pig", + "starttime": "2024-12-18 12:40:00 UTC+03:00", + "endtime": "2024-12-18 12:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/73/2126427757985eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 150. Bölüm" + }, + { + "id": "195334700", + "name": "Peppa Pig", + "starttime": "2024-12-18 12:45:00 UTC+03:00", + "endtime": "2024-12-18 12:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/4/2126427758015eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baba Domuz yeni bir video kamera alır. Önce Peppa, ona nasıl çalıştığını gösterir, sonra Baba Domuz, Peppa'nın şapşal görüntülerini kaydeder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 151. Bölüm" + }, + { + "id": "195334706", + "name": "Peppa Pig", + "starttime": "2024-12-18 12:50:00 UTC+03:00", + "endtime": "2024-12-18 12:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/84/2126427758045eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve arkadaşları, Kırmızı Başlıklı Kız ile ilgili bir okul temsilinde rol alır. Ama Midilli Pedro, sahneye çıkacağı için çok gergindir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 152. Bölüm" + }, + { + "id": "195334712", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-18 12:55:00 UTC+03:00", + "endtime": "2024-12-18 13:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/38/2126427768075eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Morton'un yol atıştırmalığı düşünce Şef ve Olly ona yolculuğu için en iyi atıştırmalığı yapmak üzerine yarışır. İlk aşçılık deneyimi için çok hevesli olan biri, Şef ve Olly'ye nachos yapımında yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195334718", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-18 13:15:00 UTC+03:00", + "endtime": "2024-12-18 13:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/84/2126427768105eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195334724", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-18 13:40:00 UTC+03:00", + "endtime": "2024-12-18 14:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/43/2126427768135eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapalar, altında doğdukları ağaca geri döner. Ağaç kötü durumda. Yakındaki hayvanları rahatsız etmeden onu kurtarmalı. Bugün Barbabebeklerin doğum günü. Hepsi Barbapapa'yla farklı bir şeyler yapmak istiyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195334730", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 14:00:00 UTC+03:00", + "endtime": "2024-12-18 14:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/10/2126427768165eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Üç devasa posta teslimatı olunca, hepsini teslim edebilecek tek bir canavar makine var: Posta Kamyonu Blaze! Denizleri yüzerek aşacak, dağlara tırmanacak ve Monster Dome'a girecek çünkü posta kamyonları her zaman teslimat yapar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 702. Bölüm" + }, + { + "id": "195334736", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 14:25:00 UTC+03:00", + "endtime": "2024-12-18 14:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/93/2126427768195eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükannenin doğum günü ama Crusher'ın hediye parası yok! Blaze ve AJ ona farklı işler yapmasında ve para kazanmasında yardım ediyor. Ancak, doğum günü partisine zamanında yetişebilmek için acele etmeleri gerek!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 703. Bölüm" + }, + { + "id": "195334742", + "name": "Paw Patrol", + "starttime": "2024-12-18 14:50:00 UTC+03:00", + "endtime": "2024-12-18 15:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/20/2126427768225eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bugün macera körfezi'nde yetenek şovu günü! Başkan Goodway heyecanlı ama yeterince gösteri olmayacağından endişeli! Ryder ve köpekçikler, Çiftçi Al'a mısırlı rostosunu ve mısır tarlası labirentini hazırlamasında yardım ediyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195334748", + "name": "Paw Patrol", + "starttime": "2024-12-18 15:10:00 UTC+03:00", + "endtime": "2024-12-18 15:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/63/2126427768255eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Diğer köpekçikler paraşüt eğitimindeyken, Marshall bir grup kedi yavrusunu tek başına toplamak zorunda. Ama diğer köpek sürüleriniden de destek görüyor! Ryder ve paw patrol, bir geyik ailesini kaygan buzların üstündem kurtarıyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195334754", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-18 15:35:00 UTC+03:00", + "endtime": "2024-12-18 15:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/52/2126427768285eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark'ın Midye Topu ekibi alışılmadık yöntemleri olan bir koç tutar. Baby Shark, Büyükanne Köpekbalığı ile yapacağı büyük dans partisinden önce büyük lokma yutar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195334760", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-18 15:55:00 UTC+03:00", + "endtime": "2024-12-18 16:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/4/2126427768315eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabebekler, anneye doğum günü için gösteri hazırlar. Sonra karnavala giderler ve Barbaartist bir alette mahsur kalır. Üç ayrı hikaye avlunun ortasında büyük bir hikayeye dönüşür.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195334766", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-18 16:15:00 UTC+03:00", + "endtime": "2024-12-18 16:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/66/2126427778345eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington martıların cipslere bayıldığını ve almak için her şeyi yapacaklarını anlar, ama öğle yemeğini sıcak teslim edebilir mi? Deniz feneri bozulur ve sisli gecede Paddington denizdeki tekneyi kurtarmaya yardım edebilir mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 309. Bölüm" + }, + { + "id": "195334772", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 16:40:00 UTC+03:00", + "endtime": "2024-12-18 17:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/11/2126427778375eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Skye, Rubble ve Ekibi'nin inşaat projelerinin hava desteğine ihtiyacı olduğunda Macera Koyu'ndan gelir. Ancak Hız Ustası işi bitirmek için köpüşleri geçmeye çalıştığında, Skye, Rubble ve ekibin geri kalanı günü kurtarmak için kurtarma moduna geçer!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195334778", + "name": "Kaşif Dora", + "starttime": "2024-12-18 17:00:00 UTC+03:00", + "endtime": "2024-12-18 17:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/64/2126427778405eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334784", + "name": "Kaşif Dora", + "starttime": "2024-12-18 17:10:00 UTC+03:00", + "endtime": "2024-12-18 17:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/35/2126427778435eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334790", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 17:25:00 UTC+03:00", + "endtime": "2024-12-18 17:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/74/2126427778465eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Crusher ve Pickle, fokurdayan bir balçık takasının üzerindeki bir kafesin içinde mahsur kaldığında, şövalye olmak Blaze, AJ ve Sparkle'a kalır. Çok geç olmadan Crusher ve Pickle'ı bataklıktan kurtarabilecekler mi?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 704. Bölüm" + }, + { + "id": "195334796", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-18 17:45:00 UTC+03:00", + "endtime": "2024-12-18 18:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/67/2126427778495eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Şef ve Olly soğan sosu yapıyor ama Şef soğan yüzünden ağlamadan duramıyor! Kraliçe Arı Kütük'ün çay partisine gelir, Şef kraliçelere layık bir parti düzenlemeye kararlıdır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195334802", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-18 18:10:00 UTC+03:00", + "endtime": "2024-12-18 18:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/96/2126427788525eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Bir grup tavşan sümüklüböceği başıboş dolaşmaya başlayınca Vola onları tek başına toplamaya koyulur. William, Chumby adında bir deniz domuzunu evlat edindiğinde, küçük bücür William'ın beklediğinden daha fazla sorun çıkarır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195334808", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 18:30:00 UTC+03:00", + "endtime": "2024-12-18 18:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/97/2126427788555eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 114. Bölüm" + }, + { + "id": "195334814", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 18:40:00 UTC+03:00", + "endtime": "2024-12-18 18:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/99/2126427788585eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195334820", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 18:45:00 UTC+03:00", + "endtime": "2024-12-18 18:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/22/2126427788615eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 116. Bölüm" + }, + { + "id": "195334826", + "name": "Camgöz (2020)", + "starttime": "2024-12-18 18:50:00 UTC+03:00", + "endtime": "2024-12-18 19:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/15/2126427788645eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 117. Bölüm" + }, + { + "id": "195334832", + "name": "Paw Patrol", + "starttime": "2024-12-18 19:00:00 UTC+03:00", + "endtime": "2024-12-18 19:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/33/2126427788675eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Humdinger'ın yansıtıcı panelini taşıyan drone bir ağaca çarpar, yansıtıcı bir ışık demetini ahşap bir köprü üzerinde yoğunlaştırarak yanmasına neden olur. Paw Patrol, dev bir egzersiz topunun içinde yuvarlanan Winnie ve bir kapibara'yı kurtarır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1020. Bölüm" + }, + { + "id": "195334838", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-18 19:20:00 UTC+03:00", + "endtime": "2024-12-18 19:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/98/2126427788705eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 415. Bölüm" + }, + { + "id": "195334844", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 19:30:00 UTC+03:00", + "endtime": "2024-12-18 20:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/40/2126427788735eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, Gravel Dede'nin özel fotoğrafı için bir kuaför salonu inşa ediyor, ta ki şampuanla ilgili bir aksilikle karşılaşana dek! Motor ve Lily yavruların şimdiye kadar gördükleri en havalı ışık gösterisiyle parlak bir keşif yaparlar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195334850", + "name": "Kaşif Dora", + "starttime": "2024-12-18 20:00:00 UTC+03:00", + "endtime": "2024-12-18 20:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/91/2126427788765eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334856", + "name": "Kaşif Dora", + "starttime": "2024-12-18 20:10:00 UTC+03:00", + "endtime": "2024-12-18 20:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/44/2126427798795eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334862", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-18 20:20:00 UTC+03:00", + "endtime": "2024-12-18 20:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/41/2126427798825eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "En popüler ailenin dünya ekranlarına göz kamaştırıcı dönüşü! BARBAPAPA. Büyük mutlu bir aile! Barbapapalar için rutin diye bir şey yoktur: her gün sürprizlerle dolu neşeli bir maceradır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195334868", + "name": "Hamster Diyarı", + "starttime": "2024-12-18 20:40:00 UTC+03:00", + "endtime": "2024-12-18 21:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/34/2126427798855eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Hamsterlar, Num-Nuggtets adasını bulmak için Harry'nin yanardağına girerler ve kendilerini bilim fuarında bulurlar. / Hamsterlar Kral Harry'nin sihirli bir şekilde patatese dönüştüğüne inanırlar ve onu normale döndürmeye yemin ederler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195334874", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 21:00:00 UTC+03:00", + "endtime": "2024-12-18 21:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/42/2126427798885eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları dünyanın en muhteşem canavar kamyonu Blaze ve onun en iyi dostu ve şoförü AJ adlı bir çocukla ilgili okul öncesi interaktif animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195334880", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-18 21:25:00 UTC+03:00", + "endtime": "2024-12-18 21:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/83/2126427798915eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Altın Madalya Oyunları başlıyor, Blaze de yarışmalara hazır! Ama Ezici hile yapıp rakibini uzaklara fırlatınca Blaze'in Aks şehrine dönüp madalyayı almak için acele etmesi gerekir!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 508. Bölüm" + }, + { + "id": "195334886", + "name": "Paw Patrol", + "starttime": "2024-12-18 21:45:00 UTC+03:00", + "endtime": "2024-12-18 22:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/98/2126427798945eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Turbotlar ormanda bir yerde mahsur kalır. Paw Patrol'ü aramaya çalışırlar ama telefonları çekmez. Chickaletta yumurtlar ama yumurta yuvarlanıp şehirde uzaklaşır. Paw Patrol'ün çatlamadan yumurtayı bulması gerek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 608. Bölüm" + }, + { + "id": "195334892", + "name": "Paw Patrol", + "starttime": "2024-12-18 22:10:00 UTC+03:00", + "endtime": "2024-12-18 22:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/71/2126427798975eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Çiftçi Al ve Çiftçi Yumi bir deniz ineğini bataklığa götürmek için PAW Patrol'dan yardım ister. Bay Porter ve Alex dara düşer. Boğazlarına kadar akçaağaç şurubuna batmışlar! Bay Porter'ı ve kahvaltıyı kurtarmak PAW Patrol'e düştü!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 610. Bölüm" + }, + { + "id": "195334898", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-18 22:30:00 UTC+03:00", + "endtime": "2024-12-18 22:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/69/2126427809005eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195334904", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 22:40:00 UTC+03:00", + "endtime": "2024-12-18 23:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/97/2126427809035eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, yağmurun kasabayı sular altında bırakma tehdidi sonrası İnşaatçı Koyu'nu kurtarmak için iş başında. Rubble ve Motor, Çiftlik Fuarı'ndan önce Çiftçi Zoe'nin sincap sorunu için kurnaz inşaat çözümleri buluyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 122. Bölüm" + }, + { + "id": "195334910", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-18 23:05:00 UTC+03:00", + "endtime": "2024-12-18 23:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/39/2126427809065eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Parıltılı Sierra'nın konser sahnesinin biraz daha ışıltıya ihtiyacı olduğunda, Rubble ve Ekibi bir inşaata başlar. Bakkal Gabriel bakkal dükkânının dışına özel bir şey inşa edilmesini isteyince Rubble ve Ekibi büyük oynamaya karar verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 123. Bölüm" + }, + { + "id": "195334916", + "name": "Kaşif Dora", + "starttime": "2024-12-18 23:30:00 UTC+03:00", + "endtime": "2024-12-18 23:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/5/2126427809095eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195334922", + "name": "Kaşif Dora", + "starttime": "2024-12-18 23:40:00 UTC+03:00", + "endtime": "2024-12-18 23:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/11/2126427809125eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195334928", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-18 23:50:00 UTC+03:00", + "endtime": "2024-12-19 00:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241212/52/2126427819155eb8f42a_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby ve arkadaşlarından bir müzik festivalinde sahne almaları istendiğinde, hangi tür şarkıyı çalacaklarına karar veremezler. Dedektif Baby Shark ve William Watson huysuz bir gizemi çözüyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 226. Bölüm" + } + ], + [ + { + "id": "195412868", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 00:10:00 UTC+03:00", + "endtime": "2024-12-19 00:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/47/2126361746755eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz gizemli bir soğuk algınlığına yakalandığında, Max onu babasının iyileştireceğini bilmektedir. Ancak muayeneyi akvaryumun robot doktoru üstlenince işler sarpa sarar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195412874", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 00:20:00 UTC+03:00", + "endtime": "2024-12-19 00:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/93/2126361746785eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Annesi haberler için Camgöz'ün vahşi tarafını araştırmakla görevlendirildiğinde, Max'in en iyi arkadaşında korkulacak bir şey olmadığını anlayacaktır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195412880", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 00:25:00 UTC+03:00", + "endtime": "2024-12-19 00:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/35/2126361746815eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz yanlışlıkla tahta gezinti yolunu tahrip edince, Max ve Köpek Balığı Sürüsü Camgöz'ün gerçekten harika bir evcil hayvan olduğunu herkese kanıtlamak zorunda kalırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195412886", + "name": "Peppa Pig", + "starttime": "2024-12-19 00:35:00 UTC+03:00", + "endtime": "2024-12-19 00:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/92/2126361746845eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George, baloncuklarla oynuyordur. Baloncuk karışımı bitince, Baba Domuz onlara eski bir tenis raketi ve sabunlu suyla nasıl büyük baloncuklar yapacaklarını gösterir. Sonra herkesin içine atlaması için dev gibi bir çamur baloncuğu yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195412892", + "name": "Peppa Pig", + "starttime": "2024-12-19 00:40:00 UTC+03:00", + "endtime": "2024-12-19 00:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/7/2126361756875eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Neredeyse yatma zamanı gelmiştir ve Peppa ve George'un banyo yapması gerekiyordur. Sonrasında dişlerini fırçalayıp yatağa giderler. Hızlıca uyurlar. Baba ve Anne Domuz, nihayet otururlar, uzun bir gün olmuştur ve onlar da yorulmuştur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195412898", + "name": "Peppa Pig", + "starttime": "2024-12-19 00:45:00 UTC+03:00", + "endtime": "2024-12-19 00:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/83/2126361756905eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükanne ve Büyükbaba Domuz, Peppa ve ailesini öğle yemeğine davet ederler. Yolda Peppa, George, Anne Domuz ve Baba Domuz, trafiğe sıkışırlar. Bu yüzden Büyükbaba Domuz, onlara yemek getirir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195414824", + "name": "Peppa Pig", + "starttime": "2024-12-19 00:50:00 UTC+03:00", + "endtime": "2024-12-19 00:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/6/2126361756935eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükanne ve Büyükbaba Domuz, Peppa ve George'u bol bol kaya olan bir plaja getirir. Küçük bir yengeç, bir deniz kabuğu ve bir fosil onları çok eğlendirir. Peppa kovasıyla küçük bir balığı kurtarır ve sonra onu denize geri gönderir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195414830", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-19 00:55:00 UTC+03:00", + "endtime": "2024-12-19 01:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/55/2126361756965eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Henry salyangoz yarışında! Yarış için hazırladığı meyve lokmalarının sertleşmesi uzun sürüyor! Ruby'nin harika bir opera sanatçısı olduğunu öğrenen Şef, Olly gürültülü bir şekilde konser sahnesi inşa ederken bir opera pastası yapmaya çalışıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195414836", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-19 01:15:00 UTC+03:00", + "endtime": "2024-12-19 01:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/59/2126361766995eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbazeki, Mars'tan bir melodi yakalar. Barbapapalar kızıl gezegene gitmek için bir roket yapar. Barbapapalar, Mars'a giderken bir Barbamarslı ailesiyle tanışır. Köye bitki saldırınca tanışacak zamanları kalmaz.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 102. Bölüm" + }, + { + "id": "195414842", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-19 01:40:00 UTC+03:00", + "endtime": "2024-12-19 02:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/29/2126361767025eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabekler kayıp bir bebek fil bulup ve ona gizlice bakar. Barbapapa ve Barbaanne, Boris'e nasıl tepki verecek acaba? Fil Boris evini özler. Barbapapa onu Afrika'ya geri getirmeye karar verir. Ve Boris'in iklime alışmasına yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 103. Bölüm" + }, + { + "id": "195414848", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 02:00:00 UTC+03:00", + "endtime": "2024-12-19 02:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/47/2126361767055eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze'in arkadaşlarının yardıma ihtiyacı olduğunda, Ambulans Blaze, Paramedik AJ ve Paramedik Gabby günü kurtarmak için ihtiyaç duydukları tüm araçlara sahip!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 705. Bölüm" + }, + { + "id": "195414854", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 02:25:00 UTC+03:00", + "endtime": "2024-12-19 02:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/15/2126361777085eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Crusher'ın bir araya gelmesiyle kafa kafaya bir kapışma... Kar Tanesi Oyunları! En çok kış sporunu kim kazanacak ve ödüllü Kar Tanesi Madalyasını kim alacak?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 706. Bölüm" + }, + { + "id": "195414860", + "name": "Paw Patrol", + "starttime": "2024-12-19 02:50:00 UTC+03:00", + "endtime": "2024-12-19 03:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/19/2126361777115eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paw patrol, dostları Carlos'un kayıp papağanı Mateo'yu bulmasına yardım için ormana gider! Ryder ve paw patrol, bir arı kovanını, daha güvenli bir eve kavuşmaları için çiftçi Al'ın çiftliğine taşımasına yaredım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195414866", + "name": "Paw Patrol", + "starttime": "2024-12-19 03:10:00 UTC+03:00", + "endtime": "2024-12-19 03:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/66/2126361777145eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Köpekçöilerin savana seyahati, bir fila ilesini kurtarma görevine dönüşüyor! Kusursuz kasaba ödülünü kazanmak için, paw patrol'un köpekçikleri macera körfezi'ni başkan Hamdinger'in kedicikler afet ekibi'nin elinden kurtarması şart!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 214. Bölüm" + }, + { + "id": "195414872", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-19 03:30:00 UTC+03:00", + "endtime": "2024-12-19 03:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/29/2126361777175eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Chucks Baby Shark ve arkadaşlarının Carnivore Koy'unun komşu kasabasına karşı yıllık Kartopu Yarışı'nı kazanmasına yardım etmeye çalışır. Baby Shark Anne Köpekbalığı için mükemmel hediyeyi bulma görevine gider.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195414878", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-19 03:55:00 UTC+03:00", + "endtime": "2024-12-19 04:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/11/2126361777205eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbaçalışkan, Barbalala ve Barbasüslü, sırayla kendi dokunuşlarını katarak aynı hikayeyi anlatır. Barbapapa ailesi sahilde bir gün geçiriyor. İki takıma bölünen Barbabebekler kumlu bir yarımada için savaşır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195414884", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-19 04:15:00 UTC+03:00", + "endtime": "2024-12-19 04:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/25/2126361787235eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington, Kaptan Yeşil Sakal'ın ganimeti için hazine avına çıkar, ama arkadaş kalıp paylaşabilecekler mi? Herkes kumdan kale yarışmasını kazanmak ve özel bir dondurma ödülünün tadını çıkarmak istiyor, ancak takım çalışması çok önemli!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 310. Bölüm" + }, + { + "id": "195414890", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 04:40:00 UTC+03:00", + "endtime": "2024-12-19 05:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/5/2126361787265eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Vali Greatway, Rubble ve Ekibi'nden Bay Ducky-Doo için özel bir şey ister. Ancak kısa süre sonra bir gizem ortaya çıkar... Rubble ve Ekibi, fırtınadan önce Çiftçi Zoe için bir yağmur tankı yapmaya çalışır, ta ki bir tavuk sorunu çıkana kadar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195414896", + "name": "Kaşif Dora", + "starttime": "2024-12-19 05:00:00 UTC+03:00", + "endtime": "2024-12-19 05:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/7/2126361787295eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195414902", + "name": "Kaşif Dora", + "starttime": "2024-12-19 05:10:00 UTC+03:00", + "endtime": "2024-12-19 05:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/56/2126361797325eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195414908", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 05:25:00 UTC+03:00", + "endtime": "2024-12-19 05:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/62/2126361797355eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "AJ, Axle City Uçuş Yarışması'na katılıyor. Ancak Crusher onu ve Blaze'i uzağa gönderdiğinde, AJ'in süper havalı uçan icadını inşa etmesi için zamanında geri dönmeleri gerekiyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 707. Bölüm" + }, + { + "id": "195414914", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-19 05:45:00 UTC+03:00", + "endtime": "2024-12-19 06:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/69/2126361797385eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Olly, Dinozor Kulübü için basit bir pasta yapmak ister ama Şef tarifi karmaşıklaştırıyor. Şef ve Olly mantı yapıyor, ancak ilk kez mantı yapan Olly daha iyi yapınca, Şef kendi becerilerine olan güvenini kaybeder gibi oluyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195414920", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-19 06:10:00 UTC+03:00", + "endtime": "2024-12-19 06:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/58/2126361797415eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark, ailesi ve arkadaşlarının tuzlu aptallıklarına dalın.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 215. Bölüm" + }, + { + "id": "195414926", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 06:30:00 UTC+03:00", + "endtime": "2024-12-19 06:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/84/2126361797445eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195414932", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 06:40:00 UTC+03:00", + "endtime": "2024-12-19 06:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/14/2126361807475eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195414938", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 06:45:00 UTC+03:00", + "endtime": "2024-12-19 06:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/89/2126361807505eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195414944", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 06:50:00 UTC+03:00", + "endtime": "2024-12-19 07:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/47/2126361807535eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195414950", + "name": "Paw Patrol", + "starttime": "2024-12-19 07:00:00 UTC+03:00", + "endtime": "2024-12-19 07:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/99/2126361807565eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Belediye Başkanı Humdinger, Kedi Sürüsü'nden spot ışıklarını çalmak için HumKediDingerMan olur. Doğaçlama bir Kalkan Balığı Turnuvası aşırı rekabete dönüştüğünde yavruların Büyükanne Tilly'yi kurtarması gerekir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1021. Bölüm" + }, + { + "id": "195414956", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-19 07:20:00 UTC+03:00", + "endtime": "2024-12-19 07:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/98/2126361817595eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 417. Bölüm" + }, + { + "id": "195414962", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 07:30:00 UTC+03:00", + "endtime": "2024-12-19 07:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/74/2126361817625eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Koç Karima, Moloztaş ve Tayfa'dan bir spor salonu inşa etmelerini ister. Ancak kiriş Lily için çok yüksek olunca, günü kurtarmak yavrulara düşer. Gezici bir gösteri İnşaatçı Koyu'na ulaşamayınca, Rubble ve Ekibi kendilerininkini inşa eder!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195414968", + "name": "Peppa Pig", + "starttime": "2024-12-19 07:55:00 UTC+03:00", + "endtime": "2024-12-19 08:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/23/2126361817655eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa, annesi, babası ve abisi George'la yaşayan küçük bir domuzdur. Peppa oyun oynamayı, şık giyinmeyi, uzun seyahatleri ve çamurda zıplamayı sever.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195414974", + "name": "Peppa Pig", + "starttime": "2024-12-19 08:00:00 UTC+03:00", + "endtime": "2024-12-19 08:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/64/2126361817685eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükanne ve Büyükbaba'nın hayvanı Papağan Polly, Peppa'nın evine kalmaya gelir. Peppa ve George, Polly'yi çok sever. Çok tatlıdır ve söylenenleri taklit eder. Polly uçup gidince, geri gelip gelmeyeceğini bilemezler. Ta ki George'un zeki planına dek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195414980", + "name": "Peppa Pig", + "starttime": "2024-12-19 08:05:00 UTC+03:00", + "endtime": "2024-12-19 08:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/0/2126361827715eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Soğuk ve rüzgârlı bir kış günüdür. Parktaki tüm yapraklar sarıya ve kırmızıya dönüşmüştür. O kadar rüzgârlıdır ki Peppa'nın topu gölete düşer, George'un şapkası da uçup ağaca takılır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195414986", + "name": "Peppa Pig", + "starttime": "2024-12-19 08:10:00 UTC+03:00", + "endtime": "2024-12-19 08:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/17/2126361827745eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Aile, TV'de Dedektif Patates'i izliyordur. Peppa ve George da dedektif olmak isterler. Baba Domuz onlara çözmeleri için bir gizem verir. Teddy saklanmıştır ve Pepa ve George, onu bulmak için büyüteçle kek kırıntılarını takip ederler.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195414992", + "name": "Anna ve Dostları", + "starttime": "2024-12-19 08:15:00 UTC+03:00", + "endtime": "2024-12-19 08:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/1/2126361827775eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anna ve dostları doğada harika bir piknik planlar ama Bubu'nun çantası çok ağırdır, Christopher çilekleri yemeden duramaz! Bir gök gürültüsü işleri daha da kötüleştirir. Neyse ki Anna'nın salonu harika bir kamp alanıdır!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 106. Bölüm" + }, + { + "id": "195414998", + "name": "Anna ve Dostları", + "starttime": "2024-12-19 08:20:00 UTC+03:00", + "endtime": "2024-12-19 08:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/7/2126361827805eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Anna ve Froga uçurtmayla oynarken uçurtma ağaca takılır. Anna ve Froga yardım için Ron'a koşar, ancak üç arkadaş elma ağacına vardıklarında uçurtma ve elmalar kaybolmuştur!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195415004", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-19 08:30:00 UTC+03:00", + "endtime": "2024-12-19 08:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/54/2126361837835eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Stump'a bilinmeyen bir meyve teslim edildiğinde, Dedektif Şef ve Olly pişirmeden önce bunun ne olduğunun gizemini çözmek zorundadır. Çetenin hapşırıkları tuttuğunda, matzo topu çorbasını tam bir tarif olmadan bitirmek Olly'ye kalır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 203. Bölüm" + }, + { + "id": "195415010", + "name": "Minik Şef", + "starttime": "2024-12-19 08:50:00 UTC+03:00", + "endtime": "2024-12-19 09:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/29/2126361837865eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Minik Şef evinde küçük yemek şovu verir ve en iyi arkadaşları Olly, Ruby ve Henry ile lezzetli yemekler ve harika maceralar hazırlar. Minik Şef, buluşlarını arkadaşlarıyla paylaşmaktan keyif alır ve yaptığı her yemeğe sevgisini katar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 101. Bölüm" + }, + { + "id": "195415016", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 09:00:00 UTC+03:00", + "endtime": "2024-12-19 09:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/85/2126361837895eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Yol Canavarları dünyanın en muhteşem canavar kamyonu Blaze ve onun en iyi dostu ve şoförü AJ adlı bir çocukla ilgili okul öncesi interaktif animasyon dizisidir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195415022", + "name": "Hamster Diyarı", + "starttime": "2024-12-19 09:25:00 UTC+03:00", + "endtime": "2024-12-19 09:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/0/2126361837925eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Mondo ve Lil Pal ıssız bir adada mahsur kalır ve diğer hamsterlar onları kurtarır. Popcorn'un patlamış mısıra olan kontrol edilemez sevgisi tüm hamsterları tehlikeye atmakla tehdit eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 112. Bölüm" + }, + { + "id": "195415028", + "name": "Paw Patrol", + "starttime": "2024-12-19 09:45:00 UTC+03:00", + "endtime": "2024-12-19 10:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/44/2126361847955eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Turbotlar ormanda bir yerde mahsur kalır. Paw Patrol'ü aramaya çalışırlar ama telefonları çekmez. Chickaletta yumurtlar ama yumurta yuvarlanıp şehirde uzaklaşır. Paw Patrol'ün çatlamadan yumurtayı bulması gerek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 608. Bölüm" + }, + { + "id": "195415034", + "name": "Paw Patrol", + "starttime": "2024-12-19 10:10:00 UTC+03:00", + "endtime": "2024-12-19 10:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/5/2126361847985eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Çiftçi Al ve Çiftçi Yumi bir deniz ineğini bataklığa götürmek için PAW Patrol'dan yardım ister. Bay Porter ve Alex dara düşer. Boğazlarına kadar akçaağaç şurubuna batmışlar! Bay Porter'ı ve kahvaltıyı kurtarmak PAW Patrol'e düştü!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 610. Bölüm" + }, + { + "id": "195415040", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-19 10:30:00 UTC+03:00", + "endtime": "2024-12-19 10:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/14/2126361848015eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195415046", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 10:40:00 UTC+03:00", + "endtime": "2024-12-19 11:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/99/2126361848045eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Rubble ve Ekibi, yağmurun kasabayı sular altında bırakma tehdidi sonrası İnşaatçı Koyu'nu kurtarmak için iş başında. Rubble ve Motor, Çiftlik Fuarı'ndan önce Çiftçi Zoe'nin sincap sorunu için kurnaz inşaat çözümleri buluyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 122. Bölüm" + }, + { + "id": "195415052", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 11:05:00 UTC+03:00", + "endtime": "2024-12-19 11:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/65/2126361848075eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Parıltılı Sierra'nın konser sahnesinin biraz daha ışıltıya ihtiyacı olduğunda, Rubble ve Ekibi bir inşaata başlar. Bakkal Gabriel bakkal dükkânının dışına özel bir şey inşa edilmesini isteyince Rubble ve Ekibi büyük oynamaya karar verir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 123. Bölüm" + }, + { + "id": "195415058", + "name": "Kaşif Dora", + "starttime": "2024-12-19 11:30:00 UTC+03:00", + "endtime": "2024-12-19 11:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/73/2126361858105eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195415064", + "name": "Kaşif Dora", + "starttime": "2024-12-19 11:40:00 UTC+03:00", + "endtime": "2024-12-19 11:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/84/2126361858135eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195415070", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-19 11:50:00 UTC+03:00", + "endtime": "2024-12-19 12:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/10/2126361858165eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby ve arkadaşlarından bir müzik festivalinde sahne almaları istendiğinde, hangi tür şarkıyı çalacaklarına karar veremezler. Dedektif Baby Shark ve William Watson huysuz bir gizemi çözüyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 226. Bölüm" + }, + { + "id": "195415076", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 12:15:00 UTC+03:00", + "endtime": "2024-12-19 12:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/31/2126361858195eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz gizemli bir soğuk algınlığına yakalandığında, Max onu babasının iyileştireceğini bilmektedir. Ancak muayeneyi akvaryumun robot doktoru üstlenince işler sarpa sarar!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 208. Bölüm" + }, + { + "id": "195415082", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 12:20:00 UTC+03:00", + "endtime": "2024-12-19 12:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/40/2126361858225eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Annesi haberler için Camgöz'ün vahşi tarafını araştırmakla görevlendirildiğinde, Max'in en iyi arkadaşında korkulacak bir şey olmadığını anlayacaktır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195415088", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 12:25:00 UTC+03:00", + "endtime": "2024-12-19 12:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/32/2126361868255eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Camgöz yanlışlıkla tahta gezinti yolunu tahrip edince, Max ve Köpek Balığı Sürüsü Camgöz'ün gerçekten harika bir evcil hayvan olduğunu herkese kanıtlamak zorunda kalırlar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 210. Bölüm" + }, + { + "id": "195415094", + "name": "Peppa Pig", + "starttime": "2024-12-19 12:35:00 UTC+03:00", + "endtime": "2024-12-19 12:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/38/2126361868285eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Peppa ve George, baloncuklarla oynuyordur. Baloncuk karışımı bitince, Baba Domuz onlara eski bir tenis raketi ve sabunlu suyla nasıl büyük baloncuklar yapacaklarını gösterir. Sonra herkesin içine atlaması için dev gibi bir çamur baloncuğu yapar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 204. Bölüm" + }, + { + "id": "195415100", + "name": "Peppa Pig", + "starttime": "2024-12-19 12:40:00 UTC+03:00", + "endtime": "2024-12-19 12:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/73/2126361868315eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Neredeyse yatma zamanı gelmiştir ve Peppa ve George'un banyo yapması gerekiyordur. Sonrasında dişlerini fırçalayıp yatağa giderler. Hızlıca uyurlar. Baba ve Anne Domuz, nihayet otururlar, uzun bir gün olmuştur ve onlar da yorulmuştur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 205. Bölüm" + }, + { + "id": "195415106", + "name": "Peppa Pig", + "starttime": "2024-12-19 12:45:00 UTC+03:00", + "endtime": "2024-12-19 12:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/10/2126361868345eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükanne ve Büyükbaba Domuz, Peppa ve ailesini öğle yemeğine davet ederler. Yolda Peppa, George, Anne Domuz ve Baba Domuz, trafiğe sıkışırlar. Bu yüzden Büyükbaba Domuz, onlara yemek getirir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195415112", + "name": "Peppa Pig", + "starttime": "2024-12-19 12:50:00 UTC+03:00", + "endtime": "2024-12-19 12:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/61/2126361878375eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Büyükanne ve Büyükbaba Domuz, Peppa ve George'u bol bol kaya olan bir plaja getirir. Küçük bir yengeç, bir deniz kabuğu ve bir fosil onları çok eğlendirir. Peppa kovasıyla küçük bir balığı kurtarır ve sonra onu denize geri gönderir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 207. Bölüm" + }, + { + "id": "195415118", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-19 12:55:00 UTC+03:00", + "endtime": "2024-12-19 13:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/78/2126361878405eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Henry salyangoz yarışında! Yarış için hazırladığı meyve lokmalarının sertleşmesi uzun sürüyor! Ruby'nin harika bir opera sanatçısı olduğunu öğrenen Şef, Olly gürültülü bir şekilde konser sahnesi inşa ederken bir opera pastası yapmaya çalışıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195415124", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-19 13:15:00 UTC+03:00", + "endtime": "2024-12-19 13:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/89/2126361878435eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbazeki, Mars'tan bir melodi yakalar. Barbapapalar kızıl gezegene gitmek için bir roket yapar. Barbapapalar, Mars'a giderken bir Barbamarslı ailesiyle tanışır. Köye bitki saldırınca tanışacak zamanları kalmaz.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 102. Bölüm" + }, + { + "id": "195415130", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-19 13:40:00 UTC+03:00", + "endtime": "2024-12-19 14:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/47/2126361878465eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbabekler kayıp bir bebek fil bulup ve ona gizlice bakar. Barbapapa ve Barbaanne, Boris'e nasıl tepki verecek acaba? Fil Boris evini özler. Barbapapa onu Afrika'ya geri getirmeye karar verir. Ve Boris'in iklime alışmasına yardım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 103. Bölüm" + }, + { + "id": "195415136", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 14:00:00 UTC+03:00", + "endtime": "2024-12-19 14:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/59/2126361878495eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze'in arkadaşlarının yardıma ihtiyacı olduğunda, Ambulans Blaze, Paramedik AJ ve Paramedik Gabby günü kurtarmak için ihtiyaç duydukları tüm araçlara sahip!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 705. Bölüm" + }, + { + "id": "195415142", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 14:25:00 UTC+03:00", + "endtime": "2024-12-19 14:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/93/2126361888525eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve Crusher'ın bir araya gelmesiyle kafa kafaya bir kapışma... Kar Tanesi Oyunları! En çok kış sporunu kim kazanacak ve ödüllü Kar Tanesi Madalyasını kim alacak?", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 706. Bölüm" + }, + { + "id": "195415148", + "name": "Paw Patrol", + "starttime": "2024-12-19 14:50:00 UTC+03:00", + "endtime": "2024-12-19 15:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/8/2126361888555eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paw patrol, dostları Carlos'un kayıp papağanı Mateo'yu bulmasına yardım için ormana gider! Ryder ve paw patrol, bir arı kovanını, daha güvenli bir eve kavuşmaları için çiftçi Al'ın çiftliğine taşımasına yaredım eder.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195415154", + "name": "Paw Patrol", + "starttime": "2024-12-19 15:10:00 UTC+03:00", + "endtime": "2024-12-19 15:35:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/28/2126361888585eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Köpekçöilerin savana seyahati, bir fila ilesini kurtarma görevine dönüşüyor! Kusursuz kasaba ödülünü kazanmak için, paw patrol'un köpekçikleri macera körfezi'ni başkan Hamdinger'in kedicikler afet ekibi'nin elinden kurtarması şart!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 214. Bölüm" + }, + { + "id": "195415160", + "name": "Baby Shark's Big Show", + "starttime": "2024-12-19 15:35:00 UTC+03:00", + "endtime": "2024-12-19 15:55:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/74/2126361888615eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Chucks Baby Shark ve arkadaşlarının Carnivore Koy'unun komşu kasabasına karşı yıllık Kartopu Yarışı'nı kazanmasına yardım etmeye çalışır. Baby Shark Anne Köpekbalığı için mükemmel hediyeyi bulma görevine gider.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 115. Bölüm" + }, + { + "id": "195415166", + "name": "BARBAPAPA Ailesi", + "starttime": "2024-12-19 15:55:00 UTC+03:00", + "endtime": "2024-12-19 16:15:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/54/2126361888645eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbaçalışkan, Barbalala ve Barbasüslü, sırayla kendi dokunuşlarını katarak aynı hikayeyi anlatır. Barbapapa ailesi sahilde bir gün geçiriyor. İki takıma bölünen Barbabebekler kumlu bir yarımada için savaşır.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195415172", + "name": "Ayı Paddington'un Maceraları", + "starttime": "2024-12-19 16:15:00 UTC+03:00", + "endtime": "2024-12-19 16:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/26/2126361898675eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Paddington, Kaptan Yeşil Sakal'ın ganimeti için hazine avına çıkar, ama arkadaş kalıp paylaşabilecekler mi? Herkes kumdan kale yarışmasını kazanmak ve özel bir dondurma ödülünün tadını çıkarmak istiyor, ancak takım çalışması çok önemli!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "3. Sezon - 310. Bölüm" + }, + { + "id": "195415178", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 16:40:00 UTC+03:00", + "endtime": "2024-12-19 17:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/30/2126361898705eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Vali Greatway, Rubble ve Ekibi'nden Bay Ducky-Doo için özel bir şey ister. Ancak kısa süre sonra bir gizem ortaya çıkar... Rubble ve Ekibi, fırtınadan önce Çiftçi Zoe için bir yağmur tankı yapmaya çalışır, ta ki bir tavuk sorunu çıkana kadar.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 211. Bölüm" + }, + { + "id": "195415184", + "name": "Kaşif Dora", + "starttime": "2024-12-19 17:00:00 UTC+03:00", + "endtime": "2024-12-19 17:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/93/2126361898735eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195415190", + "name": "Kaşif Dora", + "starttime": "2024-12-19 17:10:00 UTC+03:00", + "endtime": "2024-12-19 17:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/92/2126361898765eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195415196", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 17:25:00 UTC+03:00", + "endtime": "2024-12-19 17:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/79/2126361898795eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "AJ, Axle City Uçuş Yarışması'na katılıyor. Ancak Crusher onu ve Blaze'i uzağa gönderdiğinde, AJ'in süper havalı uçan icadını inşa etmesi için zamanında geri dönmeleri gerekiyor!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "7. Sezon - 707. Bölüm" + }, + { + "id": "195415202", + "name": "Minik Şef'in Yemek Programı", + "starttime": "2024-12-19 17:45:00 UTC+03:00", + "endtime": "2024-12-19 18:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/1/2126361898825eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Olly, Dinozor Kulübü için basit bir pasta yapmak ister ama Şef tarifi karmaşıklaştırıyor. Şef ve Olly mantı yapıyor, ancak ilk kez mantı yapan Olly daha iyi yapınca, Şef kendi becerilerine olan güvenini kaybeder gibi oluyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 209. Bölüm" + }, + { + "id": "195415208", + "name": "Baby Shark's Big Show!", + "starttime": "2024-12-19 18:10:00 UTC+03:00", + "endtime": "2024-12-19 18:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/11/2126361908855eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Baby Shark, ailesi ve arkadaşlarının tuzlu aptallıklarına dalın.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 215. Bölüm" + }, + { + "id": "195415214", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 18:30:00 UTC+03:00", + "endtime": "2024-12-19 18:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/56/2126361908885eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 118. Bölüm" + }, + { + "id": "195415220", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 18:40:00 UTC+03:00", + "endtime": "2024-12-19 18:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/97/2126361908915eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 119. Bölüm" + }, + { + "id": "195415226", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 18:45:00 UTC+03:00", + "endtime": "2024-12-19 18:50:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/35/2126361908945eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 120. Bölüm" + }, + { + "id": "195415232", + "name": "Camgöz (2020)", + "starttime": "2024-12-19 18:50:00 UTC+03:00", + "endtime": "2024-12-19 19:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/9/2126361918975eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Max'in yarı köpekbalığı yarı köpek olan Camgöz adlı sıra dışı bir evcil hayvanı vardır. Max önce Camgöz'ü sır olarak saklamaya çalışsa da Foggy Springs'teki dostları, meraklı komşuları ve ailesi onun yeni, yaramaz dostunu er ya da geç fark edecektir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 201. Bölüm" + }, + { + "id": "195415238", + "name": "Paw Patrol", + "starttime": "2024-12-19 19:00:00 UTC+03:00", + "endtime": "2024-12-19 19:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/71/2126361919005eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Belediye Başkanı Humdinger, Kedi Sürüsü'nden spot ışıklarını çalmak için HumKediDingerMan olur. Doğaçlama bir Kalkan Balığı Turnuvası aşırı rekabete dönüştüğünde yavruların Büyükanne Tilly'yi kurtarması gerekir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "10. Sezon - 1021. Bölüm" + }, + { + "id": "195415244", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-19 19:20:00 UTC+03:00", + "endtime": "2024-12-19 19:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/67/2126361919035eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "4. Sezon - 417. Bölüm" + }, + { + "id": "195415250", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 19:30:00 UTC+03:00", + "endtime": "2024-12-19 20:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/4/2126361919065eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Koç Karima, Moloztaş ve Tayfa'dan bir spor salonu inşa etmelerini ister. Ancak kiriş Lily için çok yüksek olunca, günü kurtarmak yavrulara düşer. Gezici bir gösteri İnşaatçı Koyu'na ulaşamayınca, Rubble ve Ekibi kendilerininkini inşa eder!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 206. Bölüm" + }, + { + "id": "195415256", + "name": "Kaşif Dora", + "starttime": "2024-12-19 20:00:00 UTC+03:00", + "endtime": "2024-12-19 20:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/53/2126361929095eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195415262", + "name": "Kaşif Dora", + "starttime": "2024-12-19 20:10:00 UTC+03:00", + "endtime": "2024-12-19 20:20:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/52/2126361929125eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 212. Bölüm" + }, + { + "id": "195415268", + "name": "Barbapapa Ailesi", + "starttime": "2024-12-19 20:20:00 UTC+03:00", + "endtime": "2024-12-19 20:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/26/2126361929155eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Barbapapa gururla ailesine prenses olmak istediğini açıklar. Barbasüslü can sıkıntısından mutsuzdur, kardeşlerinin hepsi meşguldür ve kimse onunla oynamak istemez.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 202. Bölüm" + }, + { + "id": "195415274", + "name": "Hamster Diyarı", + "starttime": "2024-12-19 20:40:00 UTC+03:00", + "endtime": "2024-12-19 21:00:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/21/2126361929185eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Greg, arkadaşlarına korkutucu bir numara yapmak zorunda kalmamak için yaralı numarası yapar. Bir saklambaç oyunu sırasında Lil Pal o kadar iyi saklanır ki bulunamaz.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 108. Bölüm" + }, + { + "id": "195415280", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 21:00:00 UTC+03:00", + "endtime": "2024-12-19 21:25:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/23/2126361939215eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Zeg, Blaze ve AJ'le bir şeyler ezerken küçücük bir dinozor yumurtası bulur. Şimdi bu üç arkadaşın yumurtayı Kamyondaktil annesine ulaştırmak için tarih öncesi bir diyara doğru yolculuğa çıkması gerekecek.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 113. Bölüm" + }, + { + "id": "195415286", + "name": "Blaze ve Yol Canavarları", + "starttime": "2024-12-19 21:25:00 UTC+03:00", + "endtime": "2024-12-19 21:45:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/2/2126361939245eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Blaze ve AJ dünya dışı bir yarış için uzaya çıkar! Zafer Gezegeni'ne giden yolda dost canlısı uzaylılarla tanışır, meteorlardan kaçar ve Ezici'nin uzay gemisiyle mücadele ederler!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "5. Sezon - 509. Bölüm" + }, + { + "id": "195415292", + "name": "Paw Patrol", + "starttime": "2024-12-19 21:45:00 UTC+03:00", + "endtime": "2024-12-19 22:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/56/2126361939275eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Korsan Alex, Julia, Julius ve Chick-ARR-letta çöle yelken açar ve kaybolur! Bu kara korsanlarını kurtarmak da PAW Patrol'e düşer. Kaptan Turbot ve Francois, bir kuş izleme yarışması yüzünden havada kalınca yardım ister.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 611. Bölüm" + }, + { + "id": "195415298", + "name": "Paw Patrol", + "starttime": "2024-12-19 22:10:00 UTC+03:00", + "endtime": "2024-12-19 22:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/64/2126361939305eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Chase ve Chickaletta beden değiştirir ve Kaptan Turbot'un teknesini limana getirmek için birlikte çalışmayı öğrenmek zorunda kalırlar. Vali Humdinger En Harika Sporcu yarışmasında hile yapmak için robot pantolon üretir.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "6. Sezon - 613. Bölüm" + }, + { + "id": "195415304", + "name": "Köpecik Pit Ekibi", + "starttime": "2024-12-19 22:30:00 UTC+03:00", + "endtime": "2024-12-19 22:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/23/2126361949335eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "PAW Patrol okul öncesi programı ve altı tane köpekçik baş rolü paylaşıyor: Chase, Marshall, Rocky, Zuma, Rubble ve Skye, başlarında da teknoloji meraklısı 10 yaşında bir çocuk olan Ryder var.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 107. Bölüm" + }, + { + "id": "195415310", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 22:40:00 UTC+03:00", + "endtime": "2024-12-19 23:05:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/19/2126361949365eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Café Carl'ın dondurma makinesi İnşaatçı Koyu'na çok sayıda araba getirince Ekip park sorununa yardımcı olur. Rubble'ın korkusu yavru köpeğin Bark Yard kampını raydan çıkarınca, Ekip ona yardımcı olacak bir fikir bulur.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 125. Bölüm" + }, + { + "id": "195415316", + "name": "Rubble ve Ekibi", + "starttime": "2024-12-19 23:05:00 UTC+03:00", + "endtime": "2024-12-19 23:30:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/12/2126361949395eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "Park Korucusu Rose'un en sevdiği ağaç, Rubble ve Büyükbaba bir çözüm bulamazsa yasaklanabilir. Ekip, Çiftçi Zoe'nin tavukları için bir yemlik inşa ediyor, ancak tavuklar serbest kaldıklarında onları kurtarmak yavrulara kalıyor.", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "1. Sezon - 126. Bölüm" + }, + { + "id": "195415322", + "name": "Kaşif Dora", + "starttime": "2024-12-19 23:30:00 UTC+03:00", + "endtime": "2024-12-19 23:40:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/33/2126361949425eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + }, + { + "id": "195415328", + "name": "Kaşif Dora", + "starttime": "2024-12-19 23:40:00 UTC+03:00", + "endtime": "2024-12-20 00:10:00 UTC+03:00", + "genres": "Çocuk", + "advisory": [], + "ratingid": "0", + "picture": "https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241213/49/2126361949455eb9542c_0_XL.jpg", + "isnpvr": "1", + "introduce": "DORA büyülü yağmur ormanlarında daha fazla fantastik macera için geri döndü! Dünyanın en olağanüstü küçük kaşifi ve en iyi arkadaşı Boots'a yeni eğlence ve yeni arkadaşlar keşfederken katılın; sınır gökyüzü! Haydi!", + "programType": "episode", + "channelid": "4353", + "broadcastType": "Banttan", + "seasonInfo": "2. Sezon - 213. Bölüm" + } + ] + ] + } +} \ No newline at end of file diff --git a/sites/tvplus.com.tr/tvplus.com.tr.channels.xml b/sites/tvplus.com.tr/tvplus.com.tr.channels.xml index 8f1859d8..fa270dc2 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.channels.xml +++ b/sites/tvplus.com.tr/tvplus.com.tr.channels.xml @@ -1,145 +1,147 @@ - DEUTSCHE WELLE - AL JAZEERA ARABIC - AL JAZEERA ENGLISH - BABYTV - DEUTSCHE WELLE ENGLISH - EDGE SPORT - EURONEWS - FRANCE 24 ENGLISH - SKY NEWS ARABIA - TRT ARABI - TRT World - FRANCE 24 ARABIC - TV5 MONDE - A NEWS - DISNEY JUNIOR - ŞÖMİNE PLUS - TV 4 - FLASH TV - TARIH TV - MOONBUG KIDS TV - CARTOONITO - UVI JEWELLERY - SÖZCÜ TV - BluTV Play 1 - TV 2020 - BluTV Play 2 - TRT DIYANET COCUK - EXXEN TV - TURKHABER - 24 - 360 - A2 - KIBRIS ADA TV - A HABER - AKİT TV - A PARA - A SPOR - ATV - BENGÜTÜRK - BEYAZ TV - BİZİM EV TV - BLOOMBERG HT - BRT 1 - BRT 2 - CARTOON NETWORK - CEM TV - ÇİFTÇİ TV - CNN TÜRK - DA VINCI - DISCOVERY CHANNEL - DİYANET TV - DMAX - DREAM TÜRK - DUCK TV - TRT EBATV İLKOKUL - TRT EBATV LİSE - TRT EBATV ORTAOKUL - EKOTÜRK - ENGLISH CLUB TV - EPIC DRAMA - EUROSPORT 1 - EUROSPORT 2 - FB TV - FM TV - FOX - FX - HABER GLOBAL - HABERTÜRK - HALK TV - KADIRGA TV - KANAL 7 - KANAL 23 - KANAL 26 - KANAL 33 - KANAL D - KANAL V - KIBRIS GENC TV - KANAL T - KIBRIS TV - KONTV - KRT TV - LOVE NATURE - MELTEM TV - MİNİKA ÇOCUK - MİNİKA GO - NATIONAL GEOGRAPHIC - NATIONAL GEOGRAPHIC WILD - NBA TV - NICKTOONS - NTV - NR1 AŞK - NR1 DAMAR - NUMBER1 TURK - NUMBER1 TV - ON6 - POWER TURK - POWER TV - SEMERKAND - SHOW TV - SİNEMA TV 2 - SİNEMA TV 1001 - SİNEMA 1002 - SİNEMA AİLE 2 - SİNEMA AİLE - SİNEMA AKSİYON 2 - SİNEMA TV AKSİYON - SİNEMA KOMEDİ - SİNEMA TV - SİNEMA YERLİ 2 - SİNEMA YERLİ - SPORTS TV - S SPORT 2 - S SPORT - STAR TV - TARIM TV - TELE1 - TEVE2 - TGRT HABER - TJK TV - TLC - TMB TV - TRT1 - TRT 2 - TRT 3 - TRT AVAZ - TRT BELGESEL - TRT ÇOCUK - TRT HABER - TRT KURDİ - TRT MÜZİK - TRT SPOR - TRT SPOR YILDIZ - TRT TÜRK - TV8 - TV8,5 - TV100 - TVNET - ÜLKE TV - ULUSAL KANAL - VAV TV - VIASAT EXPLORE - VIASAT HISTORY - \ No newline at end of file + BluTV Play 1 + BluTV Play 2 + EKOL TV + GZT TV + KIBRIS ADA TV + tabii spor + tabii TV + TRT EBA + TV 2020 + TV+ Ekstra UFC + 24 + 360 + A2 + A HABER + AKİT TV + AL JAZEERA ARABIC + AL JAZEERA ENGLISH + A NEWS + A PARA + A SPOR + ATV + BABYTV + BBC News + BENGÜTÜRK + BEYAZ TV + BİZİM EV TV + BLOOMBERG HT + Bloomberg + BRT 1 + BRT 2 + CARTOONITO + CARTOON NETWORK + ÇİFTÇİ TV + CNBC-E + CNN International + CNN TÜRK + DA VINCI + DISCOVERY CHANNEL + DISNEY JUNIOR + DİYANET TV + DMAX + DREAM TÜRK + DUCK TV + DEUTSCHE WELLE ENGLISH + EKOTÜRK + ENGLISH CLUB TV + EPIC DRAMA + EURONEWS + EUROSPORT 1 + EUROSPORT 2 + FB TV + FLASH TV + FM TV + FRANCE 24 ARABIC + FRANCE 24 ENGLISH + FX + HABER GLOBAL + HABERTÜRK + HALK TV + HT SPOR + KADIRGA TV + KANAL 7 + KANAL 23 + KANAL 26 + KANAL 33 + KANAL D + KANAL V + KIBRIS GENC TV + KANAL T + KIBRIS TV + KONTV + KRT TV + LOVE NATURE + MELTEM TV + MİNİKA ÇOCUK + MİNİKA GO + MOONBUG KIDS TV + NATIONAL GEOGRAPHIC + NATIONAL GEOGRAPHIC WILD + NBA TV + Nick JR + NICKTOONS + NOW + NTV + NR1 DAMAR + NUMBER1 TURK + NUMBER1 TV + ON6 + POWER TURK + POWER TV + SEMERKAND + SHOW TV + SİNEMA TV 2 + SİNEMA TV 1001 + SİNEMA 1002 + SİNEMA AİLE 2 + SİNEMA AİLE + SİNEMA AKSİYON 2 + SİNEMA TV AKSİYON + SİNEMA KOMEDİ + SİNEMA TV + SİNEMA YERLİ 2 + SİNEMA YERLİ + SKY NEWS ARABIA + SÖZCÜ TV + SPORTS TV + S SPORT 2 + S SPORT + STAR TV + TARIH TV + TARIM TV + TELE1 + TEVE2 + TGRT HABER + TLC + TMB TV + TRT1 + TRT 2 + TRT 3 + TRT ARABI + TRT AVAZ + TRT BELGESEL + TRT ÇOCUK + TRT DIYANET COCUK + TRT HABER + TRT KURDİ + TRT MÜZİK + TRT SPOR + TRT SPOR YILDIZ + TRT TÜRK + TRT World + TURKHABER + TV 4 + TV5 + TV5 MONDE + TV8 + TV8,5 + TV100 + TVNET + ÜLKE TV + ULUSAL KANAL + VAV TV + VIASAT EXPLORE + VIASAT HISTORY + diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js index cae79755..812bab00 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.config.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -9,90 +8,77 @@ dayjs.extend(customParseFormat) module.exports = { site: 'tvplus.com.tr', days: 2, - url: 'https://izmottvsc23.tvplus.com.tr:33207/EPG/JSON/PlayBillList', request: { - method: 'POST', - async headers() { - const response = await axios - .post('https://izmottvsc23.tvplus.com.tr:33207/EPG/JSON/Authenticate', { - terminaltype: 'WEBTV_WIDEVINE', - userType: '3', - timezone: 'UTC' - }) - .catch(console.log) - const cookie = Array.isArray(response.headers['set-cookie']) - ? response.headers['set-cookie'].join('; ') - : '' - - return { cookie } - }, - data({ date, channel }) { - return { - type: '2', - channelid: channel.site_id, - begintime: date.format('YYYYMMDDHHmmss'), - endtime: date.add(1, 'd').format('YYYYMMDDHHmmss') - } + cache: { + ttl: 24 * 60 * 60 * 1000 // 1 day } }, - parser: function ({ content }) { - let programs = [] - const items = parseItems(content) - items.forEach(item => { - const start = parseStart(item) - const stop = parseStop(item) - programs.push({ - title: item.name, - category: item.genres, - description: item.introduce, - image: parseImage(item), - start: start.toJSON(), - stop: stop.toJSON() - }) - }) + url({ channel }) { + const [buildId, slug, nr] = channel.site_id.split('/') + const channelId = [slug, nr].join('--') + return `https://tvplus.com.tr/_next/data/${ + buildId + }/${ + channel.lang + }/canli-tv/yayin-akisi/${ + channelId + }.json?title=${ + channelId + }` + }, + parser({ content, date }) { + const programs = [] + if (content) { + const data = JSON.parse(content) + if (Array.isArray(data?.pageProps?.allPlaybillList)) { + data.pageProps.allPlaybillList + .filter(i => i.length && i[0].starttime.startsWith(date.format('YYYY-MM-DD'))) + .forEach(i => { + for (const schedule of i) { + const [, season, episode] = schedule.seasonInfo?.match(/(\d+)\. Sezon \- (\d+)\. Bölüm/) || [null, null, null] + programs.push({ + title: schedule.name, + description: schedule.introduce, + category: schedule.genres, + image: schedule.picture, + season: season ? parseInt(season) : null, + episode: episode ? parseInt(episode) : null, + start: dayjs.utc(schedule.starttime), + stop: dayjs.utc(schedule.endtime) + }) + } + }) + } + } return programs }, async channels() { const cheerio = require('cheerio') - + const axios = require('axios') const channels = [] const data = await axios .get(`https://tvplus.com.tr/canli-tv/yayin-akisi`) .then(r => r.data) - .catch(console.log) + .catch(console.error) const $ = cheerio.load(data) - $('.channelListItem').each((i, el) => { - const name = $(el).find('.channelName').text() - const url = $(el).find('.channelLink').attr('href') - const [, site_id] = url.match(/\-\-(\d+)$/) - - channels.push({ - lang: 'tr', - name, - site_id + const nextData = JSON.parse($('#__NEXT_DATA__').text()) + $('.channel-list-item a').toArray() + .forEach(el => { + const a = $(el) + channels.push({ + lang: 'tr', + name: a.attr('title').replace(/Yayın Akışı/, '').trim(), + site_id: [ + nextData.buildId, + ...a.attr('href') + .replace(/\/canli\-tv\/yayin\-akisi\//, '') + .split('--') + ].join('/') + }) }) - }) return channels } } - -function parseImage(item) { - return item.pictures && item.pictures.length ? item.pictures[0].href : null -} - -function parseStart(item) { - return dayjs.utc(item.starttime, 'YYYYMMDDHHmmss') -} - -function parseStop(item) { - return dayjs.utc(item.endtime, 'YYYYMMDDHHmmss') -} - -function parseItems(content) { - const data = JSON.parse(content) - - return data.playbilllist || [] -} diff --git a/sites/tvplus.com.tr/tvplus.com.tr.test.js b/sites/tvplus.com.tr/tvplus.com.tr.test.js index 1764a179..ec7f28dc 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.test.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.test.js @@ -1,54 +1,65 @@ -const { parser, url, request } = require('./tvplus.com.tr.config.js') +const { parser, url } = require('./tvplus.com.tr.config.js') +const fs = require('fs') +const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) -const date = dayjs.utc('2021-11-07', 'YYYY-MM-DD').startOf('d') +const date = dayjs.utc('2024-12-15', 'YYYY-MM-DD').startOf('d') const channel = { - site_id: '32', - xmltv_id: '24TV.tr' + lang: 'tr', + site_id: 'wOhzpck_jO2kKrDfRHmHs/nick-jr/4353', + xmltv_id: 'NickJr.tr' } -const content = - '{"counttotal":"23","playbilllist":[{"country":"","starttime":"20211107000000","type":"PROGRAM","isBlackout":"0","rerun":"0","ppvsubscribed":"0","foreignsn":"134383557","isLive":"0","ratingid":"0","episodeTotalCount":"0","id":"134383557","keyword":"24 Portre","contentType":"0","isnpvr":"1","slsType":"0","iscpvr":"0","advisory":[],"genreIds":["1179"],"istvod":"0","name":"24 Portre","tvodStatus":"0","pictures":[{"href":"https://izmottvsc23.tvplus.com.tr:33207/CPS/images/universal/film/program/202111/20211104/35/20211104000026695lh5.jpg","resolution":["null","null"],"imageType":"0"}],"externalContentCode":"105445035962202111070300","genres":"Yaşam","visittimes":"0","issubscribed":"0","programType":"program","gapFiller":"0","introduce":"Kendi alanında büyük başarılar elde etmiş insanların kendi ağzından hayat hikayeleri ekrana geliyor.","priceType":[{"value":"0","key":"BTV"},{"value":"0","key":"TVOD"}],"endtime":"20211107010000","seasonTotalCount":"0","recordedMediaIds":[],"picture":{},"isLoyalty":"0","isppv":"0","mainGenre":"0","contentRight":"[{\\"mediaId\\":\\"3000435\\",\\"businessType\\":\\"13\\",\\"enable\\":\\"0\\"},{\\"mediaId\\":\\"3000435\\",\\"businessType\\":\\"14\\",\\"enable\\":\\"0\\"},{\\"mediaId\\":\\"3000435\\",\\"businessType\\":\\"15\\",\\"enable\\":\\"1\\"},{\\"mediaId\\":\\"100067919\\",\\"businessType\\":\\"13\\",\\"enable\\":\\"0\\"},{\\"mediaId\\":\\"100067919\\",\\"businessType\\":\\"14\\",\\"enable\\":\\"0\\"},{\\"mediaId\\":\\"100067919\\",\\"businessType\\":\\"15\\",\\"enable\\":\\"1\\"}]","channelid":"32"}],"playbillVersion":[{"channelId":"32","date":"20211108","version":"20211106000043"},{"channelId":"32","date":"20211107","version":"20211105000027"}]}' it('can generate valid url', () => { - expect(url).toBe('https://izmottvsc23.tvplus.com.tr:33207/EPG/JSON/PlayBillList') -}) - -it('can generate valid request data', () => { - const result = request.data({ date, channel }) - expect(result).toMatchObject({ - type: '2', - channelid: '32', - begintime: '20211107000000', - endtime: '20211108000000' - }) + expect(url({ channel })).toBe('https://tvplus.com.tr/_next/data/wOhzpck_jO2kKrDfRHmHs/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353') }) it('can parse response', () => { - const result = parser({ date, channel, content }) - expect(result).toMatchObject([ - { - start: '2021-11-07T00:00:00.000Z', - stop: '2021-11-07T01:00:00.000Z', - title: '24 Portre', - category: 'Yaşam', - image: - 'https://izmottvsc23.tvplus.com.tr:33207/CPS/images/universal/film/program/202111/20211104/35/20211104000026695lh5.jpg', - description: - 'Kendi alanında büyük başarılar elde etmiş insanların kendi ağzından hayat hikayeleri ekrana geliyor.' - } - ]) + const content = fs.readFileSync(path.join(__dirname, '__data__', 'content.json')) + const results = parser({ date, channel, content }) + .map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(88) + expect(results[0]).toMatchObject({ + start: '2024-12-14T21:10:00.000Z', + stop: '2024-12-14T21:20:00.000Z', + title: 'Camgöz (2020)', + description: + 'Max\'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz\'ü saklamaya çalışsa da Sisli Pınarlar\'da, en iyi arkadaşlar, meraklı komşular ve hatta Max\'in ailesi bile yaramaz yeni arkadaşını fark edecektir.', + image: + 'https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/21/2126356250845eb88428_0_XL.jpg', + category: 'Çocuk', + season: 1, + episode: 116 + }) + expect(results[10]).toMatchObject({ + start: '2024-12-14T23:00:00.000Z', + stop: '2024-12-14T23:25:00.000Z', + title: 'Blaze ve Yol Canavarları', + description: + 'Blaze ve Yol Canavarları, dünyanın en büyük canavar kamyonu Blaze ve en iyi arkadaşı ve sürücüsü AJ adında bir çocuk hakkındaki interaktif bir anaokulu animasyon dizisidir.', + image: + 'https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/94/2126356271145eb88428_0_XL.jpg', + category: 'Çocuk', + season: 6, + episode: 617 + }) }) it('can handle empty guide', () => { const result = parser({ date, channel, - content: - '{"counttotal":"0","playbilllist":[],"playbillVersion":[{"channelId":"10000","date":"20211108","version":"20211107163253"},{"channelId":"10000","date":"20211107","version":"20211107163253"}]}' + content: '' }) expect(result).toMatchObject([]) }) From 91f72c5bb2e11e04d6a31a1cb45495b0ee398ad6 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 15 Dec 2024 22:49:55 +0700 Subject: [PATCH 03/64] Update tvplus.com.tr guide. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: ```sh npm test -- tvplus.com.tr > test > run-script-os tvplus.com.tr > test:win32 > SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr PASS sites/tvplus.com.tr/tvplus.com.tr.test.js √ can generate valid url (4 ms) √ can parse response (15 ms) √ can handle empty guide Test Suites: 1 passed, 1 total Tests: 3 passed, 3 total Snapshots: 0 total Time: 3.648 s, estimated 4 s Ran all test suites matching /tvplus.com.tr/i. ``` Grab: ```sh npm run grab -- --site=tvplus.com.tr > grab > npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr starting... config: output: guide.xml maxConnections: 1 gzip: false site: tvplus.com.tr loading channels... found 10 channel(s) run #1: [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs) [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs) [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs) [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs) [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs) [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs) [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs) [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs) [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs) [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs) [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs) [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs) [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs) [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs) [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs) [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs) [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs) [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs) [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs) [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs) saving to "guide.xml"... done in 00h 02m 17s ``` Signed-off-by: Toha --- sites/tvplus.com.tr/__data__/build.html | 7 +++++++ sites/tvplus.com.tr/tvplus.com.tr.config.js | 21 ++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 sites/tvplus.com.tr/__data__/build.html diff --git a/sites/tvplus.com.tr/__data__/build.html b/sites/tvplus.com.tr/__data__/build.html new file mode 100644 index 00000000..4301b2ce --- /dev/null +++ b/sites/tvplus.com.tr/__data__/build.html @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js index 812bab00..12e039a9 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.config.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js @@ -1,10 +1,13 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') +const debug = require('debug')('site:tvplus.com.tr') dayjs.extend(utc) dayjs.extend(customParseFormat) +const channelsUrl = 'https://tvplus.com.tr/canli-tv/yayin-akisi' + module.exports = { site: 'tvplus.com.tr', days: 2, @@ -58,7 +61,7 @@ module.exports = { const axios = require('axios') const channels = [] const data = await axios - .get(`https://tvplus.com.tr/canli-tv/yayin-akisi`) + .get(channelsUrl) .then(r => r.data) .catch(console.error) @@ -80,5 +83,21 @@ module.exports = { }) return channels + }, + async fetchBuildId() { + const data = await axios + .get(channelsUrl) + .then(r => r.data) + .catch(console.error) + + if (data) { + const $ = cheerio.load(data) + const nextData = JSON.parse($('#__NEXT_DATA__').text()) + return nextData?.buildId || null + } else { + return null + } + } +} } } From ca43ef969c4934aa49653f7504b506cec15d1b0d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 15 Dec 2024 06:02:22 +0300 Subject: [PATCH 04/64] Update queueCreator.ts --- scripts/core/queueCreator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/core/queueCreator.ts b/scripts/core/queueCreator.ts index 993c378c..8cc9fcb3 100644 --- a/scripts/core/queueCreator.ts +++ b/scripts/core/queueCreator.ts @@ -47,7 +47,7 @@ export class QueueCreator { (_channel: ApiChannel) => _channel.id === channel.xmltv_id ) if (found) { - channel.logo = found.logo + channel.icon = found.logo channel.name = found.name } } else { From d92b106514bb27bfa100ec793b9082b3d8b49d73 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 15 Dec 2024 06:10:37 +0300 Subject: [PATCH 05/64] Upgrade tsx package --- package-lock.json | 2423 +++++++++++++++++++++++++++++++++------------ package.json | 2 +- yarn.lock | 735 ++++++++++---- 3 files changed, 2308 insertions(+), 852 deletions(-) diff --git a/package-lock.json b/package-lock.json index 75fab59d..fc7ccd7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "epg", "hasInstallScript": true, - "license": "MIT", + "license": "UNLICENSED", "dependencies": { "@alex_neo/jest-expect-message": "^1.0.5", "@freearhey/core": "^0.3.1", @@ -42,7 +42,7 @@ "inquirer": "^8.2.6", "jest": "^29.7.0", "langs": "^2.0.0", - "libxmljs2": "^0.33.0", + "libxmljs2": "^0.35.0", "lodash": "^4.17.21", "luxon": "^3.3.0", "markdown-include": "^0.4.3", @@ -61,7 +61,7 @@ "tough-cookie": "^4.1.3", "transliteration": "^2.2.0", "ts-jest": "^29.1.1", - "tsx": "^3.13.0", + "tsx": "^4.19.2", "unzipit": "^1.4.0", "wildcard-match": "^5.1.2" }, @@ -699,10 +699,25 @@ "kuler": "^2.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "cpu": [ "arm" ], @@ -711,13 +726,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "cpu": [ "arm64" ], @@ -726,13 +741,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "cpu": [ "x64" ], @@ -741,13 +756,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "cpu": [ "arm64" ], @@ -756,13 +771,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "cpu": [ "x64" ], @@ -771,13 +786,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "cpu": [ "arm64" ], @@ -786,13 +801,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "cpu": [ "x64" ], @@ -801,13 +816,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "cpu": [ "arm" ], @@ -816,13 +831,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "cpu": [ "arm64" ], @@ -831,13 +846,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "cpu": [ "ia32" ], @@ -846,13 +861,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "cpu": [ "loong64" ], @@ -861,13 +876,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "cpu": [ "mips64el" ], @@ -876,13 +891,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "cpu": [ "ppc64" ], @@ -891,13 +906,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "cpu": [ "riscv64" ], @@ -906,13 +921,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "cpu": [ "s390x" ], @@ -921,13 +936,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "cpu": [ "x64" ], @@ -936,13 +951,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", "cpu": [ "x64" ], @@ -951,13 +966,28 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "cpu": [ "x64" ], @@ -966,13 +996,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "cpu": [ "x64" ], @@ -981,13 +1011,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "cpu": [ "arm64" ], @@ -996,13 +1026,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "cpu": [ "ia32" ], @@ -1011,13 +1041,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "cpu": [ "x64" ], @@ -1026,7 +1056,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -1692,55 +1722,6 @@ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@nicolo-ribaudo/semver-v6": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", @@ -1781,6 +1762,48 @@ "node": ">= 8" } }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -2457,9 +2480,12 @@ "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" }, "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/accepts": { "version": "1.3.8", @@ -2503,14 +2529,23 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dependencies": { - "debug": "4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, "node_modules/ajv": { @@ -2584,11 +2619,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "node_modules/arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", @@ -2608,18 +2638,6 @@ } ] }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -3076,6 +3094,96 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/cache-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.4.tgz", @@ -3276,6 +3384,14 @@ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, "node_modules/cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -3418,14 +3534,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/color/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -3533,11 +3641,6 @@ "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -3768,20 +3871,15 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } @@ -3916,6 +4014,27 @@ "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -3935,6 +4054,14 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, "node_modules/epg-grabber": { "version": "0.37.2", "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.2.tgz", @@ -4002,6 +4129,11 @@ "xml-js": "^1.6.11" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4011,39 +4143,41 @@ } }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "node_modules/escalade": { @@ -4317,6 +4451,14 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", @@ -4332,6 +4474,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -4558,6 +4705,11 @@ "node": ">= 6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -4572,32 +4724,24 @@ } }, "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4626,25 +4770,6 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4681,9 +4806,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -4691,6 +4816,11 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -4801,11 +4931,6 @@ "node": ">=8" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -4861,11 +4986,12 @@ } } }, - "node_modules/http-cookie-agent/node_modules/agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { + "agent-base": "^7.1.0", "debug": "^4.3.4" }, "engines": { @@ -4885,15 +5011,15 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -4996,6 +5122,14 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5053,6 +5187,23 @@ "node": ">=8" } }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5159,6 +5310,11 @@ "node": ">=8" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -5947,6 +6103,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -6053,14 +6214,15 @@ } }, "node_modules/libxmljs2": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/libxmljs2/-/libxmljs2-0.33.0.tgz", - "integrity": "sha512-Hw74f2/3rbpxc6tkTqe3yrs4v2Tx0rEukrYxaNkXSVKK540i2eqlQxzf1jjG+RlwMuv66WxkkuZHM/OQq6km4w==", + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/libxmljs2/-/libxmljs2-0.35.0.tgz", + "integrity": "sha512-SpVopqn4YNydnLjkGfL6yQwzjlipmEnCCsVrD/0hQmdgsQWb5rVmSJxxjQltHIUTto29vgX+PhLjXoc+gMeABQ==", "hasInstallScript": true, "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.11", "bindings": "~1.5.0", - "nan": "~2.18.0" + "nan": "~2.20.0", + "node-gyp": "^10.2.0", + "prebuild-install": "^7.1.2" }, "engines": { "node": ">=18" @@ -6217,25 +6379,41 @@ "node": ">=12" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -6339,6 +6517,130 @@ "node": ">=8" } }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -6378,6 +6680,11 @@ "node": ">=10" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/mockdate": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", @@ -6394,9 +6701,14 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "node_modules/natural-compare": { "version": "1.4.0", @@ -6427,6 +6739,28 @@ "node": ">= 0.6" } }, + "node_modules/node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-cleanup": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", @@ -6475,6 +6809,125 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/node-gyp": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", + "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, "node_modules/node-gzip": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz", @@ -6491,17 +6944,17 @@ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dependencies": { - "abbrev": "1" + "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": ">=6" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/normalize-path": { @@ -6534,17 +6987,6 @@ "node": ">=8" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -6564,14 +7006,6 @@ "node": "*" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-code": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/object-code/-/object-code-1.2.2.tgz", @@ -6727,6 +7161,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -6735,6 +7183,11 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6826,27 +7279,24 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "engines": { - "node": "14 || >=16.14" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-to-regexp": { "version": "2.2.1", @@ -6989,6 +7439,31 @@ "node": ">=8" } }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -7021,6 +7496,26 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -7295,6 +7790,14 @@ "node": ">=8" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -7486,11 +7989,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7595,6 +8093,49 @@ "node": ">=4" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -7621,6 +8162,41 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7654,6 +8230,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -7855,6 +8450,59 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/tar/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -8113,28 +8761,32 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/tsx": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.13.0.tgz", - "integrity": "sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", + "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", "dependencies": { - "esbuild": "~0.18.20", - "get-tsconfig": "^4.7.2", - "source-map-support": "^0.5.21" + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" }, "bin": { "tsx": "dist/cli.mjs" }, + "engines": { + "node": ">=18.0.0" + }, "optionalDependencies": { "fsevents": "~2.3.3" } }, - "node_modules/tsx/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, "node_modules/type-check": { @@ -8180,6 +8832,28 @@ "node": ">=14.17" } }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -8337,14 +9011,6 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", @@ -9045,136 +9711,148 @@ "kuler": "^2.0.0" } }, + "@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "optional": true + }, "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", "optional": true }, "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", "optional": true }, "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", "optional": true }, "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", "optional": true }, "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", "optional": true }, "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", "optional": true }, "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", "optional": true }, "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", "optional": true }, "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", "optional": true }, "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", "optional": true }, "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", "optional": true }, "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", "optional": true }, "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", "optional": true }, "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", "optional": true }, "@eslint-community/eslint-utils": { @@ -9678,45 +10356,6 @@ } } }, - "@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@nicolo-ribaudo/semver-v6": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", @@ -9745,6 +10384,40 @@ "fastq": "^1.6.0" } }, + "@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "requires": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "dependencies": { + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + } + } + }, + "@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + } + } + }, "@octokit/auth-token": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz", @@ -10281,9 +10954,9 @@ "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" }, "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==" }, "accepts": { "version": "1.3.8", @@ -10313,11 +10986,17 @@ "peer": true }, "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "requires": { - "debug": "4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, "ajv": { @@ -10369,25 +11048,11 @@ "picomatch": "^2.0.4" } }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, "arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==" }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -10695,6 +11360,75 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, + "cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, "cache-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.4.tgz", @@ -10828,6 +11562,11 @@ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, "cli-boxes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", @@ -10948,11 +11687,6 @@ "simple-swizzle": "^0.2.2" } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, "colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", @@ -11031,11 +11765,6 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==" }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" - }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -11201,20 +11930,15 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" - }, "deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, "detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" }, "detect-newline": { "version": "3.1.0", @@ -11307,6 +12031,26 @@ "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -11320,6 +12064,11 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, "epg-grabber": { "version": "0.37.2", "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.2.tgz", @@ -11377,6 +12126,11 @@ "xml-js": "^1.6.11" } }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -11386,32 +12140,34 @@ } }, "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" } }, "escalade": { @@ -11596,6 +12352,11 @@ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", @@ -11608,6 +12369,11 @@ "jest-util": "^29.7.0" } }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -11784,6 +12550,11 @@ "mime-types": "^2.1.12" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -11795,25 +12566,17 @@ } }, "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "requires": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "dependencies": { "minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" } } }, @@ -11838,22 +12601,6 @@ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -11875,13 +12622,18 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, "get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "requires": { "resolve-pkg-maps": "^1.0.0" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -11962,11 +12714,6 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" - }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -11994,16 +12741,15 @@ "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", "requires": { "agent-base": "^7.1.0" - }, - "dependencies": { - "agent-base": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", - "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", - "requires": { - "debug": "^4.3.4" - } - } + } + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" } }, "http2-wrapper": { @@ -12016,11 +12762,11 @@ } }, "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "requires": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" } }, @@ -12082,6 +12828,11 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -12135,6 +12886,22 @@ } } }, + "ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "dependencies": { + "sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + } + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -12191,6 +12958,11 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -12776,6 +13548,11 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -12859,13 +13636,14 @@ } }, "libxmljs2": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/libxmljs2/-/libxmljs2-0.33.0.tgz", - "integrity": "sha512-Hw74f2/3rbpxc6tkTqe3yrs4v2Tx0rEukrYxaNkXSVKK540i2eqlQxzf1jjG+RlwMuv66WxkkuZHM/OQq6km4w==", + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/libxmljs2/-/libxmljs2-0.35.0.tgz", + "integrity": "sha512-SpVopqn4YNydnLjkGfL6yQwzjlipmEnCCsVrD/0hQmdgsQWb5rVmSJxxjQltHIUTto29vgX+PhLjXoc+gMeABQ==", "requires": { - "@mapbox/node-pre-gyp": "^1.0.11", "bindings": "~1.5.0", - "nan": "~2.18.0" + "nan": "~2.20.0", + "node-gyp": "^10.2.0", + "prebuild-install": "^7.1.2" } }, "lie": { @@ -12990,19 +13768,37 @@ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz", "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==" }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, + "make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "requires": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, "makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -13079,6 +13875,108 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" }, + "minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "requires": { + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, + "minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "requires": { + "encoding": "^0.1.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "minizlib": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", @@ -13108,6 +14006,11 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "mockdate": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz", @@ -13124,9 +14027,14 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "natural-compare": { "version": "1.4.0", @@ -13151,6 +14059,21 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + } + } + }, "node-cleanup": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", @@ -13190,6 +14113,86 @@ } } }, + "node-gyp": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", + "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + }, + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + }, + "which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "requires": { + "isexe": "^3.1.1" + } + } + } + }, "node-gzip": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz", @@ -13206,11 +14209,11 @@ "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "requires": { - "abbrev": "1" + "abbrev": "^2.0.0" } }, "normalize-path": { @@ -13231,17 +14234,6 @@ "path-key": "^3.0.0" } }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -13255,11 +14247,6 @@ "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==" }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, "object-code": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/object-code/-/object-code-1.2.2.tgz", @@ -13371,11 +14358,24 @@ } } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13445,18 +14445,18 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { "lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==" + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" } } }, @@ -13566,6 +14566,25 @@ "find-up": "^4.0.0" } }, + "prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13588,6 +14607,20 @@ } } }, + "proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==" + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, "prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -13776,6 +14809,11 @@ "signal-exit": "^3.0.2" } }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -13912,11 +14950,6 @@ } } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" - }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -13999,6 +15032,21 @@ } } }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -14024,6 +15072,30 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "requires": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "requires": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -14048,6 +15120,21 @@ "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==" }, + "ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "requires": { + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" + } + } + }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -14186,6 +15273,24 @@ "yallist": "^4.0.0" }, "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -14193,6 +15298,36 @@ } } }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -14361,25 +15496,21 @@ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "tsx": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.13.0.tgz", - "integrity": "sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", + "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", "requires": { - "esbuild": "~0.18.20", + "esbuild": "~0.23.0", "fsevents": "~2.3.3", - "get-tsconfig": "^4.7.2", - "source-map-support": "^0.5.21" - }, - "dependencies": { - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } + "get-tsconfig": "^4.7.5" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" } }, "type-check": { @@ -14406,6 +15537,22 @@ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "peer": true }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "requires": { + "imurmurhash": "^0.1.4" + } + }, "universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -14527,14 +15674,6 @@ "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", diff --git a/package.json b/package.json index d56bc737..48456fa3 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "tough-cookie": "^4.1.3", "transliteration": "^2.2.0", "ts-jest": "^29.1.1", - "tsx": "^3.13.0", + "tsx": "^4.19.2", "unzipit": "^1.4.0", "wildcard-match": "^5.1.2" }, diff --git a/yarn.lock b/yarn.lock index 5dc1f35a..b1dab5b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -331,10 +331,10 @@ enabled "2.0.x" kuler "^2.0.0" -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" @@ -667,21 +667,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@mapbox/node-pre-gyp@^1.0.11": - version "1.0.11" - resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - "@nicolo-ribaudo/semver-v6@^6.3.3": version "6.3.3" resolved "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz" @@ -708,6 +693,24 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@npmcli/agent@^2.0.0": + version "2.2.2" + resolved "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz" + integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/fs@^3.1.0": + version "3.1.1" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz" + integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg== + dependencies: + semver "^7.3.5" + "@octokit/auth-token@^3.0.0": version "3.0.2" resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.2.tgz" @@ -1129,10 +1132,10 @@ resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz" integrity sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA== -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== accepts@~1.3.5: version "1.3.8" @@ -1157,19 +1160,18 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== -agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: - debug "4" + clean-stack "^2.0.0" + indent-string "^4.0.0" ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" @@ -1247,24 +1249,11 @@ anymatch@^3.0.3: normalize-path "^3.0.0" picomatch "^2.0.4" -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - arch@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz" integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" @@ -1423,7 +1412,7 @@ bindings@~1.5.0: dependencies: file-uri-to-path "1.0.0" -bl@^4.1.0: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -1515,6 +1504,24 @@ bytes@3.0.0: resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== +cacache@^18.0.0: + version "18.0.4" + resolved "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz" + integrity sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ== + dependencies: + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" + cache-parser@^1.2.4: version "1.2.4" resolved "https://registry.npmjs.org/cache-parser/-/cache-parser-1.2.4.tgz" @@ -1646,6 +1653,11 @@ cheerio@^1.0.0-rc.10, cheerio@^1.0.0-rc.12: parse5 "^7.0.0" parse5-htmlparser2-tree-adapter "^7.0.0" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" @@ -1661,6 +1673,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + cli-boxes@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" @@ -1778,11 +1795,6 @@ color-string@^1.6.0: color-name "^1.0.0" simple-swizzle "^0.2.2" -color-support@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - color@^3.1.3: version "3.2.1" resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" @@ -1854,11 +1866,6 @@ consola@^3.2.3: resolved "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz" integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - content-disposition@0.5.2: version "0.5.2" resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" @@ -2021,20 +2028,15 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - deprecation@^2.0.0: version "2.3.1" resolved "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== detect-newline@^3.0.0: version "3.1.0" @@ -2125,7 +2127,14 @@ enabled@2.0.x: resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== -end-of-stream@^1.1.0: +encoding@^0.1.0, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -2137,6 +2146,11 @@ entities@^4.2.0, entities@^4.3.0, entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz" integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + epg-grabber@^0.37.2: version "0.37.2" resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.2.tgz" @@ -2174,6 +2188,11 @@ epg-parser@^0.2.0: dayjs "^1.11.6" xml-js "^1.6.11" +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -2181,33 +2200,35 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -esbuild@~0.18.20: - version "0.18.20" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" escalade@^3.1.1: version "3.1.1" @@ -2358,6 +2379,11 @@ exit@^0.1.2: resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expect@^29.0.0, expect@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" @@ -2369,6 +2395,11 @@ expect@^29.0.0, expect@^29.7.0: jest-message-util "^29.7.0" jest-util "^29.7.0" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + external-editor@^3.0.3: version "3.1.0" resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" @@ -2523,6 +2554,11 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^10.0.1: version "10.1.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" @@ -2548,6 +2584,13 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -2568,21 +2611,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -2610,13 +2638,18 @@ get-stream@^6.0.0: resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-tsconfig@^4.7.2: - version "4.7.2" - resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz" - integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== +get-tsconfig@^4.7.5: + version "4.8.1" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz" + integrity sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg== dependencies: resolve-pkg-maps "^1.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -2631,6 +2664,30 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" +glob@^10.2.2: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^10.3.10: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + glob@^10.3.4: version "10.3.5" resolved "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz" @@ -2695,7 +2752,7 @@ got@^11.8.2: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -2715,11 +2772,6 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" @@ -2742,7 +2794,7 @@ htmlparser2@^8.0.1: domutils "^3.0.1" entities "^4.3.0" -http-cache-semantics@^4.0.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== @@ -2754,6 +2806,14 @@ http-cookie-agent@^5.0.4: dependencies: agent-base "^7.1.0" +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" @@ -2762,12 +2822,12 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== +https-proxy-agent@^7.0.1: + version "7.0.6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: - agent-base "6" + agent-base "^7.1.2" debug "4" human-signals@^2.1.0: @@ -2782,6 +2842,13 @@ iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.1.13: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" @@ -2818,6 +2885,11 @@ imurmurhash@^0.1.4: resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" @@ -2857,6 +2929,14 @@ inquirer@^8.2.6: through "^2.3.6" wrap-ansi "^6.0.1" +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" @@ -2916,6 +2996,11 @@ is-interactive@^1.0.0: resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -2953,6 +3038,11 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" @@ -3015,6 +3105,15 @@ jackspeak@^2.0.3: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" @@ -3393,6 +3492,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -3478,14 +3582,15 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -libxmljs2@^0.33.0: - version "0.33.0" - resolved "https://registry.npmjs.org/libxmljs2/-/libxmljs2-0.33.0.tgz" - integrity sha512-Hw74f2/3rbpxc6tkTqe3yrs4v2Tx0rEukrYxaNkXSVKK540i2eqlQxzf1jjG+RlwMuv66WxkkuZHM/OQq6km4w== +libxmljs2@^0.35.0: + version "0.35.0" + resolved "https://registry.npmjs.org/libxmljs2/-/libxmljs2-0.35.0.tgz" + integrity sha512-SpVopqn4YNydnLjkGfL6yQwzjlipmEnCCsVrD/0hQmdgsQWb5rVmSJxxjQltHIUTto29vgX+PhLjXoc+gMeABQ== dependencies: - "@mapbox/node-pre-gyp" "^1.0.11" bindings "~1.5.0" - nan "~2.18.0" + nan "~2.20.0" + node-gyp "^10.2.0" + prebuild-install "^7.1.2" lie@3.1.1: version "3.1.1" @@ -3570,6 +3675,16 @@ lowercase-keys@^2.0.0: resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^10.0.1: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -3584,11 +3699,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== - luxon@^3.3.0, luxon@~3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz" @@ -3599,13 +3709,6 @@ luxon@^3.4.3: resolved "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz" integrity sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg== -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-dir@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" @@ -3618,6 +3721,24 @@ make-error@^1.1.1, make-error@1.x: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +make-fetch-happen@^13.0.0: + version "13.0.1" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz" + integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA== + dependencies: + "@npmcli/agent" "^2.0.0" + cacache "^18.0.0" + http-cache-semantics "^4.1.1" + is-lambda "^1.0.1" + minipass "^7.0.2" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + proc-log "^4.2.0" + promise-retry "^2.0.1" + ssri "^10.0.0" + makeerror@1.0.12: version "1.0.12" resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" @@ -3703,11 +3824,57 @@ minimatch@^9.0.1: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0: +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.3: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^3.0.0: + version "3.0.5" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz" + integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + minipass@^3.0.0: version "3.3.6" resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" @@ -3720,7 +3887,17 @@ minipass@^5.0.0, "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -minizlib@^2.1.1: +minipass@^7.0.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -3728,6 +3905,11 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" @@ -3758,10 +3940,15 @@ mute-stream@0.0.8: resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@~2.18.0: - version "2.18.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== +nan@~2.20.0: + version "2.20.0" + resolved "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz" + integrity sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw== + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== natural-compare@^1.4.0: version "1.4.0" @@ -3780,11 +3967,18 @@ nedb-promises@^6.0.3: dependencies: "@seald-io/nedb" "^2.2.0" -negotiator@0.6.3: +negotiator@^0.6.3, negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +node-abi@^3.3.0: + version "3.71.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz" + integrity sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw== + dependencies: + semver "^7.3.5" + node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz" @@ -3802,6 +3996,22 @@ node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-gyp@^10.2.0: + version "10.3.1" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz" + integrity sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^13.0.0" + nopt "^7.0.0" + proc-log "^4.1.0" + semver "^7.3.5" + tar "^6.2.1" + which "^4.0.0" + node-gzip@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/node-gzip/-/node-gzip-1.1.2.tgz" @@ -3817,12 +4027,12 @@ node-releases@^2.0.12: resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== +nopt@^7.0.0: + version "7.2.1" + resolved "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz" + integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w== dependencies: - abbrev "1" + abbrev "^2.0.0" normalize-path@^3.0.0: version "3.0.0" @@ -3841,16 +4051,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" @@ -3863,11 +4063,6 @@ numeral@^2.0.6: resolved "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz" integrity sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA== -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - object-code@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/object-code/-/object-code-1.2.2.tgz" @@ -3976,6 +4171,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" @@ -3986,6 +4188,11 @@ p-try@^2.0.0: resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" @@ -4061,12 +4268,12 @@ path-parse@^1.0.7: resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.10.1, path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@2.2.1: @@ -4122,6 +4329,24 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +prebuild-install@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -4136,6 +4361,19 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" +proc-log@^4.1.0, proc-log@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz" + integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + prompts@^2.0.1: version "2.4.2" resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" @@ -4202,7 +4440,7 @@ range-parser@1.2.0: resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== -rc@^1.0.1, rc@^1.1.6: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -4217,7 +4455,7 @@ react-is@^18.0.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -4317,6 +4555,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -4368,7 +4611,7 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz" integrity sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg== -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -4378,17 +4621,15 @@ sax@^1.2.4: resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -semver@^6.0.0, semver@^6.3.0: +semver@^6.3.0: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.5: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== semver@^7.5.3: version "7.5.4" @@ -4435,11 +4676,6 @@ serve@^14.2.0: serve-handler "6.1.5" update-check "1.5.4" -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -4452,7 +4688,7 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -4471,6 +4707,20 @@ signale@^1.4.0: figures "^2.0.0" pkg-conf "^2.1.0" +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" @@ -4488,13 +4738,27 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-support@^0.5.21: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.3" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz" + integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" source-map-support@0.5.13: version "0.5.13" @@ -4509,6 +4773,11 @@ source-map@^0.6.0, source-map@^0.6.1: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -4519,6 +4788,13 @@ srcset@^4.0.0: resolved "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz" integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== +ssri@^10.0.0: + version "10.0.6" + resolved "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz" + integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ== + dependencies: + minipass "^7.0.3" + stack-trace@0.0.x: version "0.0.10" resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" @@ -4555,7 +4831,7 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -4660,7 +4936,28 @@ tabletojson@^2.0.7: cheerio "^1.0.0-rc.10" got "^11.8.2" -tar@^6.1.11: +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tar@^6.1.11, tar@^6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== @@ -4790,17 +5087,23 @@ tslib@^2.1.0: resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsx@^3.13.0: - version "3.13.0" - resolved "https://registry.npmjs.org/tsx/-/tsx-3.13.0.tgz" - integrity sha512-rjmRpTu3as/5fjNq/kOkOtihgLxuIz6pbKdj9xwP4J5jOLkBxw/rjN5ANw+KyrrOXV5uB7HC8+SrrSJxT65y+A== +tsx@^4.19.2: + version "4.19.2" + resolved "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz" + integrity sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g== dependencies: - esbuild "~0.18.20" - get-tsconfig "^4.7.2" - source-map-support "^0.5.21" + esbuild "~0.23.0" + get-tsconfig "^4.7.5" optionalDependencies: fsevents "~2.3.3" +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.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" @@ -4833,6 +5136,20 @@ typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6": resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + universal-user-agent@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" @@ -4954,12 +5271,12 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.2: - version "1.1.5" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== +which@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/which/-/which-4.0.0.tgz" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== dependencies: - string-width "^1.0.2 || 2 || 3 || 4" + isexe "^3.1.1" widest-line@^4.0.1: version "4.0.1" From 43b6679fa0860cefca4c0384bf0f0c9f1a1d679b Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 15 Dec 2024 06:17:31 +0300 Subject: [PATCH 06/64] Update validate.test.ts --- tests/commands/channels/validate.test.ts | 32 ++++++++++++++++++------ 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/tests/commands/channels/validate.test.ts b/tests/commands/channels/validate.test.ts index 0177a6e5..56598267 100644 --- a/tests/commands/channels/validate.test.ts +++ b/tests/commands/channels/validate.test.ts @@ -19,13 +19,21 @@ describe('channels:validate', () => { process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) - expect((error as ExecError).stdout).toContain(`duplicate.channels.xml + expect((error as ExecError).stdout).toContain(` +> channels:validate +> npx tsx scripts/commands/channels/validate.ts --channels=tests/__data__/input/channels-validate/duplicate.channels.xml + +options: + channels: tests/__data__/input/channels-validate/duplicate.channels.xml +tests/__data__/input/channels-validate/duplicate.channels.xml ┌─────────┬─────────────┬──────┬────────────────┬─────────┬─────────┐ -│ (index) │ type │ lang │ xmltv_id │ site_id │ name │ +│ (index) │ type │ lang │ xmltv_id │ site_id │ name │ ├─────────┼─────────────┼──────┼────────────────┼─────────┼─────────┤ -│ 0 │ 'duplicate' │ 'en' │ 'BravoEast.us' │ '140' │ 'Bravo' │ +│ 0 │ 'duplicate' │ 'en' │ 'BravoEast.us' │ '140' │ 'Bravo' │ └─────────┴─────────────┴──────┴────────────────┴─────────┴─────────┘ -\n1 error(s) in 1 file(s)\n`) + +1 error(s) in 1 file(s) +`) } }) @@ -36,13 +44,21 @@ describe('channels:validate', () => { process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) - expect((error as ExecError).stdout).toContain(`wrong_xmltv_id.channels.xml + expect((error as ExecError).stdout).toContain(` +> channels:validate +> npx tsx scripts/commands/channels/validate.ts --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml + +options: + channels: tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml +tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml ┌─────────┬──────────────────┬──────┬────────────────────┬─────────┬─────────────────────┐ -│ (index) │ type │ lang │ xmltv_id │ site_id │ name │ +│ (index) │ type │ lang │ xmltv_id │ site_id │ name │ ├─────────┼──────────────────┼──────┼────────────────────┼─────────┼─────────────────────┤ -│ 0 │ 'wrong_xmltv_id' │ 'en' │ 'CNNInternational' │ '140' │ 'CNN International' │ +│ 0 │ 'wrong_xmltv_id' │ 'en' │ 'CNNInternational' │ '140' │ 'CNN International' │ └─────────┴──────────────────┴──────┴────────────────────┴─────────┴─────────────────────┘ -\n1 error(s) in 1 file(s)\n`) + +1 error(s) in 1 file(s) +`) } }) }) From 76ef02576574620f749a2bf3015c6f1c03c119e0 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 15 Dec 2024 07:25:39 +0300 Subject: [PATCH 07/64] Upgrade dependencies --- package-lock.json | 1789 +++++++++++++++++++-------------------------- package.json | 12 +- yarn.lock | 740 +++++++++---------- 3 files changed, 1121 insertions(+), 1420 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc7ccd7f..92c7f236 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,9 +19,9 @@ "@types/lodash": "^4.14.199", "@types/node-cleanup": "^2.1.2", "@types/numeral": "^2.0.3", - "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/eslint-plugin": "^8.18.0", "axios": "^1.5.1", - "axios-cookiejar-support": "^4.0.7", + "axios-cookiejar-support": "^5.0.4", "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.10", "cli-progress": "^3.12.0", @@ -31,9 +31,9 @@ "csv-parser": "^3.0.0", "cwait": "^1.1.2", "dayjs": "^1.11.10", - "epg-grabber": "^0.37.2", + "epg-grabber": "^0.37.4", "epg-parser": "^0.2.0", - "eslint": "^8.17.0", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.0.0", "form-data": "^4.0.0", "fs-extra": "^10.0.1", @@ -53,12 +53,12 @@ "numeral": "^2.0.6", "parse-duration": "^1.0.0", "pdf-parse": "^1.1.1", - "serve": "^14.2.0", + "serve": "^14.2.4", "signale": "^1.4.0", "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "transliteration": "^2.2.0", "ts-jest": "^29.1.1", "tsx": "^4.19.2", @@ -1060,36 +1060,63 @@ } }, "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==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz", - "integrity": "sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1097,7 +1124,10 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -1106,14 +1136,11 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1130,15 +1157,31 @@ "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==", + "node_modules/@eslint/js": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "dependencies": { + "levn": "^0.4.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@freearhey/core": { @@ -1235,23 +1278,61 @@ "node": ">=16.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "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==" + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "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==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2051,6 +2132,11 @@ "@types/node": "*" } }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, "node_modules/@types/fs-extra": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz", @@ -2112,15 +2198,10 @@ "pretty-format": "^29.0.0" } }, - "node_modules/@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==" - }, "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==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/jsonfile": { "version": "6.1.2", @@ -2171,11 +2252,6 @@ "@types/node": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==" - }, "node_modules/@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -2203,107 +2279,67 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", - "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", + "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/type-utils": "6.7.3", - "@typescript-eslint/utils": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/type-utils": "8.18.0", + "@typescript-eslint/utils": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.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 - } + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", - "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", + "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", - "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", + "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", "dependencies": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3" + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2311,37 +2347,33 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", - "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", + "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/utils": "8.18.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", - "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", + "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2349,103 +2381,56 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", - "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", + "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", "dependencies": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "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/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", - "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", - "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.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "yallist": "^4.0.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -2453,31 +2438,59 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", - "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "node_modules/@typescript-eslint/utils": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", + "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", "dependencies": { - "@typescript-eslint/types": "6.7.3", - "eslint-visitor-keys": "^3.4.1" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", + "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", + "dependencies": { + "@typescript-eslint/types": "8.18.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@zeit/schemas": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", - "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", + "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==" }, "node_modules/abbrev": { "version": "2.0.0", @@ -2500,9 +2513,9 @@ } }, "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "bin": { "acorn": "bin/acorn" }, @@ -2651,14 +2664,6 @@ "sprintf-js": "~1.0.2" } }, - "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==", - "engines": { - "node": ">=8" - } - }, "node_modules/async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", @@ -2670,11 +2675,11 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "node_modules/axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "dependencies": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -2693,14 +2698,14 @@ } }, "node_modules/axios-cookiejar-support": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", - "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-5.0.4.tgz", + "integrity": "sha512-zhMWgT0ttt9EtMixHBT0egmCleD5XmwGAit6aJXkgP2mCNsaeAaC0615sRB4FaBugFf/YhL1O6JB3aQbj3EqeQ==", "dependencies": { - "http-cookie-agent": "^5.0.4" + "http-cookie-agent": "^6.0.7" }, "engines": { - "node": ">=14.18.0 <15.0.0 || >=16.0.0" + "node": ">=18.0.0" }, "funding": { "url": "https://github.com/sponsors/3846masa" @@ -3575,18 +3580,6 @@ "node": ">= 12" } }, - "node_modules/compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "dependencies": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -3691,9 +3684,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3910,28 +3903,6 @@ "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==", - "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==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -4063,9 +4034,9 @@ } }, "node_modules/epg-grabber": { - "version": "0.37.2", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.2.tgz", - "integrity": "sha512-nW0LREl8pX0rEp7IMKqgbqQizvH/hqagCyv5ixwj7Pwdja7u8Kl2OpSicKr2iMt0ysO9cjqaSsWFWHHGgmVYtQ==", + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.4.tgz", + "integrity": "sha512-PS104bH9tHRa9kivSwx47AKMkfHwKy51XQTx+GO6sIXvIp2Z4LBpwMEXGcfPoAsdIGxgs2Wrl0dZ/QGL+7x6YQ==", "dependencies": { "axios": "^1.6.1", "axios-cache-interceptor": "^0.10.3", @@ -4077,10 +4048,10 @@ "epg-parser": "^0.1.6", "fs-extra": "^11.1.1", "glob": "^7.1.6", - "http-cookie-agent": "^5.0.4", + "http-cookie-agent": "^6.0.8", "lodash": "^4.17.21", "node-gzip": "^1.1.2", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "winston": "^3.3.3", "xml-js": "^1.6.11" }, @@ -4197,54 +4168,61 @@ } }, "node_modules/eslint": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", - "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -4259,40 +4237,18 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -4306,11 +4262,6 @@ "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==" - }, "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", @@ -4322,35 +4273,53 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "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==", "dependencies": { - "type-fest": "^0.20.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", + "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==", "dependencies": { - "argparse": "^2.0.1" + "p-locate": "^5.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "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==", + "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==", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { "node": ">=10" }, @@ -4359,16 +4328,30 @@ } }, "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dependencies": { - "acorn": "^8.7.1", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -4384,9 +4367,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dependencies": { "estraverse": "^5.1.0" }, @@ -4503,9 +4486,9 @@ "integrity": "sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==" }, "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==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -4538,23 +4521,10 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, "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==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dependencies": { "reusify": "^1.0.4" } @@ -4587,14 +4557,14 @@ } }, "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==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-uri-to-path": { @@ -4626,21 +4596,21 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" }, "node_modules/fn.name": { "version": "1.1.0", @@ -4765,11 +4735,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4859,25 +4824,6 @@ "node": ">=4" } }, - "node_modules/globby": { - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -4960,27 +4906,23 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "node_modules/http-cookie-agent": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", - "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.8.tgz", + "integrity": "sha512-qnYh3yLSr2jBsTYkw11elq+T361uKAJaZ2dR4cfYZChw1dt9uL5t3zSUwehoqqVb4oldk1BpkXKm2oat8zV+oA==", "dependencies": { - "agent-base": "^7.1.0" + "agent-base": "^7.1.3" }, "engines": { - "node": ">=14.18.0 <15.0.0 || >=16.0.0" + "node": ">=18.0.0" }, "funding": { "url": "https://github.com/sponsors/3846masa" }, "peerDependencies": { - "deasync": "^0.1.26", - "tough-cookie": "^4.0.0", - "undici": "^5.11.0" + "tough-cookie": "^4.0.0 || ^5.0.0", + "undici": "^5.11.0 || ^6.0.0" }, "peerDependenciesMeta": { - "deasync": { - "optional": true - }, "undici": { "optional": true } @@ -5061,9 +5003,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "engines": { "node": ">= 4" } @@ -6167,11 +6109,10 @@ } }, "node_modules/keyv": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.2.2.tgz", - "integrity": "sha512-uYS0vKTlBIjNCAUqrjlxmruxOEiZxZIHXyp32sdcGmP+ukFrmWUnE//RcPXJH3Vxrni1H2gsQbjHE0bH7MtMQQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { - "compress-brotli": "^1.3.6", "json-buffer": "3.0.1" } }, @@ -6447,11 +6388,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -7299,17 +7240,9 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "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==", - "engines": { - "node": ">=8" - } + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==" }, "node_modules/pdf-parse": { "version": "1.1.1", @@ -7533,11 +7466,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -7548,9 +7476,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -7579,11 +7507,6 @@ "teleport": ">=0.2.0" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -7662,17 +7585,6 @@ "node": ">= 6" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", @@ -7709,11 +7621,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", @@ -7807,20 +7714,6 @@ "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==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -7901,12 +7794,12 @@ } }, "node_modules/serve": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.0.tgz", - "integrity": "sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz", + "integrity": "sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==", "dependencies": { - "@zeit/schemas": "2.29.0", - "ajv": "8.11.0", + "@zeit/schemas": "2.36.0", + "ajv": "8.12.0", "arg": "5.0.2", "boxen": "7.0.0", "chalk": "5.0.1", @@ -7914,7 +7807,7 @@ "clipboardy": "3.0.0", "compression": "1.7.4", "is-port-reachable": "4.0.0", - "serve-handler": "6.1.5", + "serve-handler": "6.1.6", "update-check": "1.5.4" }, "bin": { @@ -7925,17 +7818,16 @@ } }, "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", "mime-types": "2.1.18", "minimatch": "3.1.2", "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", + "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, @@ -7959,9 +7851,9 @@ } }, "node_modules/serve/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -8526,16 +8418,27 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "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==" - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, + "node_modules/tldts": { + "version": "6.1.68", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.68.tgz", + "integrity": "sha512-JKF17jROiYkjJPT73hUTEiTp2OBCf+kAlB+1novk8i6Q6dWjHsgEjw9VLiipV4KTJavazXhY1QUXyQFSem2T7w==", + "dependencies": { + "tldts-core": "^6.1.68" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.68", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.68.tgz", + "integrity": "sha512-85TdlS/DLW/gVdf2oyyzqp3ocS30WxjaL4la85EArl9cHUR/nizifKAJPziWewSZjDZS71U517/i6ciUeqtB5Q==" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -8572,25 +8475,14 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "tldts": "^6.1.32" }, "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/transliteration": { @@ -8614,11 +8506,11 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "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==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -8924,15 +8816,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -8943,11 +8826,6 @@ "resolved": "https://registry.npmjs.org/uzip-module/-/uzip-module-1.0.3.tgz", "integrity": "sha512-AMqwWZaknLM77G+VPYNZLEruMGWGzyigPK3/Whg99B3S6vGHuqsyl5ZrOv1UUF3paGK1U6PM0cnayioaryg/fA==" }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, "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", @@ -9856,27 +9734,45 @@ "optional": true }, "@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==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "requires": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" } }, "@eslint-community/regexpp": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz", - "integrity": "sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==" + }, + "@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "requires": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + } + }, + "@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "requires": { + "@types/json-schema": "^7.0.15" + } }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -9890,12 +9786,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "requires": { - "type-fest": "^0.20.2" - } + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==" }, "js-yaml": { "version": "4.1.0", @@ -9904,14 +9797,27 @@ "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==" } } }, + "@eslint/js": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==" + }, + "@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==" + }, + "@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "requires": { + "levn": "^0.4.1" + } + }, "@freearhey/core": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@freearhey/core/-/core-0.3.1.tgz", @@ -9984,20 +9890,36 @@ "lodash": "^4.17.21" } }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==" + }, + "@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "dependencies": { + "@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==" + } } }, - "@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==" + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, + "@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==" }, "@isaacs/cliui": { "version": "8.0.2", @@ -10635,6 +10557,11 @@ "@types/node": "*" } }, + "@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" + }, "@types/fs-extra": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz", @@ -10696,15 +10623,10 @@ "pretty-format": "^29.0.0" } }, - "@types/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==" - }, "@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "@types/jsonfile": { "version": "6.1.2", @@ -10755,11 +10677,6 @@ "@types/node": "*" } }, - "@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==" - }, "@types/stack-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", @@ -10787,171 +10704,128 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@typescript-eslint/eslint-plugin": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", - "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", + "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", "requires": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/type-utils": "6.7.3", - "@typescript-eslint/utils": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/type-utils": "8.18.0", + "@typescript-eslint/utils": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/parser": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", - "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", + "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", "peer": true, "requires": { - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", - "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", + "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", "requires": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3" + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0" } }, "@typescript-eslint/type-utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", - "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", + "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", "requires": { - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/utils": "8.18.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" } }, "@typescript-eslint/types": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", - "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==" + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", + "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==" }, "@typescript-eslint/typescript-estree": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", - "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", + "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", "requires": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { - "yallist": "^4.0.0" + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" } } }, "@typescript-eslint/utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", - "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", + "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "semver": "^7.5.4" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0" } }, "@typescript-eslint/visitor-keys": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", - "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", + "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", "requires": { - "@typescript-eslint/types": "6.7.3", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.18.0", + "eslint-visitor-keys": "^4.2.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==" + } } }, "@zeit/schemas": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", - "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" + "version": "2.36.0", + "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", + "integrity": "sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==" }, "abbrev": { "version": "2.0.0", @@ -10968,9 +10842,9 @@ } }, "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" }, "acorn-jsx": { "version": "5.3.2", @@ -11066,11 +10940,6 @@ "sprintf-js": "~1.0.2" } }, - "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==" - }, "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", @@ -11082,11 +10951,11 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "axios": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", - "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", "requires": { - "follow-redirects": "^1.15.0", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -11102,11 +10971,11 @@ } }, "axios-cookiejar-support": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz", - "integrity": "sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-5.0.4.tgz", + "integrity": "sha512-zhMWgT0ttt9EtMixHBT0egmCleD5XmwGAit6aJXkgP2mCNsaeAaC0615sRB4FaBugFf/YhL1O6JB3aQbj3EqeQ==", "requires": { - "http-cookie-agent": "^5.0.4" + "http-cookie-agent": "^6.0.7" } }, "axios-mock-adapter": { @@ -11709,15 +11578,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" }, - "compress-brotli": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", - "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", - "requires": { - "@types/json-buffer": "~3.0.0", - "json-buffer": "~3.0.1" - } - }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -11806,9 +11666,9 @@ } }, "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -11957,22 +11817,6 @@ "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==", - "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==", - "requires": { - "esutils": "^2.0.2" - } - }, "dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -12070,9 +11914,9 @@ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, "epg-grabber": { - "version": "0.37.2", - "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.2.tgz", - "integrity": "sha512-nW0LREl8pX0rEp7IMKqgbqQizvH/hqagCyv5ixwj7Pwdja7u8Kl2OpSicKr2iMt0ysO9cjqaSsWFWHHGgmVYtQ==", + "version": "0.37.4", + "resolved": "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.4.tgz", + "integrity": "sha512-PS104bH9tHRa9kivSwx47AKMkfHwKy51XQTx+GO6sIXvIp2Z4LBpwMEXGcfPoAsdIGxgs2Wrl0dZ/QGL+7x6YQ==", "requires": { "axios": "^1.6.1", "axios-cache-interceptor": "^0.10.3", @@ -12084,10 +11928,10 @@ "epg-parser": "^0.1.6", "fs-extra": "^11.1.1", "glob": "^7.1.6", - "http-cookie-agent": "^5.0.4", + "http-cookie-agent": "^6.0.8", "lodash": "^4.17.21", "node-gzip": "^1.1.2", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "winston": "^3.3.3", "xml-js": "^1.6.11" }, @@ -12181,77 +12025,80 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz", - "integrity": "sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw==", + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "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.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3" }, "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==" - }, "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==" }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==" + }, + "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==", "requires": { - "type-fest": "^0.20.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "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==", "requires": { - "argparse": "^2.0.1" + "p-locate": "^5.0.0" } }, - "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==" + "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==", + "requires": { + "p-limit": "^3.0.2" + } } } }, @@ -12262,42 +12109,34 @@ "requires": {} }, "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, "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==" }, "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "requires": { - "acorn": "^8.7.1", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^4.2.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==" + } } }, "esprima": { @@ -12306,9 +12145,9 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "requires": { "estraverse": "^5.1.0" } @@ -12395,9 +12234,9 @@ "integrity": "sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg==" }, "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==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -12426,25 +12265,10 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } - } - }, "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "requires": { "reusify": "^1.0.4" } @@ -12471,11 +12295,11 @@ } }, "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==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "requires": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" } }, "file-uri-to-path": { @@ -12501,18 +12325,18 @@ } }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" }, "fn.name": { "version": "1.1.0", @@ -12596,11 +12420,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -12660,19 +12479,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "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" - } - }, "got": { "version": "11.8.5", "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", @@ -12736,11 +12542,11 @@ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-cookie-agent": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz", - "integrity": "sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.8.tgz", + "integrity": "sha512-qnYh3yLSr2jBsTYkw11elq+T361uKAJaZ2dR4cfYZChw1dt9uL5t3zSUwehoqqVb4oldk1BpkXKm2oat8zV+oA==", "requires": { - "agent-base": "^7.1.0" + "agent-base": "^7.1.3" } }, "http-proxy-agent": { @@ -12789,9 +12595,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" }, "immediate": { "version": "3.0.6", @@ -13598,11 +13404,10 @@ } }, "keyv": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.2.2.tgz", - "integrity": "sha512-uYS0vKTlBIjNCAUqrjlxmruxOEiZxZIHXyp32sdcGmP+ukFrmWUnE//RcPXJH3Vxrni1H2gsQbjHE0bH7MtMQQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "requires": { - "compress-brotli": "^1.3.6", "json-buffer": "3.0.1" } }, @@ -13826,11 +13631,11 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -14461,14 +14266,9 @@ } }, "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==" }, "pdf-parse": { "version": "1.1.1", @@ -14635,11 +14435,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -14650,9 +14445,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "pure-rand": { "version": "6.0.4", @@ -14664,11 +14459,6 @@ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -14717,11 +14507,6 @@ "util-deprecate": "^1.0.1" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", @@ -14749,11 +14534,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "resolve": { "version": "1.22.6", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", @@ -14819,14 +14599,6 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -14880,12 +14652,12 @@ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" }, "serve": { - "version": "14.2.0", - "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.0.tgz", - "integrity": "sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg==", + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz", + "integrity": "sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==", "requires": { - "@zeit/schemas": "2.29.0", - "ajv": "8.11.0", + "@zeit/schemas": "2.36.0", + "ajv": "8.12.0", "arg": "5.0.2", "boxen": "7.0.0", "chalk": "5.0.1", @@ -14893,14 +14665,14 @@ "clipboardy": "3.0.0", "compression": "1.7.4", "is-port-reachable": "4.0.0", - "serve-handler": "6.1.5", + "serve-handler": "6.1.6", "update-check": "1.5.4" }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -14921,17 +14693,16 @@ } }, "serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", "requires": { "bytes": "3.0.0", "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", "mime-types": "2.1.18", "minimatch": "3.1.2", "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", + "path-to-regexp": "3.3.0", "range-parser": "1.2.0" }, "dependencies": { @@ -15343,16 +15114,24 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "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==" - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, + "tldts": { + "version": "6.1.68", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.68.tgz", + "integrity": "sha512-JKF17jROiYkjJPT73hUTEiTp2OBCf+kAlB+1novk8i6Q6dWjHsgEjw9VLiipV4KTJavazXhY1QUXyQFSem2T7w==", + "requires": { + "tldts-core": "^6.1.68" + } + }, + "tldts-core": { + "version": "6.1.68", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.68.tgz", + "integrity": "sha512-85TdlS/DLW/gVdf2oyyzqp3ocS30WxjaL4la85EArl9cHUR/nizifKAJPziWewSZjDZS71U517/i6ciUeqtB5Q==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -15380,21 +15159,11 @@ } }, "tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" - } + "tldts": "^6.1.32" } }, "transliteration": { @@ -15411,9 +15180,9 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "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==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "requires": {} }, "ts-jest": { @@ -15597,15 +15366,6 @@ "punycode": "^2.1.0" } }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -15616,11 +15376,6 @@ "resolved": "https://registry.npmjs.org/uzip-module/-/uzip-module-1.0.3.tgz", "integrity": "sha512-AMqwWZaknLM77G+VPYNZLEruMGWGzyigPK3/Whg99B3S6vGHuqsyl5ZrOv1UUF3paGK1U6PM0cnayioaryg/fA==" }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" - }, "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", diff --git a/package.json b/package.json index 48456fa3..3d3a5213 100644 --- a/package.json +++ b/package.json @@ -38,9 +38,9 @@ "@types/lodash": "^4.14.199", "@types/node-cleanup": "^2.1.2", "@types/numeral": "^2.0.3", - "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/eslint-plugin": "^8.18.0", "axios": "^1.5.1", - "axios-cookiejar-support": "^4.0.7", + "axios-cookiejar-support": "^5.0.4", "chalk": "^4.1.2", "cheerio": "^1.0.0-rc.10", "cli-progress": "^3.12.0", @@ -50,9 +50,9 @@ "csv-parser": "^3.0.0", "cwait": "^1.1.2", "dayjs": "^1.11.10", - "epg-grabber": "^0.37.2", + "epg-grabber": "^0.37.4", "epg-parser": "^0.2.0", - "eslint": "^8.17.0", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.0.0", "form-data": "^4.0.0", "fs-extra": "^10.0.1", @@ -72,12 +72,12 @@ "numeral": "^2.0.6", "parse-duration": "^1.0.0", "pdf-parse": "^1.1.1", - "serve": "^14.2.0", + "serve": "^14.2.4", "signale": "^1.4.0", "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "transliteration": "^2.2.0", "ts-jest": "^29.1.1", "tsx": "^4.19.2", diff --git a/yarn.lock b/yarn.lock index b1dab5b2..3f9d3eeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -336,33 +336,66 @@ resolved "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz" integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== -"@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== +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.1" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.5.1": - version "4.8.2" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz" - integrity sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g== +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== -"@eslint/eslintrc@^1.3.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz" - integrity sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw== +"@eslint/config-array@^0.19.0": + version "0.19.1" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.9.0": + version "0.9.1" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz" + integrity sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.3.2" - globals "^13.15.0" + espree "^10.0.1" + globals "^14.0.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@9.17.0": + version "9.17.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz" + integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.3": + version "0.2.4" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz" + integrity sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg== + dependencies: + levn "^0.4.1" + "@freearhey/core@^0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@freearhey/core/-/core-0.3.1.tgz" @@ -388,19 +421,33 @@ dependencies: lodash "^4.17.21" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.4" +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== -"@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== +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" + +"@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/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -902,6 +949,11 @@ dependencies: "@types/node" "*" +"@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + "@types/fs-extra@^11.0.2": version "11.0.2" resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.2.tgz" @@ -957,15 +1009,10 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/json-buffer@~3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== - -"@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/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/jsonfile@*": version "6.1.2" @@ -1013,11 +1060,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.5.0": - version "7.5.3" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz" - integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== - "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" @@ -1042,95 +1084,91 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz" - integrity sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA== +"@typescript-eslint/eslint-plugin@^8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz" + integrity sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw== dependencies: - "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/type-utils" "6.7.3" - "@typescript-eslint/utils" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" - debug "^4.3.4" + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/type-utils" "8.18.0" + "@typescript-eslint/utils" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" graphemer "^1.4.0" - ignore "^5.2.4" + ignore "^5.3.1" natural-compare "^1.4.0" - semver "^7.5.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/parser@^6.0.0 || ^6.0.0-alpha": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz" - integrity sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ== +"@typescript-eslint/parser@^8.0.0 || ^8.0.0-alpha.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz" + integrity sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q== dependencies: - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/typescript-estree" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/typescript-estree" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz" - integrity sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ== +"@typescript-eslint/scope-manager@8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz" + integrity sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw== dependencies: - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" -"@typescript-eslint/type-utils@6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz" - integrity sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw== +"@typescript-eslint/type-utils@8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz" + integrity sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow== dependencies: - "@typescript-eslint/typescript-estree" "6.7.3" - "@typescript-eslint/utils" "6.7.3" + "@typescript-eslint/typescript-estree" "8.18.0" + "@typescript-eslint/utils" "8.18.0" debug "^4.3.4" - ts-api-utils "^1.0.1" + ts-api-utils "^1.3.0" -"@typescript-eslint/types@6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz" - integrity sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw== +"@typescript-eslint/types@8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz" + integrity sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA== -"@typescript-eslint/typescript-estree@6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz" - integrity sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g== +"@typescript-eslint/typescript-estree@8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz" + integrity sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg== dependencies: - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/visitor-keys" "8.18.0" debug "^4.3.4" - globby "^11.1.0" + fast-glob "^3.3.2" is-glob "^4.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" -"@typescript-eslint/utils@6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz" - integrity sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg== +"@typescript-eslint/utils@8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz" + integrity sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg== 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.3" - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/typescript-estree" "6.7.3" - semver "^7.5.4" + "@typescript-eslint/scope-manager" "8.18.0" + "@typescript-eslint/types" "8.18.0" + "@typescript-eslint/typescript-estree" "8.18.0" -"@typescript-eslint/visitor-keys@6.7.3": - version "6.7.3" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz" - integrity sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg== +"@typescript-eslint/visitor-keys@8.18.0": + version "8.18.0" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz" + integrity sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw== dependencies: - "@typescript-eslint/types" "6.7.3" - eslint-visitor-keys "^3.4.1" + "@typescript-eslint/types" "8.18.0" + eslint-visitor-keys "^4.2.0" -"@zeit/schemas@2.29.0": - version "2.29.0" - resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz" - integrity sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA== +"@zeit/schemas@2.36.0": + version "2.36.0" + resolved "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz" + integrity sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg== abbrev@^2.0.0: version "2.0.0" @@ -1155,12 +1193,12 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.7.1: - version "8.7.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.14.0, acorn@^8.4.1: + version "8.14.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -agent-base@^7.1.0, agent-base@^7.1.2: +agent-base@^7.1.0, agent-base@^7.1.2, agent-base@^7.1.3: version "7.1.3" resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== @@ -1173,7 +1211,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +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== @@ -1183,10 +1221,10 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@8.11.0: - version "8.11.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +ajv@8.12.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1276,11 +1314,6 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -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== - async@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/async/-/async-3.2.3.tgz" @@ -1305,12 +1338,12 @@ axios-cache-interceptor@^0.10.3: fast-defer "^1.1.7" object-code "^1.2.2" -axios-cookiejar-support@^4.0.7: - version "4.0.7" - resolved "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-4.0.7.tgz" - integrity sha512-9vpE3y/a2l2Vs2XEJE4L2z0GWnlpJ4Xj+kDaoCtrpPfS1J3oikXBrxRJX6H62/ZcelOGe+519yW7mqXCIoPXuw== +axios-cookiejar-support@^5.0.4: + version "5.0.4" + resolved "https://registry.npmjs.org/axios-cookiejar-support/-/axios-cookiejar-support-5.0.4.tgz" + integrity sha512-zhMWgT0ttt9EtMixHBT0egmCleD5XmwGAit6aJXkgP2mCNsaeAaC0615sRB4FaBugFf/YhL1O6JB3aQbj3EqeQ== dependencies: - http-cookie-agent "^5.0.4" + http-cookie-agent "^6.0.7" axios-mock-adapter@^1.20.0: version "1.20.0" @@ -1322,11 +1355,11 @@ axios-mock-adapter@^1.20.0: is-buffer "^2.0.5" axios@^1.5.1, axios@^1.6.1, "axios@>= 0.9.0", axios@>=0.20.0: - version "1.6.2" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz" - integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== + version "1.7.9" + resolved "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz" + integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -1455,7 +1488,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: +braces@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -1828,14 +1861,6 @@ commander@^8.2.0: resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -compress-brotli@^1.3.6: - version "1.3.8" - resolved "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz" - integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== - dependencies: - "@types/json-buffer" "~3.0.0" - json-buffer "~3.0.1" - compressible@~2.0.16: version "2.0.18" resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" @@ -1912,10 +1937,10 @@ cron@^2.4.3: "@types/luxon" "~3.3.0" luxon "~3.3.0" -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== +cross-spawn@^7.0.0, cross-spawn@^7.0.3, cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -1970,7 +1995,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@4: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2053,20 +2078,6 @@ 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" - dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" @@ -2151,10 +2162,10 @@ env-paths@^2.2.0: resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -epg-grabber@^0.37.2: - version "0.37.2" - resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.2.tgz" - integrity sha512-nW0LREl8pX0rEp7IMKqgbqQizvH/hqagCyv5ixwj7Pwdja7u8Kl2OpSicKr2iMt0ysO9cjqaSsWFWHHGgmVYtQ== +epg-grabber@^0.37.4: + version "0.37.4" + resolved "https://registry.npmjs.org/epg-grabber/-/epg-grabber-0.37.4.tgz" + integrity sha512-PS104bH9tHRa9kivSwx47AKMkfHwKy51XQTx+GO6sIXvIp2Z4LBpwMEXGcfPoAsdIGxgs2Wrl0dZ/QGL+7x6YQ== dependencies: axios "^1.6.1" axios-cache-interceptor "^0.10.3" @@ -2166,10 +2177,10 @@ epg-grabber@^0.37.2: epg-parser "^0.1.6" fs-extra "^11.1.1" glob "^7.1.6" - http-cookie-agent "^5.0.4" + http-cookie-agent "^6.0.8" lodash "^4.17.21" node-gzip "^1.1.2" - tough-cookie "^4.1.3" + tough-cookie "^5.0.0" winston "^3.3.3" xml-js "^1.6.11" @@ -2255,90 +2266,82 @@ eslint-config-prettier@^9.0.0: resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz" integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== -eslint-scope@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz" - integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw== +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== - dependencies: - eslint-visitor-keys "^2.0.0" - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -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.17.0, eslint@>=5, eslint@>=7.0.0: - version "8.17.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.17.0.tgz" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +"eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^8.57.0 || ^9.0.0", eslint@^9.17.0, eslint@>=7.0.0: + version "9.17.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz" + integrity sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA== dependencies: - "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" - ajv "^6.10.0" + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.9.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.17.0" + "@eslint/plugin-kit" "^0.2.3" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" + cross-spawn "^7.0.6" debug "^4.3.2" - doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.1.1" - eslint-utils "^3.0.0" - eslint-visitor-keys "^3.3.0" - espree "^9.3.2" - esquery "^1.4.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^6.0.1" - globals "^13.15.0" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - 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.1" - regexpp "^3.2.0" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" + optionator "^0.9.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== dependencies: - acorn "^8.7.1" + acorn "^8.14.0" acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^4.2.0" 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.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -2419,10 +2422,10 @@ fast-defer@^1.1.7: resolved "https://registry.npmjs.org/fast-defer/-/fast-defer-1.1.7.tgz" integrity sha512-tJ01ulDWT2WhqxMKS20nXX6wyX2iInBYpbN3GO7yjKwXMY4qvkdBRxak9IFwBLlFDESox+SwSvqMCZDfe1tqeg== -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== +fast-glob@^3.3.2: + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -2440,17 +2443,10 @@ fast-levenshtein@^2.0.6: resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= -fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - 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== + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -2480,12 +2476,12 @@ figures@^3.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== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" file-uri-to-path@1.0.0: version "1.0.0" @@ -2514,25 +2510,33 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== +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: - flatted "^3.1.0" - rimraf "^3.0.2" + locate-path "^6.0.0" + path-exists "^4.0.0" -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== fn.name@1.x.x: version "1.1.0" resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.15.0: +follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== @@ -2606,11 +2610,6 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" @@ -2657,7 +2656,7 @@ glob-parent@^5.1.2: dependencies: is-glob "^4.0.1" -glob-parent@^6.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== @@ -2716,24 +2715,10 @@ 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.15.0: - version "13.15.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz" - integrity sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog== - 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" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== got@^11.8.2: version "11.8.5" @@ -2799,12 +2784,12 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-cookie-agent@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-5.0.4.tgz" - integrity sha512-OtvikW69RvfyP6Lsequ0fN5R49S+8QcS9zwd58k6VSr6r57T8G29BkPdyrBcSwLq6ExLs9V+rBlfxu7gDstJag== +http-cookie-agent@^6.0.7, http-cookie-agent@^6.0.8: + version "6.0.8" + resolved "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.8.tgz" + integrity sha512-qnYh3yLSr2jBsTYkw11elq+T361uKAJaZ2dR4cfYZChw1dt9uL5t3zSUwehoqqVb4oldk1BpkXKm2oat8zV+oA== dependencies: - agent-base "^7.1.0" + agent-base "^7.1.3" http-proxy-agent@^7.0.0: version "7.0.2" @@ -2854,17 +2839,17 @@ ieee754@^1.1.13: resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -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== +ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immediate@~3.0.5: version "3.0.6" resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -import-fresh@^3.0.0, import-fresh@^3.2.1: +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== @@ -3502,7 +3487,7 @@ jsesc@^2.5.1: resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@~3.0.1, json-buffer@3.0.1: +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== @@ -3546,12 +3531,11 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -keyv@^4.0.0: - version "4.2.2" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.2.2.tgz" - integrity sha512-uYS0vKTlBIjNCAUqrjlxmruxOEiZxZIHXyp32sdcGmP+ukFrmWUnE//RcPXJH3Vxrni1H2gsQbjHE0bH7MtMQQ== +keyv@^4.0.0, keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: - compress-brotli "^1.3.6" json-buffer "3.0.1" kleur@^3.0.3: @@ -3636,6 +3620,13 @@ 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" @@ -3758,17 +3749,17 @@ 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: +merge2@^1.3.0: 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" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" "mime-db@>= 1.43.0 < 2", mime-db@1.52.0: @@ -4099,7 +4090,7 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -optionator@^0.9.1: +optionator@^0.9.3: version "0.9.3" resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== @@ -4150,7 +4141,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -4171,6 +4162,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-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" @@ -4276,15 +4274,10 @@ path-scurry@^1.10.1, path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== - -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== +path-to-regexp@3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz" + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== pdf-parse@^1.1.1: version "1.1.1" @@ -4387,11 +4380,6 @@ proxy-from-env@^1.1.0: resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -4400,15 +4388,10 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: version "6.0.4" @@ -4420,11 +4403,6 @@ q@^1.2.0: resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" @@ -4464,11 +4442,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -regexpp@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - registry-auth-token@3.3.2: version "3.3.2" resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz" @@ -4494,11 +4467,6 @@ require-from-string@^2.0.2: resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" @@ -4565,13 +4533,6 @@ reusify@^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-async@^2.4.0: version "2.4.1" resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" @@ -4645,27 +4606,31 @@ semver@^7.5.4: dependencies: lru-cache "^6.0.0" -serve-handler@6.1.5: - version "6.1.5" - resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz" - integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== +semver@^7.6.0: + version "7.6.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +serve-handler@6.1.6: + version "6.1.6" + resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz" + integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== dependencies: bytes "3.0.0" content-disposition "0.5.2" - fast-url-parser "1.1.3" mime-types "2.1.18" minimatch "3.1.2" path-is-inside "1.0.2" - path-to-regexp "2.2.1" + path-to-regexp "3.3.0" range-parser "1.2.0" -serve@^14.2.0: - version "14.2.0" - resolved "https://registry.npmjs.org/serve/-/serve-14.2.0.tgz" - integrity sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg== +serve@^14.2.4: + version "14.2.4" + resolved "https://registry.npmjs.org/serve/-/serve-14.2.4.tgz" + integrity sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ== dependencies: - "@zeit/schemas" "2.29.0" - ajv "8.11.0" + "@zeit/schemas" "2.36.0" + ajv "8.12.0" arg "5.0.2" boxen "7.0.0" chalk "5.0.1" @@ -4673,7 +4638,7 @@ serve@^14.2.0: clipboardy "3.0.0" compression "1.7.4" is-port-reachable "4.0.0" - serve-handler "6.1.5" + serve-handler "6.1.6" update-check "1.5.4" shebang-command@^2.0.0: @@ -4885,7 +4850,7 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: 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== @@ -4983,16 +4948,23 @@ text-hex@1.0.x: resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== -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== - through@^2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== +tldts-core@^6.1.68: + version "6.1.68" + resolved "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.68.tgz" + integrity sha512-85TdlS/DLW/gVdf2oyyzqp3ocS30WxjaL4la85EArl9cHUR/nizifKAJPziWewSZjDZS71U517/i6ciUeqtB5Q== + +tldts@^6.1.32: + version "6.1.68" + resolved "https://registry.npmjs.org/tldts/-/tldts-6.1.68.tgz" + integrity sha512-JKF17jROiYkjJPT73hUTEiTp2OBCf+kAlB+1novk8i6Q6dWjHsgEjw9VLiipV4KTJavazXhY1QUXyQFSem2T7w== + dependencies: + tldts-core "^6.1.68" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" @@ -5017,15 +4989,12 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.0.0, tough-cookie@^4.1.3, tough-cookie@>=4.0.0: - version "4.1.3" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== +"tough-cookie@^4.0.0 || ^5.0.0", tough-cookie@^5.0.0, tough-cookie@>=4.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz" + integrity sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q== dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" + tldts "^6.1.32" tr46@~0.0.3: version "0.0.3" @@ -5044,10 +5013,10 @@ triple-beam@^1.3.0: resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz" integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== -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-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== ts-jest@^29.1.1: version "29.1.1" @@ -5116,11 +5085,6 @@ type-detect@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" @@ -5131,7 +5095,7 @@ type-fest@^2.13.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6": +typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6", "typescript@>=4.8.4 <5.8.0": version "5.2.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== @@ -5155,11 +5119,6 @@ universal-user-agent@^6.0.0: resolved "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz" integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - universalify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" @@ -5195,14 +5154,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -5218,11 +5169,6 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - v8-to-istanbul@^9.0.1: version "9.1.0" resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" From 60e246080bedbff0b65673139a431081d6377af1 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 15 Dec 2024 17:32:49 +0300 Subject: [PATCH 08/64] Replace -- with --- in npm commands Resolves https://github.com/iptv-org/epg/issues/2354 Details: https://github.com/npm/cli/issues/3136 --- CONTRIBUTING.md | 4 ++-- README.md | 10 +++++----- sites/9tv.co.il/readme.md | 4 ++-- sites/abc.net.au/readme.md | 6 +++--- sites/allente.dk/readme.md | 6 +++--- sites/allente.fi/readme.md | 6 +++--- sites/allente.no/readme.md | 6 +++--- sites/allente.se/readme.md | 6 +++--- sites/andorradifusio.ad/readme.md | 4 ++-- sites/anteltv.com.uy/readme.md | 6 +++--- sites/arianaafgtv.com/readme.md | 4 ++-- sites/arianatelevision.com/readme.md | 4 ++-- sites/arirang.com/readme.md | 4 ++-- sites/artonline.tv/readme.md | 4 ++-- sites/awilime.com/readme.md | 6 +++--- sites/bein.com/readme.md | 10 +++++----- sites/beinsports.com/readme.md | 6 +++--- sites/berrymedia.co.kr/readme.md | 4 ++-- sites/cablego.com.pe/readme.md | 6 +++--- sites/cableplus.com.uy/readme.md | 6 +++--- sites/canalplus-haiti.com/readme.md | 6 +++--- sites/canalplus.com/readme.md | 6 +++--- sites/cgates.lt/readme.md | 6 +++--- sites/chaines-tv.orange.fr/readme.md | 6 +++--- sites/clickthecity.com/readme.md | 6 +++--- sites/comteco.com.bo/readme.md | 4 ++-- sites/content.astro.com.my/readme.md | 6 +++--- sites/cosmote.gr/readme.md | 6 +++--- sites/cubmu.com/readme.md | 10 +++++----- sites/dens.tv/readme.md | 6 +++--- sites/digiturk.com.tr/readme.md | 6 +++--- sites/directv.com.ar/readme.md | 4 ++-- sites/directv.com.uy/readme.md | 4 ++-- sites/directv.com/readme.md | 6 +++--- sites/dishtv.in/readme.md | 6 +++--- sites/dsmart.com.tr/readme.md | 6 +++--- sites/dstv.com/readme.md | 6 +++--- sites/elcinema.com/readme.md | 10 +++++----- sites/ena.skylifetv.co.kr/readme.md | 4 ++-- sites/energeek.cl/readme.md | 4 ++-- sites/entertainment.ie/readme.md | 6 +++--- sites/firstmedia.com/readme.md | 6 +++--- sites/flixed.io/readme.md | 4 ++-- sites/foxsports.com.au/readme.md | 6 +++--- sites/foxtel.com.au/readme.md | 6 +++--- sites/frikanalen.no/readme.md | 4 ++-- sites/gatotv.com/readme.md | 6 +++--- sites/getafteritmedia.com/readme.md | 4 ++-- sites/guida.tv/readme.md | 6 +++--- sites/guidatv.sky.it/readme.md | 6 +++--- sites/hd-plus.de/readme.md | 4 ++-- sites/horizon.tv/readme.md | 6 +++--- sites/hoy.tv/readme.md | 6 +++--- sites/i.mjh.nz/readme.md | 6 +++--- sites/i24news.tv/readme.md | 4 ++-- sites/iltalehti.fi/readme.md | 6 +++--- sites/indihometv.com/readme.md | 6 +++--- sites/ionplustv.com/readme.md | 4 ++-- sites/ipko.com/readme.md | 6 +++--- sites/kan.org.il/readme.md | 4 ++-- sites/knr.gl/readme.md | 4 ++-- sites/kplus.vn/readme.md | 6 +++--- sites/kvf.fo/readme.md | 4 ++-- sites/m.tv.sms.cz/readme.md | 6 +++--- sites/m.tving.com/readme.md | 6 +++--- sites/magticom.ge/readme.md | 6 +++--- sites/mako.co.il/readme.md | 4 ++-- sites/maxtv.hrvatskitelekom.hr/readme.md | 6 +++--- sites/maxtvgo.mk/readme.md | 6 +++--- sites/mediagenie.co.kr/readme.md | 4 ++-- sites/mediaklikk.hu/readme.md | 4 ++-- sites/mediasetinfinity.mediaset.it/readme.md | 4 ++-- sites/melita.com/readme.md | 6 +++--- sites/meo.pt/readme.md | 6 +++--- sites/meuguia.tv/readme.md | 6 +++--- sites/mewatch.sg/readme.md | 6 +++--- sites/mi.tv/readme.md | 6 +++--- sites/mncvision.id/readme.md | 10 +++++----- sites/moji.id/readme.md | 4 ++-- sites/mon-programme-tv.be/readme.md | 6 +++--- sites/movistarplus.es/readme.md | 6 +++--- sites/mtel.ba/readme.md | 6 +++--- sites/mts.rs/readme.md | 6 +++--- sites/mujtvprogram.cz/readme.md | 6 +++--- sites/musor.tv/readme.md | 6 +++--- sites/mysky.com.ph/readme.md | 6 +++--- sites/mytelly.co.uk/readme.md | 6 +++--- sites/mytvsuper.com/readme.md | 10 +++++----- sites/nhkworldpremium.com/readme.md | 6 +++--- sites/nhl.com/readme.md | 4 ++-- sites/nostv.pt/readme.md | 6 +++--- sites/novacyprus.com/readme.md | 6 +++--- sites/novasports.gr/readme.md | 6 +++--- sites/nowplayer.now.com/readme.md | 10 +++++----- sites/nuevosiglo.com.uy/readme.md | 6 +++--- sites/nzxmltv.com/readme.md | 18 +++++++++--------- sites/ontvtonight.com/readme.md | 14 +++++++------- sites/osn.com/readme.md | 10 +++++----- sites/pbsguam.org/readme.md | 4 ++-- sites/pickx.be/readme.md | 18 +++++++++--------- sites/player.ee.co.uk/readme.md | 4 ++-- sites/playtv.unifi.com.my/readme.md | 6 +++--- sites/plex.tv/readme.md | 6 +++--- sites/programacion-tv.elpais.com/readme.md | 6 +++--- sites/programacion.tcc.com.uy/readme.md | 6 +++--- sites/programetv.ro/readme.md | 6 +++--- sites/programme-tv.net/readme.md | 6 +++--- sites/programme-tv.vini.pf/readme.md | 6 +++--- sites/programme.tvb.com/readme.md | 10 +++++----- sites/programtv.onet.pl/readme.md | 6 +++--- sites/raiplay.it/raiplay.it.test.js | 2 +- sites/raiplay.it/readme.md | 4 ++-- sites/reportv.com.ar/readme.md | 6 +++--- sites/rev.bs/readme.md | 4 ++-- sites/rotana.net/readme.md | 10 +++++----- sites/rtb.gov.bn/readme.md | 4 ++-- sites/rthk.hk/readme.md | 6 +++--- sites/rtmklik.rtm.gov.my/readme.md | 4 ++-- sites/rtp.pt/readme.md | 4 ++-- sites/ruv.is/readme.md | 4 ++-- sites/s.mxtv.jp/README.md | 6 +++--- sites/sat.tv/readme.md | 10 +++++----- sites/shahid.mbc.net/readme.md | 14 +++++++------- sites/siba.com.co/readme.md | 4 ++-- sites/singtel.com/readme.md | 6 +++--- sites/sjonvarp.is/readme.md | 6 +++--- sites/sky.co.nz/readme.md | 6 +++--- sites/sky.com/readme.md | 6 +++--- sites/sky.de/readme.md | 6 +++--- sites/skylife.co.kr/readme.md | 6 +++--- sites/skyperfectv.co.jp/README.md | 6 +++--- sites/starhubtvplus.com/readme.md | 10 +++++----- sites/startimestv.com/readme.md | 6 +++--- sites/streamingtvguides.com/readme.md | 6 +++--- sites/superguidatv.it/readme.md | 6 +++--- sites/taiwanplus.com/readme.md | 4 ++-- sites/tapdmv.com/readme.md | 6 +++--- sites/telenet.tv/readme.md | 6 +++--- sites/teliatv.ee/readme.md | 14 +++++++------- sites/telkussa.fi/readme.md | 6 +++--- sites/telsu.fi/readme.md | 6 +++--- sites/tivu.tv/readme.md | 6 +++--- sites/toonamiaftermath.com/readme.md | 4 ++-- sites/turksatkablo.com.tr/readme.md | 6 +++--- sites/tv-programme.telecablesat.fr/readme.md | 6 +++--- sites/tv.blue.ch/readme.md | 6 +++--- sites/tv.cctv.com/readme.md | 4 ++-- sites/tv.dir.bg/readme.md | 6 +++--- sites/tv.lv/readme.md | 6 +++--- sites/tv.magenta.at/readme.md | 6 +++--- sites/tv.mail.ru/readme.md | 6 +++--- sites/tv.movistar.com.pe/readme.md | 6 +++--- sites/tv.nu/readme.md | 6 +++--- sites/tv.post.lu/readme.md | 6 +++--- sites/tv.trueid.net/readme.md | 10 +++++----- sites/tv.yandex.ru/readme.md | 6 +++--- sites/tv.yettel.hu/readme.md | 6 +++--- sites/tv24.co.uk/readme.md | 6 +++--- sites/tv24.se/readme.md | 6 +++--- sites/tv2go.t-2.net/readme.md | 6 +++--- sites/tva.tv/readme.md | 6 +++--- sites/tvarenasport.com/readme.md | 6 +++--- sites/tvarenasport.hr/readme.md | 6 +++--- sites/tvcesoir.fr/readme.md | 6 +++--- sites/tvcubana.icrt.cu/readme.md | 4 ++-- sites/tvgids.nl/readme.md | 6 +++--- sites/tvguide.com/readme.md | 6 +++--- sites/tvguide.myjcom.jp/readme.md | 6 +++--- sites/tvhebdo.com/readme.md | 6 +++--- sites/tvheute.at/readme.md | 6 +++--- sites/tvim.tv/readme.md | 6 +++--- sites/tvireland.ie/readme.md | 6 +++--- sites/tvmi.mt/readme.md | 4 ++-- sites/tvmusor.hu/readme.md | 6 +++--- sites/tvpassport.com/readme.md | 6 +++--- sites/tvplus.com.tr/readme.md | 6 +++--- sites/tvprofil.com/readme.md | 6 +++--- sites/tvtv.us/readme.md | 4 ++-- sites/v3.myafn.dodmedia.osd.mil/readme.md | 6 +++--- sites/vidio.com/readme.md | 6 +++--- sites/virginmediatelevision.ie/readme.md | 4 ++-- sites/virgintvgo.virginmedia.com/readme.md | 6 +++--- sites/visionplus.id/readme.md | 10 +++++----- sites/vivacom.bg/readme.md | 4 ++-- sites/vtm.be/readme.md | 4 ++-- sites/walesi.com.fj/readme.md | 6 +++--- sites/watch.sportsnet.ca/readme.md | 6 +++--- sites/watchyour.tv/readme.md | 6 +++--- sites/wavve.com/readme.md | 6 +++--- sites/web.magentatv.de/readme.md | 6 +++--- sites/webtv.delta.nl/readme.md | 6 +++--- sites/worldfishingnetwork.com/readme.md | 4 ++-- sites/www3.nhk.or.jp/readme.md | 4 ++-- sites/xumo.tv/readme.md | 6 +++--- sites/zap.co.ao/readme.md | 6 +++--- sites/ziggogo.tv/readme.md | 6 +++--- sites/znbc.co.zm/readme.md | 4 ++-- sites/zuragt.mn/readme.md | 6 +++--- tests/commands/channels/editor.test.ts | 2 +- tests/commands/channels/lint.test.ts | 2 +- tests/commands/channels/parse.test.ts | 2 +- tests/commands/channels/validate.test.ts | 4 ++-- tests/commands/epg/grab.test.ts | 14 +++++++------- 203 files changed, 607 insertions(+), 607 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 453aa443..e4210a1e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -94,7 +94,7 @@ it('can handle empty guide', () => { To run the tests you can use the following command: ```sh -npm test -- example.com +npm test --- example.com ``` Detailed documentation for the tests can be found here: https://jestjs.io/docs/using-matchers @@ -119,7 +119,7 @@ This file contains a list of channels available at the source. After creating all the files we can make sure that the guide loads correctly and has no errors using the command: ```sh -npm run grab -- --site=example.com +npm run grab --- --site=example.com ``` If the download is successful, the `guide.xml` file with the ready to use program should appear in the root directory. diff --git a/README.md b/README.md index 2578f10f..b796e47a 100644 --- a/README.md +++ b/README.md @@ -42,13 +42,13 @@ npm install To start the download of the guide, select one of the [supported sites](SITES.md) and paste its name into the command below: ```sh -npm run grab -- --site=example.com +npm run grab --- --site=example.com ``` And once the download is complete, the guide will be saved to the `guide.xml` file. ```sh -Usage: npm run grab -- [options] +Usage: npm run grab --- [options] Options: -s, --site Name of the site to parse @@ -90,7 +90,7 @@ http://:3000/guide.xml By default, the guide for each channel is downloaded one by one, but you can change this behavior by increasing the number of simultaneous requests using the `--maxConnections` attribute: ```sh -npm run grab -- --site=example.com --maxConnections=10 +npm run grab --- --site=example.com --maxConnections=10 ``` But be aware that under heavy load, some sites may start return an error or completely block your access. @@ -110,7 +110,7 @@ Create an XML file and copy the descriptions of all the channels you need from t And then specify the path to that file via the `--channels` attribute: ```sh -npm run grab -- --channels=path/to/custom.channels.xml +npm run grab --- --channels=path/to/custom.channels.xml ``` ### Run on schedule @@ -118,7 +118,7 @@ npm run grab -- --channels=path/to/custom.channels.xml If you want to download the guide automatically on a schedule, you need to pass a valid [cron expression](https://crontab.guru/) to the script using the `--cron` attribute: ```sh -npm run grab -- --site=example.com --cron="0 0 * * *" +npm run grab --- --site=example.com --cron="0 0 * * *" ``` ## Update diff --git a/sites/9tv.co.il/readme.md b/sites/9tv.co.il/readme.md index ad5dbf38..33162169 100644 --- a/sites/9tv.co.il/readme.md +++ b/sites/9tv.co.il/readme.md @@ -5,11 +5,11 @@ https://www.9tv.co.il/BroadcastSchedule ### Download the guide ```sh -npm run grab -- --site=9tv.co.il +npm run grab --- --site=9tv.co.il ``` ### Test ```sh -npm test -- 9tv.co.il +npm test ---9tv.co.il ``` diff --git a/sites/abc.net.au/readme.md b/sites/abc.net.au/readme.md index fb7a2fc8..f8248933 100644 --- a/sites/abc.net.au/readme.md +++ b/sites/abc.net.au/readme.md @@ -5,17 +5,17 @@ https://www.abc.net.au/tv/epg/ ### Download the guide ```sh -npm run grab -- --site=abc.net.au +npm run grab --- --site=abc.net.au ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/abc.net.au/abc.net.au.config.js --output=./sites/abc.net.au/abc.net.au.channels.xml +npm run channels:parse --- --config=./sites/abc.net.au/abc.net.au.config.js --output=./sites/abc.net.au/abc.net.au.channels.xml ``` ### Test ```sh -npm test -- abc.net.au +npm test ---abc.net.au ``` diff --git a/sites/allente.dk/readme.md b/sites/allente.dk/readme.md index 8ec6d429..f1b164d3 100644 --- a/sites/allente.dk/readme.md +++ b/sites/allente.dk/readme.md @@ -5,17 +5,17 @@ https://www.allente.dk/tv-guide/ ### Download the guide ```sh -npm run grab -- --site=allente.dk +npm run grab --- --site=allente.dk ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/allente.dk/allente.dk.config.js --output=./sites/allente.dk/allente.dk.channels.xml +npm run channels:parse --- --config=./sites/allente.dk/allente.dk.config.js --output=./sites/allente.dk/allente.dk.channels.xml ``` ### Test ```sh -npm test -- allente.dk +npm test ---allente.dk ``` diff --git a/sites/allente.fi/readme.md b/sites/allente.fi/readme.md index 30c45794..b494e6ae 100644 --- a/sites/allente.fi/readme.md +++ b/sites/allente.fi/readme.md @@ -5,17 +5,17 @@ https://www.allente.fi/tv-guide/ ### Download the guide ```sh -npm run grab -- --site=allente.fi +npm run grab --- --site=allente.fi ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/allente.fi/allente.fi.config.js --output=./sites/allente.fi/allente.fi.channels.xml +npm run channels:parse --- --config=./sites/allente.fi/allente.fi.config.js --output=./sites/allente.fi/allente.fi.channels.xml ``` ### Test ```sh -npm test -- allente.fi +npm test ---allente.fi ``` diff --git a/sites/allente.no/readme.md b/sites/allente.no/readme.md index 5beeacb0..1a3b6351 100644 --- a/sites/allente.no/readme.md +++ b/sites/allente.no/readme.md @@ -5,17 +5,17 @@ https://www.allente.no/tv-guide/ ### Download the guide ```sh -npm run grab -- --site=allente.no +npm run grab --- --site=allente.no ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/allente.no/allente.no.config.js --output=./sites/allente.no/allente.no.channels.xml +npm run channels:parse --- --config=./sites/allente.no/allente.no.config.js --output=./sites/allente.no/allente.no.channels.xml ``` ### Test ```sh -npm test -- allente.no +npm test ---allente.no ``` diff --git a/sites/allente.se/readme.md b/sites/allente.se/readme.md index 3f014fd3..b3c1f91c 100644 --- a/sites/allente.se/readme.md +++ b/sites/allente.se/readme.md @@ -5,17 +5,17 @@ https://www.allente.se/tv-guide/ ### Download the guide ```sh -npm run grab -- --site=allente.se +npm run grab --- --site=allente.se ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se.channels.xml +npm run channels:parse --- --config=./sites/allente.se/allente.se.config.js --output=./sites/allente.se/allente.se.channels.xml ``` ### Test ```sh -npm test -- allente.se +npm test ---allente.se ``` diff --git a/sites/andorradifusio.ad/readme.md b/sites/andorradifusio.ad/readme.md index 9abad56b..63031e11 100644 --- a/sites/andorradifusio.ad/readme.md +++ b/sites/andorradifusio.ad/readme.md @@ -5,11 +5,11 @@ https://andorradifusio.ad/programacio/atv ### Download the guide ```sh -npm run grab -- --site=andorradifusio.ad +npm run grab --- --site=andorradifusio.ad ``` ### Test ```sh -npm test -- andorradifusio.ad +npm test ---andorradifusio.ad ``` diff --git a/sites/anteltv.com.uy/readme.md b/sites/anteltv.com.uy/readme.md index 65a6dba2..94f94d68 100644 --- a/sites/anteltv.com.uy/readme.md +++ b/sites/anteltv.com.uy/readme.md @@ -5,17 +5,17 @@ https://anteltv.com.uy/envivo ### Download the guide ```sh -npm run grab -- --site=anteltv.com.uy +npm run grab --- --site=anteltv.com.uy ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/anteltv.com.uy/anteltv.com.uy.config.js --output=./sites/anteltv.com.uy/anteltv.com.uy.channels.xml +npm run channels:parse --- --config=./sites/anteltv.com.uy/anteltv.com.uy.config.js --output=./sites/anteltv.com.uy/anteltv.com.uy.channels.xml ``` ### Test ```sh -npm test -- anteltv.com.uy +npm test ---anteltv.com.uy ``` diff --git a/sites/arianaafgtv.com/readme.md b/sites/arianaafgtv.com/readme.md index 1150e0d1..2cd69b3e 100644 --- a/sites/arianaafgtv.com/readme.md +++ b/sites/arianaafgtv.com/readme.md @@ -5,11 +5,11 @@ https://arianaafgtv.com/#ariana-afghanistan-television-tv-guide ### Download the guide ```sh -npm run grab -- --site=arianaafgtv.com +npm run grab --- --site=arianaafgtv.com ``` ### Test ```sh -npm test -- arianaafgtv.com +npm test ---arianaafgtv.com ``` diff --git a/sites/arianatelevision.com/readme.md b/sites/arianatelevision.com/readme.md index c5e1bf0b..89f5aa7b 100644 --- a/sites/arianatelevision.com/readme.md +++ b/sites/arianatelevision.com/readme.md @@ -5,11 +5,11 @@ https://www.arianatelevision.com/program-schedule/ ### Download the guide ```sh -npm run grab -- --site=arianatelevision.com +npm run grab --- --site=arianatelevision.com ``` ### Test ```sh -npm test -- arianatelevision.com +npm test ---arianatelevision.com ``` diff --git a/sites/arirang.com/readme.md b/sites/arirang.com/readme.md index 0532173c..88c530ee 100644 --- a/sites/arirang.com/readme.md +++ b/sites/arirang.com/readme.md @@ -5,11 +5,11 @@ https://arirang.com/schedule ### Download the guide ```sh -npm run grab -- --site=arirang.com +npm run grab --- --site=arirang.com ``` ### Test ```sh -npm test -- arirang.com +npm test ---arirang.com ``` diff --git a/sites/artonline.tv/readme.md b/sites/artonline.tv/readme.md index f28c4ccb..367278ac 100644 --- a/sites/artonline.tv/readme.md +++ b/sites/artonline.tv/readme.md @@ -5,11 +5,11 @@ https://www.artonline.tv/guide/1 ### Download the guide ```sh -npm run grab -- --site=artonline.tv +npm run grab --- --site=artonline.tv ``` ### Test ```sh -npm test -- artonline.tv +npm test ---artonline.tv ``` diff --git a/sites/awilime.com/readme.md b/sites/awilime.com/readme.md index d28b690a..7484ca4a 100644 --- a/sites/awilime.com/readme.md +++ b/sites/awilime.com/readme.md @@ -5,17 +5,17 @@ https://www.awilime.com/tv/musor ### Download the guide ```sh -npm run grab -- --site=awilime.com +npm run grab --- --site=awilime.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/awilime.com/awilime.com.config.js --output=./sites/awilime.com/awilime.com.channels.xml +npm run channels:parse --- --config=./sites/awilime.com/awilime.com.config.js --output=./sites/awilime.com/awilime.com.channels.xml ``` ### Test ```sh -npm test -- awilime.com +npm test ---awilime.com ``` diff --git a/sites/bein.com/readme.md b/sites/bein.com/readme.md index f1696f25..c50c9f62 100644 --- a/sites/bein.com/readme.md +++ b/sites/bein.com/readme.md @@ -9,13 +9,13 @@ https://www.bein.com/en/tv-guide/ (English) Arabic: ```sh -npm run grab -- --site=bein.com --lang=ar +npm run grab --- --site=bein.com --lang=ar ``` English: ```sh -npm run grab -- --site=bein.com --lang=en +npm run grab --- --site=bein.com --lang=en ``` ### Update channel list @@ -23,17 +23,17 @@ npm run grab -- --site=bein.com --lang=en Arabic: ```sh -npm run channels:parse -- --config=./sites/bein.com/bein.com.config.js --output=./sites/bein.com/bein.com_ar.channels.xml --set=lang:ar +npm run channels:parse --- --config=./sites/bein.com/bein.com.config.js --output=./sites/bein.com/bein.com_ar.channels.xml --set=lang:ar ``` English: ```sh -npm run channels:parse -- --config=./sites/bein.com/bein.com.config.js --output=./sites/bein.com/bein.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/bein.com/bein.com.config.js --output=./sites/bein.com/bein.com_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- bein.com +npm test ---bein.com ``` diff --git a/sites/beinsports.com/readme.md b/sites/beinsports.com/readme.md index daaf1e14..da021ddc 100644 --- a/sites/beinsports.com/readme.md +++ b/sites/beinsports.com/readme.md @@ -14,17 +14,17 @@ ### Download the guide ```sh -npm run grab -- --channels=sites/beinsports.com/beinsports.com_-.channels.xml +npm run grab --- --channels=sites/beinsports.com/beinsports.com_-.channels.xml ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/beinsports.com/beinsports.com.config.js --output=./sites/beinsports.com/beinsports.com_-.channels.xml --set=region: --set=lang: +npm run channels:parse --- --config=./sites/beinsports.com/beinsports.com.config.js --output=./sites/beinsports.com/beinsports.com_-.channels.xml --set=region: --set=lang: ``` ### Test ```sh -npm test -- beinsports.com +npm test ---beinsports.com ``` diff --git a/sites/berrymedia.co.kr/readme.md b/sites/berrymedia.co.kr/readme.md index 0ebbaa16..1bad04e5 100644 --- a/sites/berrymedia.co.kr/readme.md +++ b/sites/berrymedia.co.kr/readme.md @@ -5,11 +5,11 @@ http://berrymedia.co.kr/ [Geo-blocked] ### Download the guide ```sh -npm run grab -- --site=berrymedia.co.kr +npm run grab --- --site=berrymedia.co.kr ``` ### Test ```sh -npm test -- berrymedia.co.kr +npm test ---berrymedia.co.kr ``` diff --git a/sites/cablego.com.pe/readme.md b/sites/cablego.com.pe/readme.md index 6410ca0d..721e3ef8 100644 --- a/sites/cablego.com.pe/readme.md +++ b/sites/cablego.com.pe/readme.md @@ -5,17 +5,17 @@ https://cablego.com.pe/ ### Download the guide ```sh -npm run grab -- --site=cablego.com.pe +npm run grab --- --site=cablego.com.pe ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/cablego.com.pe/cablego.com.pe.config.js --output=./sites/cablego.com.pe/cablego.com.pe.channels.xml +npm run channels:parse --- --config=./sites/cablego.com.pe/cablego.com.pe.config.js --output=./sites/cablego.com.pe/cablego.com.pe.channels.xml ``` ### Test ```sh -npm test -- cablego.com.pe +npm test ---cablego.com.pe ``` diff --git a/sites/cableplus.com.uy/readme.md b/sites/cableplus.com.uy/readme.md index 3b37138e..219e432d 100644 --- a/sites/cableplus.com.uy/readme.md +++ b/sites/cableplus.com.uy/readme.md @@ -5,17 +5,17 @@ https://cableplus.com.uy/ ### Download the guide ```sh -npm run grab -- --site=cableplus.com.uy +npm run grab --- --site=cableplus.com.uy ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/cableplus.com.uy/cableplus.com.uy.config.js --output=./sites/cableplus.com.uy/cableplus.com.uy.channels.xml +npm run channels:parse --- --config=./sites/cableplus.com.uy/cableplus.com.uy.config.js --output=./sites/cableplus.com.uy/cableplus.com.uy.channels.xml ``` ### Test ```sh -npm test -- cableplus.com.uy +npm test ---cableplus.com.uy ``` diff --git a/sites/canalplus-haiti.com/readme.md b/sites/canalplus-haiti.com/readme.md index a6b9016e..bd378f07 100644 --- a/sites/canalplus-haiti.com/readme.md +++ b/sites/canalplus-haiti.com/readme.md @@ -5,17 +5,17 @@ https://www.canalplus-haiti.com/guide-tv-maintenant ### Download the guide ```sh -npm run grab -- --site=canalplus-haiti.com +npm run grab --- --site=canalplus-haiti.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml +npm run channels:parse --- --config=./sites/canalplus-haiti.com/canalplus-haiti.com.config.js --output=./sites/canalplus-haiti.com/canalplus-haiti.com.channels.xml ``` ### Test ```sh -npm test -- canalplus-haiti.com +npm test ---canalplus-haiti.com ``` diff --git a/sites/canalplus.com/readme.md b/sites/canalplus.com/readme.md index 4796a003..56ce2500 100644 --- a/sites/canalplus.com/readme.md +++ b/sites/canalplus.com/readme.md @@ -44,17 +44,17 @@ ### Download the guide ```sh -npm run grab -- --channels=sites/canalplus.com/canalplus.com_.channels.xml +npm run grab --- --channels=sites/canalplus.com/canalplus.com_.channels.xml ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/canalplus.com/canalplus.com.config.js --output=./sites/canalplus.com/canalplus.com_.channels.xml --set=country: +npm run channels:parse --- --config=./sites/canalplus.com/canalplus.com.config.js --output=./sites/canalplus.com/canalplus.com_.channels.xml --set=country: ``` ### Test ```sh -npm test -- canalplus.com +npm test ---canalplus.com ``` diff --git a/sites/cgates.lt/readme.md b/sites/cgates.lt/readme.md index 6f4bc79f..125e5ec5 100644 --- a/sites/cgates.lt/readme.md +++ b/sites/cgates.lt/readme.md @@ -5,17 +5,17 @@ https://www.cgates.lt/televizija/tv-programa-savaitei/ ### Download the guide ```sh -npm run grab -- --site=cgates.lt +npm run grab --- --site=cgates.lt ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml +npm run channels:parse --- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml ``` ### Test ```sh -npm test -- cgates.lt +npm test ---cgates.lt ``` diff --git a/sites/chaines-tv.orange.fr/readme.md b/sites/chaines-tv.orange.fr/readme.md index b0b7b82b..4cf90bb8 100644 --- a/sites/chaines-tv.orange.fr/readme.md +++ b/sites/chaines-tv.orange.fr/readme.md @@ -5,17 +5,17 @@ https://chaines-tv.orange.fr/programme-tv ### Download the guide ```sh -npm run grab -- --site=chaines-tv.orange.fr +npm run grab --- --site=chaines-tv.orange.fr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js --output=./sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml +npm run channels:parse --- --config=./sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js --output=./sites/chaines-tv.orange.fr/chaines-tv.orange.fr.channels.xml ``` ### Test ```sh -npm test -- chaines-tv.orange.fr +npm test ---chaines-tv.orange.fr ``` diff --git a/sites/clickthecity.com/readme.md b/sites/clickthecity.com/readme.md index 33015d31..b1e940f4 100644 --- a/sites/clickthecity.com/readme.md +++ b/sites/clickthecity.com/readme.md @@ -5,17 +5,17 @@ https://www.clickthecity.com/tv/schedules/ ### Download the guide ```sh -npm run grab -- --site=clickthecity.com +npm run grab --- --site=clickthecity.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/clickthecity.com/clickthecity.com.config.js --output=./sites/clickthecity.com/clickthecity.com.channels.xml +npm run channels:parse --- --config=./sites/clickthecity.com/clickthecity.com.config.js --output=./sites/clickthecity.com/clickthecity.com.channels.xml ``` ### Test ```sh -npm test -- clickthecity.com +npm test ---clickthecity.com ``` diff --git a/sites/comteco.com.bo/readme.md b/sites/comteco.com.bo/readme.md index fd106eec..f5628581 100644 --- a/sites/comteco.com.bo/readme.md +++ b/sites/comteco.com.bo/readme.md @@ -5,11 +5,11 @@ https://www.comteco.com.bo/pages/canales-y-programacion-tv/ ### Download the guide ```sh -npm run grab -- --site=comteco.com.bo +npm run grab --- --site=comteco.com.bo ``` ### Test ```sh -npm test -- comteco.com.bo +npm test ---comteco.com.bo ``` diff --git a/sites/content.astro.com.my/readme.md b/sites/content.astro.com.my/readme.md index 9bb0d703..409d3771 100644 --- a/sites/content.astro.com.my/readme.md +++ b/sites/content.astro.com.my/readme.md @@ -5,17 +5,17 @@ https://content.astro.com.my/ ### Download the guide ```sh -npm run grab -- --site=content.astro.com.my +npm run grab --- --site=content.astro.com.my ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/content.astro.com.my/content.astro.com.my.config.js --output=./sites/content.astro.com.my/content.astro.com.my.channels.xml +npm run channels:parse --- --config=./sites/content.astro.com.my/content.astro.com.my.config.js --output=./sites/content.astro.com.my/content.astro.com.my.channels.xml ``` ### Test ```sh -npm test -- content.astro.com.my +npm test ---content.astro.com.my ``` diff --git a/sites/cosmote.gr/readme.md b/sites/cosmote.gr/readme.md index ae9a51cd..d3cfdb32 100644 --- a/sites/cosmote.gr/readme.md +++ b/sites/cosmote.gr/readme.md @@ -5,17 +5,17 @@ https://www.cosmote.gr/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=cosmote.gr +npm run grab --- --site=cosmote.gr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/cosmote.gr/cosmote.gr.config.js --output=./sites/cosmote.gr/cosmote.gr.channels.xml +npm run channels:parse --- --config=./sites/cosmote.gr/cosmote.gr.config.js --output=./sites/cosmote.gr/cosmote.gr.channels.xml ``` ### Test ```sh -npm test -- cosmote.gr +npm test ---cosmote.gr ``` diff --git a/sites/cubmu.com/readme.md b/sites/cubmu.com/readme.md index 23f07209..a2de893d 100644 --- a/sites/cubmu.com/readme.md +++ b/sites/cubmu.com/readme.md @@ -7,13 +7,13 @@ https://cubmu.com/live-tv _[Geo-restricted]_ Indonesian: ```sh -npm run grab -- --site=cubmu.com --lang=id +npm run grab --- --site=cubmu.com --lang=id ``` English: ```sh -npm run grab -- --site=cubmu.com --lang=en +npm run grab --- --site=cubmu.com --lang=en ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=cubmu.com --lang=en Indonesian: ```sh -npm run channels:parse -- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_id.channels.xml --set=lang:id +npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_id.channels.xml --set=lang:id ``` English: ```sh -npm run channels:parse -- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output=sites/cubmu.com/cubmu.com_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- cubmu.com +npm test ---cubmu.com ``` diff --git a/sites/dens.tv/readme.md b/sites/dens.tv/readme.md index 1723d7f1..0e60cde2 100644 --- a/sites/dens.tv/readme.md +++ b/sites/dens.tv/readme.md @@ -5,17 +5,17 @@ https://www.dens.tv/ ### Download the guide ```sh -npm run grab -- --site=dens.tv +npm run grab --- --site=dens.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=sites/dens.tv/dens.tv.config.js --output=sites/dens.tv/dens.tv.channels.xml +npm run channels:parse --- --config=sites/dens.tv/dens.tv.config.js --output=sites/dens.tv/dens.tv.channels.xml ``` ### Test ```sh -npm test -- dens.tv +npm test ---dens.tv ``` diff --git a/sites/digiturk.com.tr/readme.md b/sites/digiturk.com.tr/readme.md index 03c32c73..cd5dad00 100644 --- a/sites/digiturk.com.tr/readme.md +++ b/sites/digiturk.com.tr/readme.md @@ -5,17 +5,17 @@ https://www.digiturk.com.tr/yayin-akisi ### Download the guide ```sh -npm run grab -- --site=digiturk.com.tr +npm run grab --- --site=digiturk.com.tr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/digiturk.com.tr/digiturk.com.tr.config.js --output=./sites/digiturk.com.tr/digiturk.com.tr.channels.xml +npm run channels:parse --- --config=./sites/digiturk.com.tr/digiturk.com.tr.config.js --output=./sites/digiturk.com.tr/digiturk.com.tr.channels.xml ``` ### Test ```sh -npm test -- digiturk.com.tr +npm test ---digiturk.com.tr ``` diff --git a/sites/directv.com.ar/readme.md b/sites/directv.com.ar/readme.md index 6555215a..10495ab8 100644 --- a/sites/directv.com.ar/readme.md +++ b/sites/directv.com.ar/readme.md @@ -5,11 +5,11 @@ https://directv.com.ar/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=directv.com.ar +npm run grab --- --site=directv.com.ar ``` ### Test ```sh -npm test -- directv.com.ar +npm test ---directv.com.ar ``` diff --git a/sites/directv.com.uy/readme.md b/sites/directv.com.uy/readme.md index 0b2789cb..cef00722 100644 --- a/sites/directv.com.uy/readme.md +++ b/sites/directv.com.uy/readme.md @@ -5,11 +5,11 @@ https://directv.com.uy/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=directv.com.uy +npm run grab --- --site=directv.com.uy ``` ### Test ```sh -npm test -- directv.com.uy +npm test ---directv.com.uy ``` diff --git a/sites/directv.com/readme.md b/sites/directv.com/readme.md index aad8d151..0a1e944b 100644 --- a/sites/directv.com/readme.md +++ b/sites/directv.com/readme.md @@ -5,17 +5,17 @@ https://www.directv.com/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=directv.com +npm run grab --- --site=directv.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/directv.com/directv.com.config.js --output=./sites/directv.com/directv.com.channels.xml +npm run channels:parse --- --config=./sites/directv.com/directv.com.config.js --output=./sites/directv.com/directv.com.channels.xml ``` ### Test ```sh -npm test -- directv.com +npm test ---directv.com ``` diff --git a/sites/dishtv.in/readme.md b/sites/dishtv.in/readme.md index e6758083..3c88f417 100644 --- a/sites/dishtv.in/readme.md +++ b/sites/dishtv.in/readme.md @@ -5,17 +5,17 @@ https://www.dishtv.in/channelguide/ ### Download the guide ```sh -npm run grab -- --site=dishtv.in +npm run grab --- --site=dishtv.in ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/dishtv.in/dishtv.in.config.js --output=./sites/dishtv.in/dishtv.in.channels.xml +npm run channels:parse --- --config=./sites/dishtv.in/dishtv.in.config.js --output=./sites/dishtv.in/dishtv.in.channels.xml ``` ### Test ```sh -npm test -- dishtv.in +npm test ---dishtv.in ``` diff --git a/sites/dsmart.com.tr/readme.md b/sites/dsmart.com.tr/readme.md index 8882bd8c..6dfd9c6f 100644 --- a/sites/dsmart.com.tr/readme.md +++ b/sites/dsmart.com.tr/readme.md @@ -5,17 +5,17 @@ https://www.dsmart.com.tr/yayin-akisi ### Download the guide ```sh -npm run grab -- --site=dsmart.com.tr +npm run grab --- --site=dsmart.com.tr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml +npm run channels:parse --- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml ``` ### Test ```sh -npm test -- dsmart.com.tr +npm test ---dsmart.com.tr ``` diff --git a/sites/dstv.com/readme.md b/sites/dstv.com/readme.md index e4012367..d51ada73 100644 --- a/sites/dstv.com/readme.md +++ b/sites/dstv.com/readme.md @@ -54,17 +54,17 @@ ### Download the guide ```sh -npm run grab -- --channels=sites/dstv.com/dstv.com_.channels.xml +npm run grab --- --channels=sites/dstv.com/dstv.com_.channels.xml ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/dstv.com/dstv.com.config.js --output=./sites/dstv.com/dstv.com_.channels.xml --set=country: +npm run channels:parse --- --config=./sites/dstv.com/dstv.com.config.js --output=./sites/dstv.com/dstv.com_.channels.xml --set=country: ``` ### Test ```sh -npm test -- dstv.com +npm test ---dstv.com ``` diff --git a/sites/elcinema.com/readme.md b/sites/elcinema.com/readme.md index e2f030ef..48c318b2 100644 --- a/sites/elcinema.com/readme.md +++ b/sites/elcinema.com/readme.md @@ -9,13 +9,13 @@ https://elcinema.com/en/tvguide/ (English) Arabic: ```sh -npm run grab -- --site=elcinema.com --lang=ar +npm run grab --- --site=elcinema.com --lang=ar ``` English: ```sh -npm run grab -- --site=elcinema.com --lang=en +npm run grab --- --site=elcinema.com --lang=en ``` ### Update channel list @@ -23,17 +23,17 @@ npm run grab -- --site=elcinema.com --lang=en Arabic: ```sh -npm run channels:parse -- --config=./sites/elcinema.com/elcinema.com.config.js --output=./sites/elcinema.com/elcinema.com_ar.channels.xml --set=lang:ar +npm run channels:parse --- --config=./sites/elcinema.com/elcinema.com.config.js --output=./sites/elcinema.com/elcinema.com_ar.channels.xml --set=lang:ar ``` English: ```sh -npm run channels:parse -- --config=./sites/elcinema.com/elcinema.com.config.js --output=./sites/elcinema.com/elcinema.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/elcinema.com/elcinema.com.config.js --output=./sites/elcinema.com/elcinema.com_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- elcinema.com +npm test ---elcinema.com ``` diff --git a/sites/ena.skylifetv.co.kr/readme.md b/sites/ena.skylifetv.co.kr/readme.md index a4ee1f2e..5f15e6e2 100644 --- a/sites/ena.skylifetv.co.kr/readme.md +++ b/sites/ena.skylifetv.co.kr/readme.md @@ -5,11 +5,11 @@ https://ena.skylifetv.co.kr/ ### Download the guide ```sh -npm run grab -- --site=ena.skylifetv.co.kr +npm run grab --- --site=ena.skylifetv.co.kr ``` ### Test ```sh -npm test -- ena.skylifetv.co.kr +npm test ---ena.skylifetv.co.kr ``` diff --git a/sites/energeek.cl/readme.md b/sites/energeek.cl/readme.md index 7dd83ced..c6158d03 100644 --- a/sites/energeek.cl/readme.md +++ b/sites/energeek.cl/readme.md @@ -5,11 +5,11 @@ https://www.energeek.cl/programacion/ ### Download the guide ```sh -npm run grab -- --site=energeek.cl +npm run grab --- --site=energeek.cl ``` ### Test ```sh -npm test -- energeek.cl +npm test ---energeek.cl ``` diff --git a/sites/entertainment.ie/readme.md b/sites/entertainment.ie/readme.md index 1686adcf..5b4fdb93 100644 --- a/sites/entertainment.ie/readme.md +++ b/sites/entertainment.ie/readme.md @@ -5,17 +5,17 @@ https://entertainment.ie/tv/all-channels/ ### Download the guide ```sh -npm run grab -- --site=entertainment.ie +npm run grab --- --site=entertainment.ie ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/entertainment.ie/entertainment.ie.config.js --output=./sites/entertainment.ie/entertainment.ie.channels.xml +npm run channels:parse --- --config=./sites/entertainment.ie/entertainment.ie.config.js --output=./sites/entertainment.ie/entertainment.ie.channels.xml ``` ### Test ```sh -npm test -- entertainment.ie +npm test ---entertainment.ie ``` diff --git a/sites/firstmedia.com/readme.md b/sites/firstmedia.com/readme.md index 012852df..9b20063e 100644 --- a/sites/firstmedia.com/readme.md +++ b/sites/firstmedia.com/readme.md @@ -5,17 +5,17 @@ https://www.firstmedia.com/product/tv-guide ### Download the guide ```sh -npm run grab -- --site=firstmedia.com +npm run grab --- --site=firstmedia.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/firstmedia.com/firstmedia.com.config.js --output=./sites/firstmedia.com/firstmedia.com.channels.xml +npm run channels:parse --- --config=./sites/firstmedia.com/firstmedia.com.config.js --output=./sites/firstmedia.com/firstmedia.com.channels.xml ``` ### Test ```sh -npm test -- firstmedia.com +npm test ---firstmedia.com ``` diff --git a/sites/flixed.io/readme.md b/sites/flixed.io/readme.md index 42d1c997..f514b0f0 100644 --- a/sites/flixed.io/readme.md +++ b/sites/flixed.io/readme.md @@ -5,11 +5,11 @@ https://flixed.io/tv-guide ### Download the guide ```sh -npm run grab -- --site=flixed.io +npm run grab --- --site=flixed.io ``` ### Test ```sh -npm test -- flixed.io +npm test ---flixed.io ``` diff --git a/sites/foxsports.com.au/readme.md b/sites/foxsports.com.au/readme.md index a291b06b..eef7cb5c 100644 --- a/sites/foxsports.com.au/readme.md +++ b/sites/foxsports.com.au/readme.md @@ -5,17 +5,17 @@ https://www.foxsports.com.au/ ### Download the guide ```sh -npm run grab -- --site=foxsports.com.au +npm run grab --- --site=foxsports.com.au ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/foxsports.com.au/foxsports.com.au.config.js --output=./sites/foxsports.com.au/foxsports.com.au.channels.xml +npm run channels:parse --- --config=./sites/foxsports.com.au/foxsports.com.au.config.js --output=./sites/foxsports.com.au/foxsports.com.au.channels.xml ``` ### Test ```sh -npm test -- foxsports.com.au +npm test ---foxsports.com.au ``` diff --git a/sites/foxtel.com.au/readme.md b/sites/foxtel.com.au/readme.md index 58eb4de6..6bbce500 100644 --- a/sites/foxtel.com.au/readme.md +++ b/sites/foxtel.com.au/readme.md @@ -5,17 +5,17 @@ https://www.foxtel.com.au/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=foxtel.com.au +npm run grab --- --site=foxtel.com.au ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/foxtel.com.au/foxtel.com.au.config.js --output=./sites/foxtel.com.au/foxtel.com.au.channels.xml +npm run channels:parse --- --config=./sites/foxtel.com.au/foxtel.com.au.config.js --output=./sites/foxtel.com.au/foxtel.com.au.channels.xml ``` ### Test ```sh -npm test -- foxtel.com.au +npm test ---foxtel.com.au ``` diff --git a/sites/frikanalen.no/readme.md b/sites/frikanalen.no/readme.md index db488c8f..452fcc46 100644 --- a/sites/frikanalen.no/readme.md +++ b/sites/frikanalen.no/readme.md @@ -5,11 +5,11 @@ https://frikanalen.no/schedule ### Download the guide ```sh -npm run grab -- --site=frikanalen.no +npm run grab --- --site=frikanalen.no ``` ### Test ```sh -npm test -- frikanalen.no +npm test ---frikanalen.no ``` diff --git a/sites/gatotv.com/readme.md b/sites/gatotv.com/readme.md index 420e653b..87af0831 100644 --- a/sites/gatotv.com/readme.md +++ b/sites/gatotv.com/readme.md @@ -5,17 +5,17 @@ https://www.gatotv.com/guia_tv/completa ### Download the guide ```sh -npm run grab -- --site=gatotv.com +npm run grab --- --site=gatotv.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/gatotv.com/gatotv.com.config.js --output=./sites/gatotv.com/gatotv.com.channels.xml +npm run channels:parse --- --config=./sites/gatotv.com/gatotv.com.config.js --output=./sites/gatotv.com/gatotv.com.channels.xml ``` ### Test ```sh -npm test -- gatotv.com +npm test ---gatotv.com ``` diff --git a/sites/getafteritmedia.com/readme.md b/sites/getafteritmedia.com/readme.md index d18ca8c5..fdf1cb10 100644 --- a/sites/getafteritmedia.com/readme.md +++ b/sites/getafteritmedia.com/readme.md @@ -5,11 +5,11 @@ https://www.getafteritmedia.com/guia_tv/completa ### Download the guide ```sh -npm run grab -- --site=getafteritmedia.com +npm run grab --- --site=getafteritmedia.com ``` ### Test ```sh -npm test -- getafteritmedia.com +npm test ---getafteritmedia.com ``` diff --git a/sites/guida.tv/readme.md b/sites/guida.tv/readme.md index 017caa69..4c5153e6 100644 --- a/sites/guida.tv/readme.md +++ b/sites/guida.tv/readme.md @@ -5,17 +5,17 @@ https://www.guida.tv/programmi-tv/ ### Download the guide ```sh -npm run grab -- --site=guida.tv +npm run grab --- --site=guida.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/guida.tv/guida.tv.config.js --output=./sites/guida.tv/guida.tv.channels.xml +npm run channels:parse --- --config=./sites/guida.tv/guida.tv.config.js --output=./sites/guida.tv/guida.tv.channels.xml ``` ### Test ```sh -npm test -- guida.tv +npm test ---guida.tv ``` diff --git a/sites/guidatv.sky.it/readme.md b/sites/guidatv.sky.it/readme.md index 0c495cc2..dfd38cc5 100644 --- a/sites/guidatv.sky.it/readme.md +++ b/sites/guidatv.sky.it/readme.md @@ -5,17 +5,17 @@ https://guidatv.sky.it/ ### Download the guide ```sh -npm run grab -- --site=guidatv.sky.it +npm run grab --- --site=guidatv.sky.it ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/guidatv.sky.it/guidatv.sky.it.config.js --output=./sites/guidatv.sky.it/guidatv.sky.it.channels.xml +npm run channels:parse --- --config=./sites/guidatv.sky.it/guidatv.sky.it.config.js --output=./sites/guidatv.sky.it/guidatv.sky.it.channels.xml ``` ### Test ```sh -npm test -- guidatv.sky.it +npm test ---guidatv.sky.it ``` diff --git a/sites/hd-plus.de/readme.md b/sites/hd-plus.de/readme.md index 4ef27465..25ddf545 100644 --- a/sites/hd-plus.de/readme.md +++ b/sites/hd-plus.de/readme.md @@ -5,11 +5,11 @@ https://hd-plus.de/ ### Download the guide ```sh -npm run grab -- --site=hd-plus.de +npm run grab --- --site=hd-plus.de ``` ### Test ```sh -npm test -- hd-plus.de +npm test ---hd-plus.de ``` diff --git a/sites/horizon.tv/readme.md b/sites/horizon.tv/readme.md index 151bf54f..ea90d7d9 100644 --- a/sites/horizon.tv/readme.md +++ b/sites/horizon.tv/readme.md @@ -5,17 +5,17 @@ https://horizon.tv/ ### Download the guide ```sh -npm run grab -- --site=horizon.tv +npm run grab --- --site=horizon.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/horizon.tv/horizon.tv.config.js --output=./sites/horizon.tv/horizon.tv.channels.xml +npm run channels:parse --- --config=./sites/horizon.tv/horizon.tv.config.js --output=./sites/horizon.tv/horizon.tv.channels.xml ``` ### Test ```sh -npm test -- horizon.tv +npm test ---horizon.tv ``` diff --git a/sites/hoy.tv/readme.md b/sites/hoy.tv/readme.md index c9ff5943..06a890f3 100644 --- a/sites/hoy.tv/readme.md +++ b/sites/hoy.tv/readme.md @@ -5,17 +5,17 @@ https://hoy.tv/ ### Download the guide ```sh -npm run grab -- --site=hoy.tv +npm run grab --- --site=hoy.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/hoy.tv/hoy.tv.config.js --output=./sites/hoy.tv/hoy.tv.channels.xml +npm run channels:parse --- --config=./sites/hoy.tv/hoy.tv.config.js --output=./sites/hoy.tv/hoy.tv.channels.xml ``` ### Test ```sh -npm test -- hoy.tv +npm test ---hoy.tv ``` diff --git a/sites/i.mjh.nz/readme.md b/sites/i.mjh.nz/readme.md index 2535cdb8..6ed4a6e9 100644 --- a/sites/i.mjh.nz/readme.md +++ b/sites/i.mjh.nz/readme.md @@ -27,17 +27,17 @@ ### Download the guide ```sh -npm run grab -- --channels=sites/i.mjh.nz/i.mjh.nz_.channels.xml +npm run grab --- --channels=sites/i.mjh.nz/i.mjh.nz_.channels.xml ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output=./sites/i.mjh.nz/i.mjh.nz_.channels.xml --set=provider: +npm run channels:parse --- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output=./sites/i.mjh.nz/i.mjh.nz_.channels.xml --set=provider: ``` ### Test ```sh -npm test -- i.mjh.nz +npm test ---i.mjh.nz ``` diff --git a/sites/i24news.tv/readme.md b/sites/i24news.tv/readme.md index ca4181c1..e82b7160 100644 --- a/sites/i24news.tv/readme.md +++ b/sites/i24news.tv/readme.md @@ -5,11 +5,11 @@ https://www.i24news.tv/en/schedules ### Download the guide ```sh -npm run grab -- --site=i24news.tv +npm run grab --- --site=i24news.tv ``` ### Test ```sh -npm test -- i24news.tv +npm test ---i24news.tv ``` diff --git a/sites/iltalehti.fi/readme.md b/sites/iltalehti.fi/readme.md index 7a4c3185..d39e2378 100644 --- a/sites/iltalehti.fi/readme.md +++ b/sites/iltalehti.fi/readme.md @@ -5,17 +5,17 @@ https://www.iltalehti.fi/telkku/ ### Download the guide ```sh -npm run grab -- --site=iltalehti.fi +npm run grab --- --site=iltalehti.fi ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/iltalehti.fi/iltalehti.fi.config.js --output=./sites/iltalehti.fi/iltalehti.fi.channels.xml +npm run channels:parse --- --config=./sites/iltalehti.fi/iltalehti.fi.config.js --output=./sites/iltalehti.fi/iltalehti.fi.channels.xml ``` ### Test ```sh -npm test -- iltalehti.fi +npm test ---iltalehti.fi ``` diff --git a/sites/indihometv.com/readme.md b/sites/indihometv.com/readme.md index e50d9e8f..5ee5dd25 100644 --- a/sites/indihometv.com/readme.md +++ b/sites/indihometv.com/readme.md @@ -5,7 +5,7 @@ https://www.indihometv.com/ ### Download the guide ```sh -npm run grab -- --site=indihometv.com +npm run grab --- --site=indihometv.com ``` **NOTE:** Requests from some regions may return a "Connection timeout" error (https://check-host.net/check-report/13a843e2ke22). @@ -13,11 +13,11 @@ npm run grab -- --site=indihometv.com ### Update channel list ```sh -npm run channels:parse -- --config=./sites/indihometv.com/indihometv.com.config.js --output=./sites/indihometv.com/indihometv.com.channels.xml +npm run channels:parse --- --config=./sites/indihometv.com/indihometv.com.config.js --output=./sites/indihometv.com/indihometv.com.channels.xml ``` ### Test ```sh -npm test -- indihometv.com +npm test ---indihometv.com ``` diff --git a/sites/ionplustv.com/readme.md b/sites/ionplustv.com/readme.md index d20ba103..d2ed29c7 100644 --- a/sites/ionplustv.com/readme.md +++ b/sites/ionplustv.com/readme.md @@ -5,11 +5,11 @@ https://ionplustv.com/schedule ### Download the guide ```sh -npm run grab -- --site=ionplustv.com +npm run grab --- --site=ionplustv.com ``` ### Test ```sh -npm test -- ionplustv.com +npm test ---ionplustv.com ``` diff --git a/sites/ipko.com/readme.md b/sites/ipko.com/readme.md index 37e38b8e..2ec3d912 100644 --- a/sites/ipko.com/readme.md +++ b/sites/ipko.com/readme.md @@ -5,17 +5,17 @@ https://www.ipko.com/epg/ ### Download the guide ```sh -npm run grab -- --site=ipko.com +npm run grab --- --site=ipko.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/ipko.com/ipko.com.config.js --output=./sites/ipko.com/ipko.com.channels.xml +npm run channels:parse --- --config=./sites/ipko.com/ipko.com.config.js --output=./sites/ipko.com/ipko.com.channels.xml ``` ### Test ```sh -npm test -- ipko.com +npm test ---ipko.com ``` diff --git a/sites/kan.org.il/readme.md b/sites/kan.org.il/readme.md index 4e9a5f0d..4c215fb7 100644 --- a/sites/kan.org.il/readme.md +++ b/sites/kan.org.il/readme.md @@ -5,11 +5,11 @@ https://kan.org.il/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=kan.org.il +npm run grab --- --site=kan.org.il ``` ### Test ```sh -npm test -- kan.org.il +npm test ---kan.org.il ``` diff --git a/sites/knr.gl/readme.md b/sites/knr.gl/readme.md index 05ee6cdc..c8b2a9b4 100644 --- a/sites/knr.gl/readme.md +++ b/sites/knr.gl/readme.md @@ -5,11 +5,11 @@ https://knr.gl/kl/tv/aallakaatitassat ### Download the guide ```sh -npm run grab -- --site=knr.gl +npm run grab --- --site=knr.gl ``` ### Test ```sh -npm test -- knr.gl +npm test ---knr.gl ``` diff --git a/sites/kplus.vn/readme.md b/sites/kplus.vn/readme.md index 78e96796..a14c2a42 100644 --- a/sites/kplus.vn/readme.md +++ b/sites/kplus.vn/readme.md @@ -5,17 +5,17 @@ https://www.kplus.vn/highlights/broadcast-schedule ### Download the guide ```sh -npm run grab -- --site=kplus.vn +npm run grab --- --site=kplus.vn ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/kplus.vn/kplus.vn.config.js --output=./sites/kplus.vn/kplus.vn.channels.xml +npm run channels:parse --- --config=./sites/kplus.vn/kplus.vn.config.js --output=./sites/kplus.vn/kplus.vn.channels.xml ``` ### Test ```sh -npm test -- kplus.vn +npm test ---kplus.vn ``` diff --git a/sites/kvf.fo/readme.md b/sites/kvf.fo/readme.md index 15c154d3..9adabd58 100644 --- a/sites/kvf.fo/readme.md +++ b/sites/kvf.fo/readme.md @@ -5,11 +5,11 @@ https://kvf.fo/nskra/sv ### Download the guide ```sh -npm run grab -- --site=kvf.fo +npm run grab --- --site=kvf.fo ``` ### Test ```sh -npm test -- kvf.fo +npm test ---kvf.fo ``` diff --git a/sites/m.tv.sms.cz/readme.md b/sites/m.tv.sms.cz/readme.md index 668c2308..8e0ac032 100644 --- a/sites/m.tv.sms.cz/readme.md +++ b/sites/m.tv.sms.cz/readme.md @@ -5,17 +5,17 @@ https://m.tv.sms.cz/ ### Download the guide ```sh -npm run grab -- --site=m.tv.sms.cz +npm run grab --- --site=m.tv.sms.cz ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/m.tv.sms.cz/m.tv.sms.cz.config.js --output=./sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml +npm run channels:parse --- --config=./sites/m.tv.sms.cz/m.tv.sms.cz.config.js --output=./sites/m.tv.sms.cz/m.tv.sms.cz.channels.xml ``` ### Test ```sh -npm test -- m.tv.sms.cz +npm test ---m.tv.sms.cz ``` diff --git a/sites/m.tving.com/readme.md b/sites/m.tving.com/readme.md index 222c65ae..d21fb013 100644 --- a/sites/m.tving.com/readme.md +++ b/sites/m.tving.com/readme.md @@ -5,17 +5,17 @@ https://m.tving.com/guide/schedule.tving ### Download the guide ```sh -npm run grab -- --site=m.tving.com +npm run grab --- --site=m.tving.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/m.tving.com/m.tving.com.config.js --output=./sites/m.tving.com/m.tving.com.channels.xml +npm run channels:parse --- --config=./sites/m.tving.com/m.tving.com.config.js --output=./sites/m.tving.com/m.tving.com.channels.xml ``` ### Test ```sh -npm test -- m.tving.com +npm test ---m.tving.com ``` diff --git a/sites/magticom.ge/readme.md b/sites/magticom.ge/readme.md index 3e98b2c3..4c99050b 100644 --- a/sites/magticom.ge/readme.md +++ b/sites/magticom.ge/readme.md @@ -5,17 +5,17 @@ https://www.magticom.ge/ka/tv/ip-tv/tv-guide ### Download the guide ```sh -npm run grab -- --site=magticom.ge +npm run grab --- --site=magticom.ge ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml +npm run channels:parse --- --config=./sites/magticom.ge/magticom.ge.config.js --output=./sites/magticom.ge/magticom.ge.channels.xml ``` ### Test ```sh -npm test -- magticom.ge +npm test ---magticom.ge ``` diff --git a/sites/mako.co.il/readme.md b/sites/mako.co.il/readme.md index 4d8d1622..84ce5aa9 100644 --- a/sites/mako.co.il/readme.md +++ b/sites/mako.co.il/readme.md @@ -5,11 +5,11 @@ https://www.mako.co.il/tv-tv-schedule ### Download the guide ```sh -npm run grab -- --site=mako.co.il +npm run grab --- --site=mako.co.il ``` ### Test ```sh -npm test -- mako.co.il +npm test ---mako.co.il ``` diff --git a/sites/maxtv.hrvatskitelekom.hr/readme.md b/sites/maxtv.hrvatskitelekom.hr/readme.md index 97c84da2..6426d5be 100644 --- a/sites/maxtv.hrvatskitelekom.hr/readme.md +++ b/sites/maxtv.hrvatskitelekom.hr/readme.md @@ -5,17 +5,17 @@ https://maxtv.hrvatskitelekom.hr/#/epg ### Download the guide ```sh -npm run grab -- --site=maxtv.hrvatskitelekom.hr +npm run grab --- --site=maxtv.hrvatskitelekom.hr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js --output=./sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml +npm run channels:parse --- --config=./sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js --output=./sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.channels.xml ``` ### Test ```sh -npm test -- maxtv.hrvatskitelekom.hr +npm test ---maxtv.hrvatskitelekom.hr ``` diff --git a/sites/maxtvgo.mk/readme.md b/sites/maxtvgo.mk/readme.md index 5a70b28c..737b910a 100644 --- a/sites/maxtvgo.mk/readme.md +++ b/sites/maxtvgo.mk/readme.md @@ -5,17 +5,17 @@ https://maxtvgo.mk/epg ### Download the guide ```sh -npm run grab -- --site=maxtvgo.mk +npm run grab --- --site=maxtvgo.mk ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml +npm run channels:parse --- --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --output=./sites/maxtvgo.mk/maxtvgo.mk.channels.xml ``` ### Test ```sh -npm test -- maxtvgo.mk +npm test ---maxtvgo.mk ``` diff --git a/sites/mediagenie.co.kr/readme.md b/sites/mediagenie.co.kr/readme.md index 05495945..1d32add7 100644 --- a/sites/mediagenie.co.kr/readme.md +++ b/sites/mediagenie.co.kr/readme.md @@ -5,11 +5,11 @@ https://mediagenie.co.kr/ ### Download the guide ```sh -npm run grab -- --site=mediagenie.co.kr +npm run grab --- --site=mediagenie.co.kr ``` ### Test ```sh -npm test -- mediagenie.co.kr +npm test ---mediagenie.co.kr ``` diff --git a/sites/mediaklikk.hu/readme.md b/sites/mediaklikk.hu/readme.md index 7b518c8b..30abba42 100644 --- a/sites/mediaklikk.hu/readme.md +++ b/sites/mediaklikk.hu/readme.md @@ -5,11 +5,11 @@ https://mediaklikk.hu/ ### Download the guide ```sh -npm run grab -- --site=mediaklikk.hu +npm run grab --- --site=mediaklikk.hu ``` ### Test ```sh -npm test -- mediaklikk.hu +npm test ---mediaklikk.hu ``` diff --git a/sites/mediasetinfinity.mediaset.it/readme.md b/sites/mediasetinfinity.mediaset.it/readme.md index c308c3a1..dd7e5b35 100644 --- a/sites/mediasetinfinity.mediaset.it/readme.md +++ b/sites/mediasetinfinity.mediaset.it/readme.md @@ -5,11 +5,11 @@ https://mediasetinfinity.mediaset.it/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=mediasetinfinity.mediaset.it +npm run grab --- --site=mediasetinfinity.mediaset.it ``` ### Test ```sh -npm test -- mediasetinfinity.mediaset.it +npm test ---mediasetinfinity.mediaset.it ``` diff --git a/sites/melita.com/readme.md b/sites/melita.com/readme.md index a02ebef5..e4f51965 100644 --- a/sites/melita.com/readme.md +++ b/sites/melita.com/readme.md @@ -5,17 +5,17 @@ https://www.melita.com/tv-schedule/ ### Download the guide ```sh -npm run grab -- --site=melita.com +npm run grab --- --site=melita.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/melita.com/melita.com.config.js --output=./sites/melita.com/melita.com.channels.xml +npm run channels:parse --- --config=./sites/melita.com/melita.com.config.js --output=./sites/melita.com/melita.com.channels.xml ``` ### Test ```sh -npm test -- melita.com +npm test ---melita.com ``` diff --git a/sites/meo.pt/readme.md b/sites/meo.pt/readme.md index 5d420600..4b252007 100644 --- a/sites/meo.pt/readme.md +++ b/sites/meo.pt/readme.md @@ -5,17 +5,17 @@ https://www.meo.pt/tv/canais-programacao/guia-tv ### Download the guide ```sh -npm run grab -- --site=meo.pt +npm run grab --- --site=meo.pt ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/meo.pt/meo.pt.config.js --output=./sites/meo.pt/meo.pt.channels.xml +npm run channels:parse --- --config=./sites/meo.pt/meo.pt.config.js --output=./sites/meo.pt/meo.pt.channels.xml ``` ### Test ```sh -npm test -- meo.pt +npm test ---meo.pt ``` diff --git a/sites/meuguia.tv/readme.md b/sites/meuguia.tv/readme.md index 01b565c3..d94d974f 100644 --- a/sites/meuguia.tv/readme.md +++ b/sites/meuguia.tv/readme.md @@ -5,17 +5,17 @@ https://meuguia.tv/ ### Download the guide ```sh -npm run grab -- --site=meuguia.tv +npm run grab --- --site=meuguia.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/meuguia.tv/meuguia.tv.config.js --output=./sites/meuguia.tv/meuguia.tv.channels.xml +npm run channels:parse --- --config=./sites/meuguia.tv/meuguia.tv.config.js --output=./sites/meuguia.tv/meuguia.tv.channels.xml ``` ### Test ```sh -npm test -- meuguia.tv +npm test ---meuguia.tv ``` diff --git a/sites/mewatch.sg/readme.md b/sites/mewatch.sg/readme.md index 96e2f537..3e263779 100644 --- a/sites/mewatch.sg/readme.md +++ b/sites/mewatch.sg/readme.md @@ -5,17 +5,17 @@ https://www.mewatch.sg/channel-guide ### Download the guide ```sh -npm run grab -- --site=mewatch.sg +npm run grab --- --site=mewatch.sg ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mewatch.sg/mewatch.sg.config.js --output=./sites/mewatch.sg/mewatch.sg.channels.xml +npm run channels:parse --- --config=./sites/mewatch.sg/mewatch.sg.config.js --output=./sites/mewatch.sg/mewatch.sg.channels.xml ``` ### Test ```sh -npm test -- mewatch.sg +npm test ---mewatch.sg ``` diff --git a/sites/mi.tv/readme.md b/sites/mi.tv/readme.md index e86cfaf4..8547e387 100644 --- a/sites/mi.tv/readme.md +++ b/sites/mi.tv/readme.md @@ -16,17 +16,17 @@ ### Download the guide ```sh -npm run grab -- --channels=sites/mi.tv/mi.tv_.channels.xml +npm run grab --- --channels=sites/mi.tv/mi.tv_.channels.xml ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mi.tv/mi.tv.config.js --output=./sites/mi.tv/mi.tv_.channels.xml --set=country: +npm run channels:parse --- --config=./sites/mi.tv/mi.tv.config.js --output=./sites/mi.tv/mi.tv_.channels.xml --set=country: ``` ### Test ```sh -npm test -- mi.tv +npm test ---mi.tv ``` diff --git a/sites/mncvision.id/readme.md b/sites/mncvision.id/readme.md index bee9dc42..277f1f4f 100644 --- a/sites/mncvision.id/readme.md +++ b/sites/mncvision.id/readme.md @@ -7,13 +7,13 @@ https://www.mncvision.id/schedule/table Indonesian: ```sh -npm run grab -- --site=mncvision.id --lang=id +npm run grab --- --site=mncvision.id --lang=id ``` English: ```sh -npm run grab -- --site=mncvision.id --lang=en +npm run grab --- --site=mncvision.id --lang=en ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=mncvision.id --lang=en Indonesian: ```sh -npm run channels:parse -- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id_id.channels.xml --set=lang:id +npm run channels:parse --- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id_id.channels.xml --set=lang:id ``` English: ```sh -npm run channels:parse -- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/mncvision.id/mncvision.id.config.js --output=./sites/mncvision.id/mncvision.id_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- mncvision.id +npm test ---mncvision.id ``` diff --git a/sites/moji.id/readme.md b/sites/moji.id/readme.md index 8ee885fd..90587e4c 100644 --- a/sites/moji.id/readme.md +++ b/sites/moji.id/readme.md @@ -5,11 +5,11 @@ https://moji.id/schedule ### Download the guide ```sh -npm run grab -- --site=moji.id +npm run grab --- --site=moji.id ``` ### Test ```sh -npm test -- moji.id +npm test ---moji.id ``` diff --git a/sites/mon-programme-tv.be/readme.md b/sites/mon-programme-tv.be/readme.md index 7911c900..5659e3c4 100644 --- a/sites/mon-programme-tv.be/readme.md +++ b/sites/mon-programme-tv.be/readme.md @@ -5,17 +5,17 @@ https://www.mon-programme-tv.be/mon-programme-television.html ### Download the guide ```sh -npm run grab -- --site=mon-programme-tv.be +npm run grab --- --site=mon-programme-tv.be ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mon-programme-tv.be/mon-programme-tv.be.config.js --output=./sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml +npm run channels:parse --- --config=./sites/mon-programme-tv.be/mon-programme-tv.be.config.js --output=./sites/mon-programme-tv.be/mon-programme-tv.be.channels.xml ``` ### Test ```sh -npm test -- mon-programme-tv.be +npm test ---mon-programme-tv.be ``` diff --git a/sites/movistarplus.es/readme.md b/sites/movistarplus.es/readme.md index 4a5536ce..1df07153 100644 --- a/sites/movistarplus.es/readme.md +++ b/sites/movistarplus.es/readme.md @@ -5,17 +5,17 @@ https://www.movistarplus.es/programacion-tv ### Download the guide ```sh -npm run grab -- --site=movistarplus.es +npm run grab --- --site=movistarplus.es ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/movistarplus.es/movistarplus.es.config.js --output=./sites/movistarplus.es/movistarplus.es.channels.xml +npm run channels:parse --- --config=./sites/movistarplus.es/movistarplus.es.config.js --output=./sites/movistarplus.es/movistarplus.es.channels.xml ``` ### Test ```sh -npm test -- movistarplus.es +npm test ---movistarplus.es ``` diff --git a/sites/mtel.ba/readme.md b/sites/mtel.ba/readme.md index 4e97acc3..1338bc2f 100644 --- a/sites/mtel.ba/readme.md +++ b/sites/mtel.ba/readme.md @@ -5,17 +5,17 @@ https://mtel.ba/Televizija/TV-ponuda/TV-vodic ### Download the guide ```sh -npm run grab -- --site=mtel.ba +npm run grab --- --site=mtel.ba ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mtel.ba/mtel.ba.config.js --output=./sites/mtel.ba/mtel.ba.channels.xml +npm run channels:parse --- --config=./sites/mtel.ba/mtel.ba.config.js --output=./sites/mtel.ba/mtel.ba.channels.xml ``` ### Test ```sh -npm test -- mtel.ba +npm test ---mtel.ba ``` diff --git a/sites/mts.rs/readme.md b/sites/mts.rs/readme.md index 7bc4a91d..54d17e86 100644 --- a/sites/mts.rs/readme.md +++ b/sites/mts.rs/readme.md @@ -5,17 +5,17 @@ https://mts.rs/tv-vodic/epg ### Download the guide ```sh -npm run grab -- --site=mts.rs +npm run grab --- --site=mts.rs ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mts.rs/mts.rs.config.js --output=./sites/mts.rs/mts.rs.channels.xml +npm run channels:parse --- --config=./sites/mts.rs/mts.rs.config.js --output=./sites/mts.rs/mts.rs.channels.xml ``` ### Test ```sh -npm test -- mts.rs +npm test ---mts.rs ``` diff --git a/sites/mujtvprogram.cz/readme.md b/sites/mujtvprogram.cz/readme.md index c91f2a15..385bff6a 100644 --- a/sites/mujtvprogram.cz/readme.md +++ b/sites/mujtvprogram.cz/readme.md @@ -5,17 +5,17 @@ https://www.mujtvprogram.cz/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=mujtvprogram.cz +npm run grab --- --site=mujtvprogram.cz ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mujtvprogram.cz/mujtvprogram.cz.config.js --output=./sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml +npm run channels:parse --- --config=./sites/mujtvprogram.cz/mujtvprogram.cz.config.js --output=./sites/mujtvprogram.cz/mujtvprogram.cz.channels.xml ``` ### Test ```sh -npm test -- mujtvprogram.cz +npm test ---mujtvprogram.cz ``` diff --git a/sites/musor.tv/readme.md b/sites/musor.tv/readme.md index 588303c9..902fdb33 100644 --- a/sites/musor.tv/readme.md +++ b/sites/musor.tv/readme.md @@ -5,17 +5,17 @@ https://musor.tv/ ### Download the guide ```sh -npm run grab -- --site=musor.tv +npm run grab --- --site=musor.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/musor.tv/musor.tv.config.js --output=./sites/musor.tv/musor.tv.channels.xml +npm run channels:parse --- --config=./sites/musor.tv/musor.tv.config.js --output=./sites/musor.tv/musor.tv.channels.xml ``` ### Test ```sh -npm test -- musor.tv +npm test ---musor.tv ``` diff --git a/sites/mysky.com.ph/readme.md b/sites/mysky.com.ph/readme.md index 19c591ee..285c2646 100644 --- a/sites/mysky.com.ph/readme.md +++ b/sites/mysky.com.ph/readme.md @@ -5,17 +5,17 @@ https://www.mysky.com.ph/metromanila/tv-schedules ### Download the guide ```sh -npm run grab -- --site=mysky.com.ph +npm run grab --- --site=mysky.com.ph ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mysky.com.ph/mysky.com.ph.config.js --output=./sites/mysky.com.ph/mysky.com.ph.channels.xml +npm run channels:parse --- --config=./sites/mysky.com.ph/mysky.com.ph.config.js --output=./sites/mysky.com.ph/mysky.com.ph.channels.xml ``` ### Test ```sh -npm test -- mysky.com.ph +npm test ---mysky.com.ph ``` diff --git a/sites/mytelly.co.uk/readme.md b/sites/mytelly.co.uk/readme.md index 9e5aad2e..56221fe9 100644 --- a/sites/mytelly.co.uk/readme.md +++ b/sites/mytelly.co.uk/readme.md @@ -5,17 +5,17 @@ https://www.mytelly.co.uk/tv-guide/listings/tv-tonight.html ### Download the guide ```sh -npm run grab -- --site=mytelly.co.uk +npm run grab --- --site=mytelly.co.uk ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/mytelly.co.uk/mytelly.co.uk.config.js --output=./sites/mytelly.co.uk/mytelly.co.uk.channels.xml +npm run channels:parse --- --config=./sites/mytelly.co.uk/mytelly.co.uk.config.js --output=./sites/mytelly.co.uk/mytelly.co.uk.channels.xml ``` ### Test ```sh -npm test -- mytelly.co.uk +npm test ---mytelly.co.uk ``` diff --git a/sites/mytvsuper.com/readme.md b/sites/mytvsuper.com/readme.md index fc6e0dc0..f5b8e618 100644 --- a/sites/mytvsuper.com/readme.md +++ b/sites/mytvsuper.com/readme.md @@ -9,13 +9,13 @@ https://www.mytvsuper.com/en/epg/ (English) Chinese: ```sh -npm run grab -- --site=mytvsuper.com --lang=zh +npm run grab --- --site=mytvsuper.com --lang=zh ``` English: ```sh -npm run grab -- --site=mytvsuper.com --lang=en +npm run grab --- --site=mytvsuper.com --lang=en ``` ### Update channel list @@ -23,17 +23,17 @@ npm run grab -- --site=mytvsuper.com --lang=en Chinese: ```sh -npm run channels:parse -- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com_zh.channels.xml --set=lang:zh +npm run channels:parse --- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com_zh.channels.xml --set=lang:zh ``` English: ```sh -npm run channels:parse -- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/mytvsuper.com/mytvsuper.com.config.js --output=./sites/mytvsuper.com/mytvsuper.com_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- mytvsuper.com +npm test ---mytvsuper.com ``` diff --git a/sites/nhkworldpremium.com/readme.md b/sites/nhkworldpremium.com/readme.md index 7d7c282d..f398398e 100644 --- a/sites/nhkworldpremium.com/readme.md +++ b/sites/nhkworldpremium.com/readme.md @@ -9,17 +9,17 @@ https://nhkworldpremium.com/ja/schedules (Japanese) English: ```sh -npm run grab -- --site=nhkworldpremium.com --lang=en +npm run grab --- --site=nhkworldpremium.com --lang=en ``` Japanese: ```sh -npm run grab -- --site=nhkworldpremium.com --lang=ja +npm run grab --- --site=nhkworldpremium.com --lang=ja ``` ### Test ```sh -npm test -- nhkworldpremium.com +npm test ---nhkworldpremium.com ``` diff --git a/sites/nhl.com/readme.md b/sites/nhl.com/readme.md index 562599a0..df92f852 100644 --- a/sites/nhl.com/readme.md +++ b/sites/nhl.com/readme.md @@ -5,11 +5,11 @@ https://www.nhl.com/nhl-network/programming-schedule ### Download the guide ```sh -npm run grab -- --site=nhl.com +npm run grab --- --site=nhl.com ``` ### Test ```sh -npm test -- nhl.com +npm test ---nhl.com ``` diff --git a/sites/nostv.pt/readme.md b/sites/nostv.pt/readme.md index d3f21b7d..aebf7bee 100644 --- a/sites/nostv.pt/readme.md +++ b/sites/nostv.pt/readme.md @@ -5,17 +5,17 @@ https://nostv.pt/guia/ ### Download the guide ```sh -npm run grab -- --site=nostv.pt +npm run grab --- --site=nostv.pt ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/nostv.pt/nostv.pt.config.js --output=./sites/nostv.pt/nostv.pt.channels.xml +npm run channels:parse --- --config=./sites/nostv.pt/nostv.pt.config.js --output=./sites/nostv.pt/nostv.pt.channels.xml ``` ### Test ```sh -npm test -- nostv.pt +npm test ---nostv.pt ``` diff --git a/sites/novacyprus.com/readme.md b/sites/novacyprus.com/readme.md index 9855b6a8..afbdd748 100644 --- a/sites/novacyprus.com/readme.md +++ b/sites/novacyprus.com/readme.md @@ -5,17 +5,17 @@ https://www.novacyprus.com/en/node/32742 ### Download the guide ```sh -npm run grab -- --site=novacyprus.com +npm run grab --- --site=novacyprus.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml +npm run channels:parse --- --config=./sites/novacyprus.com/novacyprus.com.config.js --output=./sites/novacyprus.com/novacyprus.com.channels.xml ``` ### Test ```sh -npm test -- novacyprus.com +npm test ---novacyprus.com ``` diff --git a/sites/novasports.gr/readme.md b/sites/novasports.gr/readme.md index b0f8e3f6..31e4357c 100644 --- a/sites/novasports.gr/readme.md +++ b/sites/novasports.gr/readme.md @@ -5,17 +5,17 @@ https://www.novasports.gr/tv-program/ ### Download the guide ```sh -npm run grab -- --site=novasports.gr +npm run grab --- --site=novasports.gr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/novasports.gr/novasports.gr.config.js --output=./sites/novasports.gr/novasports.gr.channels.xml +npm run channels:parse --- --config=./sites/novasports.gr/novasports.gr.config.js --output=./sites/novasports.gr/novasports.gr.channels.xml ``` ### Test ```sh -npm test -- novasports.gr +npm test ---novasports.gr ``` diff --git a/sites/nowplayer.now.com/readme.md b/sites/nowplayer.now.com/readme.md index e41e511f..2328de77 100644 --- a/sites/nowplayer.now.com/readme.md +++ b/sites/nowplayer.now.com/readme.md @@ -7,13 +7,13 @@ https://nowplayer.now.com/tvguide Chinese: ```sh -npm run grab -- --site=nowplayer.now.com --lang=zh +npm run grab --- --site=nowplayer.now.com --lang=zh ``` English: ```sh -npm run grab -- --site=nowplayer.now.com --lang=en +npm run grab --- --site=nowplayer.now.com --lang=en ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=nowplayer.now.com --lang=en Chinese: ```sh -npm run channels:parse -- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml --set=lang:zh +npm run channels:parse --- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com_zh.channels.xml --set=lang:zh ``` English: ```sh -npm run channels:parse -- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/nowplayer.now.com/nowplayer.now.com.config.js --output=./sites/nowplayer.now.com/nowplayer.now.com_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- nowplayer.now.com +npm test ---nowplayer.now.com ``` diff --git a/sites/nuevosiglo.com.uy/readme.md b/sites/nuevosiglo.com.uy/readme.md index 7ecacaa0..9935101e 100644 --- a/sites/nuevosiglo.com.uy/readme.md +++ b/sites/nuevosiglo.com.uy/readme.md @@ -5,17 +5,17 @@ https://nuevosiglo.com.uy/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=nuevosiglo.com.uy +npm run grab --- --site=nuevosiglo.com.uy ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --output=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml +npm run channels:parse --- --config=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js --output=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy.channels.xml ``` ### Test ```sh -npm test -- nuevosiglo.com.uy +npm test ---nuevosiglo.com.uy ``` diff --git a/sites/nzxmltv.com/readme.md b/sites/nzxmltv.com/readme.md index 25f48b41..b72ecb0b 100644 --- a/sites/nzxmltv.com/readme.md +++ b/sites/nzxmltv.com/readme.md @@ -7,25 +7,25 @@ https://nzxmltv.com/ Freeview: ```sh -npm run grab -- --channels=sites/nzxmltv.com/nzxmltv.com_freeview.channels.xml +npm run grab --- --channels=sites/nzxmltv.com/nzxmltv.com_freeview.channels.xml ``` Sky: ```sh -npm run grab -- --channels=sites/nzxmltv.com/nzxmltv.com_sky.channels.xml +npm run grab --- --channels=sites/nzxmltv.com/nzxmltv.com_sky.channels.xml ``` Red Bull TV: ```sh -npm run grab -- --channels=sites/nzxmltv.com/nzxmltv.com_redbull.channels.xml +npm run grab --- --channels=sites/nzxmltv.com/nzxmltv.com_redbull.channels.xml ``` Pluto TV: ```sh -npm run grab -- --channels=sites/nzxmltv.com/nzxmltv.com_pluto.channels.xml +npm run grab --- --channels=sites/nzxmltv.com/nzxmltv.com_pluto.channels.xml ``` ### Update channel list @@ -33,29 +33,29 @@ npm run grab -- --channels=sites/nzxmltv.com/nzxmltv.com_pluto.channels.xml Freeview: ```sh -npm run channels:parse -- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_freeview.channels.xml --set=provider:freeview +npm run channels:parse --- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_freeview.channels.xml --set=provider:freeview ``` Sky: ```sh -npm run channels:parse -- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_sky.channels.xml --set=provider:sky +npm run channels:parse --- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_sky.channels.xml --set=provider:sky ``` Red Bull TV: ```sh -npm run channels:parse -- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_redbull.channels.xml --set=provider:redbull +npm run channels:parse --- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_redbull.channels.xml --set=provider:redbull ``` Pluto TV: ```sh -npm run channels:parse -- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_pluto.channels.xml --set=provider:pluto +npm run channels:parse --- --config=./sites/nzxmltv.com/nzxmltv.com.config.js --output=./sites/nzxmltv.com/nzxmltv.com_pluto.channels.xml --set=provider:pluto ``` ### Test ```sh -npm test -- nzxmltv.com +npm test ---nzxmltv.com ``` diff --git a/sites/ontvtonight.com/readme.md b/sites/ontvtonight.com/readme.md index 25a36401..d25f28cb 100644 --- a/sites/ontvtonight.com/readme.md +++ b/sites/ontvtonight.com/readme.md @@ -11,19 +11,19 @@ https://www.ontvtonight.com/guide/ (US) Australia: ```sh -npm run grab -- --channels=sites/ontvtonight.com/ontvtonight.com_au.channels.xml +npm run grab --- --channels=sites/ontvtonight.com/ontvtonight.com_au.channels.xml ``` Canada: ```sh -npm run grab -- --channels=sites/ontvtonight.com/ontvtonight.com_ca.channels.xml +npm run grab --- --channels=sites/ontvtonight.com/ontvtonight.com_ca.channels.xml ``` US: ```sh -npm run grab -- --channels=sites/ontvtonight.com/ontvtonight.com_us.channels.xml +npm run grab --- --channels=sites/ontvtonight.com/ontvtonight.com_us.channels.xml ``` ### Update channel list @@ -31,23 +31,23 @@ npm run grab -- --channels=sites/ontvtonight.com/ontvtonight.com_us.channels.xml Australia: ```sh -npm run channels:parse -- --config=./sites/ontvtonight.com/ontvtonight.com.config.js --output=./sites/ontvtonight.com/ontvtonight.com_au.channels.xml --set=country:au +npm run channels:parse --- --config=./sites/ontvtonight.com/ontvtonight.com.config.js --output=./sites/ontvtonight.com/ontvtonight.com_au.channels.xml --set=country:au ``` Canada: ```sh -npm run channels:parse -- --config=./sites/ontvtonight.com/ontvtonight.com.config.js --output=./sites/ontvtonight.com/ontvtonight.com_ca.channels.xml --set=country:ca +npm run channels:parse --- --config=./sites/ontvtonight.com/ontvtonight.com.config.js --output=./sites/ontvtonight.com/ontvtonight.com_ca.channels.xml --set=country:ca ``` US: ```sh -npm run channels:parse -- --config=./sites/ontvtonight.com/ontvtonight.com.config.js --output=./sites/ontvtonight.com/ontvtonight.com_us.channels.xml --set=country:us +npm run channels:parse --- --config=./sites/ontvtonight.com/ontvtonight.com.config.js --output=./sites/ontvtonight.com/ontvtonight.com_us.channels.xml --set=country:us ``` ### Test ```sh -npm test -- ontvtonight.com +npm test ---ontvtonight.com ``` diff --git a/sites/osn.com/readme.md b/sites/osn.com/readme.md index 2e1d5752..e823ec41 100644 --- a/sites/osn.com/readme.md +++ b/sites/osn.com/readme.md @@ -7,13 +7,13 @@ https://osn.com/ _[Geo-blocked]_ Arabic: ```sh -npm run grab -- --site=osn.com --lang=ar +npm run grab --- --site=osn.com --lang=ar ``` English: ```sh -npm run grab -- --site=osn.com --lang=en +npm run grab --- --site=osn.com --lang=en ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=osn.com --lang=en Arabic: ```sh -npm run channels:parse -- --config=./sites/osn.com/osn.com.config.js --output=./sites/osn.com/osn.com_ar.channels.xml --set=lang:ar +npm run channels:parse --- --config=./sites/osn.com/osn.com.config.js --output=./sites/osn.com/osn.com_ar.channels.xml --set=lang:ar ``` English: ```sh -npm run channels:parse -- --config=./sites/osn.com/osn.com.config.js --output=./sites/osn.com/osn.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/osn.com/osn.com.config.js --output=./sites/osn.com/osn.com_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- osn.com +npm test ---osn.com ``` diff --git a/sites/pbsguam.org/readme.md b/sites/pbsguam.org/readme.md index 5bb0aff9..6e24c0b3 100644 --- a/sites/pbsguam.org/readme.md +++ b/sites/pbsguam.org/readme.md @@ -5,7 +5,7 @@ https://pbsguam.org/calendar/ ### Download the guide ```sh -npm run grab -- --site=pbsguam.org +npm run grab --- --site=pbsguam.org ``` **NOTE:** The program is only available Thursday through Sunday. @@ -13,5 +13,5 @@ npm run grab -- --site=pbsguam.org ### Test ```sh -npm test -- pbsguam.org +npm test ---pbsguam.org ``` diff --git a/sites/pickx.be/readme.md b/sites/pickx.be/readme.md index 9c9077ef..dea5a1f3 100644 --- a/sites/pickx.be/readme.md +++ b/sites/pickx.be/readme.md @@ -7,25 +7,25 @@ https://www.pickx.be/fr/television/programme-tv Dutch: ```sh -npm run grab -- --site=pickx.be --lang=nl +npm run grab --- --site=pickx.be --lang=nl ``` English: ```sh -npm run grab -- --site=pickx.be --lang=en +npm run grab --- --site=pickx.be --lang=en ``` French: ```sh -npm run grab -- --site=pickx.be --lang=fr +npm run grab --- --site=pickx.be --lang=fr ``` German: ```sh -npm run grab -- --site=pickx.be --lang=de +npm run grab --- --site=pickx.be --lang=de ``` ### Update channel list @@ -33,29 +33,29 @@ npm run grab -- --site=pickx.be --lang=de Dutch: ```sh -npm run channels:parse -- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_nl.channels.xml --set=lang:nl +npm run channels:parse --- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_nl.channels.xml --set=lang:nl ``` English: ```sh -npm run channels:parse -- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_en.channels.xml --set=lang:en ``` French: ```sh -npm run channels:parse -- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_fr.channels.xml --set=lang:fr +npm run channels:parse --- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_fr.channels.xml --set=lang:fr ``` German: ```sh -npm run channels:parse -- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_de.channels.xml --set=lang:de +npm run channels:parse --- --config=./sites/pickx.be/pickx.be.config.js --output=./sites/pickx.be/pickx.be_de.channels.xml --set=lang:de ``` ### Test ```sh -npm test -- pickx.be +npm test ---pickx.be ``` diff --git a/sites/player.ee.co.uk/readme.md b/sites/player.ee.co.uk/readme.md index 155d5ada..52e24ed2 100644 --- a/sites/player.ee.co.uk/readme.md +++ b/sites/player.ee.co.uk/readme.md @@ -5,11 +5,11 @@ https://player.ee.co.uk/#/livetv/schedule ### Download the guide ```sh -npm run grab -- --site=player.ee.co.uk +npm run grab --- --site=player.ee.co.uk ``` ### Test ```sh -npm test -- player.ee.co.uk +npm test ---player.ee.co.uk ``` diff --git a/sites/playtv.unifi.com.my/readme.md b/sites/playtv.unifi.com.my/readme.md index 765745a9..2e894cd2 100644 --- a/sites/playtv.unifi.com.my/readme.md +++ b/sites/playtv.unifi.com.my/readme.md @@ -5,17 +5,17 @@ https://playtv.unifi.com.my/EPG/WEBTV/index.html#/tvguide ### Download the guide ```sh -npm run grab -- --site=playtv.unifi.com.my +npm run grab --- --site=playtv.unifi.com.my ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/playtv.unifi.com.my/playtv.unifi.com.my.config.js --output=./sites/playtv.unifi.com.my/playtv.unifi.com.my.channels.xml +npm run channels:parse --- --config=./sites/playtv.unifi.com.my/playtv.unifi.com.my.config.js --output=./sites/playtv.unifi.com.my/playtv.unifi.com.my.channels.xml ``` ### Test ```sh -npm test -- playtv.unifi.com.my +npm test ---playtv.unifi.com.my ``` diff --git a/sites/plex.tv/readme.md b/sites/plex.tv/readme.md index fa0bfc26..6891a0e2 100644 --- a/sites/plex.tv/readme.md +++ b/sites/plex.tv/readme.md @@ -5,13 +5,13 @@ https://watch.plex.tv/live-tv ### Download the guide ```sh -npm run grab -- --site=plex.tv +npm run grab --- --site=plex.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/plex.tv/plex.tv.config.js --output=./sites/plex.tv/plex.tv.channels.xml --set=token:YOUR_PLEX_TOKEN +npm run channels:parse --- --config=./sites/plex.tv/plex.tv.config.js --output=./sites/plex.tv/plex.tv.channels.xml --set=token:YOUR_PLEX_TOKEN ``` Where to get the Plex Token? https://www.plexopedia.com/plex-media-server/general/plex-token/ @@ -19,5 +19,5 @@ Where to get the Plex Token? https://www.plexopedia.com/plex-media-server/genera ### Test ```sh -npm test -- plex.tv +npm test ---plex.tv ``` diff --git a/sites/programacion-tv.elpais.com/readme.md b/sites/programacion-tv.elpais.com/readme.md index 5f605d40..00e9d2f1 100644 --- a/sites/programacion-tv.elpais.com/readme.md +++ b/sites/programacion-tv.elpais.com/readme.md @@ -5,17 +5,17 @@ https://programacion-tv.elpais.com/ ### Download the guide ```sh -npm run grab -- --site=programacion-tv.elpais.com +npm run grab --- --site=programacion-tv.elpais.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --output=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml +npm run channels:parse --- --config=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.config.js --output=./sites/programacion-tv.elpais.com/programacion-tv.elpais.com.channels.xml ``` ### Test ```sh -npm test -- programacion-tv.elpais.com +npm test ---programacion-tv.elpais.com ``` diff --git a/sites/programacion.tcc.com.uy/readme.md b/sites/programacion.tcc.com.uy/readme.md index c20af569..fed8b483 100644 --- a/sites/programacion.tcc.com.uy/readme.md +++ b/sites/programacion.tcc.com.uy/readme.md @@ -5,17 +5,17 @@ https://programacion.tcc.com.uy/ ### Download the guide ```sh -npm run grab -- --site=programacion.tcc.com.uy +npm run grab --- --site=programacion.tcc.com.uy ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --output=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml +npm run channels:parse --- --config=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.config.js --output=./sites/programacion.tcc.com.uy/programacion.tcc.com.uy.channels.xml ``` ### Test ```sh -npm test -- programacion.tcc.com.uy +npm test ---programacion.tcc.com.uy ``` diff --git a/sites/programetv.ro/readme.md b/sites/programetv.ro/readme.md index e84a0b4c..14ea5d34 100644 --- a/sites/programetv.ro/readme.md +++ b/sites/programetv.ro/readme.md @@ -5,17 +5,17 @@ https://www.programetv.ro/ ### Download the guide ```sh -npm run grab -- --site=programetv.ro +npm run grab --- --site=programetv.ro ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/programetv.ro/programetv.ro.config.js --output=./sites/programetv.ro/programetv.ro.channels.xml +npm run channels:parse --- --config=./sites/programetv.ro/programetv.ro.config.js --output=./sites/programetv.ro/programetv.ro.channels.xml ``` ### Test ```sh -npm test -- programetv.ro +npm test ---programetv.ro ``` diff --git a/sites/programme-tv.net/readme.md b/sites/programme-tv.net/readme.md index 7f790e81..33c308e4 100644 --- a/sites/programme-tv.net/readme.md +++ b/sites/programme-tv.net/readme.md @@ -5,17 +5,17 @@ https://www.programme-tv.net/ ### Download the guide ```sh -npm run grab -- --site=programme-tv.net +npm run grab --- --site=programme-tv.net ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/programme-tv.net/programme-tv.net.config.js --output=./sites/programme-tv.net/programme-tv.net.channels.xml +npm run channels:parse --- --config=./sites/programme-tv.net/programme-tv.net.config.js --output=./sites/programme-tv.net/programme-tv.net.channels.xml ``` ### Test ```sh -npm test -- programme-tv.net +npm test ---programme-tv.net ``` diff --git a/sites/programme-tv.vini.pf/readme.md b/sites/programme-tv.vini.pf/readme.md index baf20577..6f5c1154 100644 --- a/sites/programme-tv.vini.pf/readme.md +++ b/sites/programme-tv.vini.pf/readme.md @@ -5,17 +5,17 @@ https://programme-tv.vini.pf/ ### Download the guide ```sh -npm run grab -- --site=programme-tv.vini.pf +npm run grab --- --site=programme-tv.vini.pf ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js --output=./sites/programme-tv.vini.pf/programme-tv.vini.pf.channels.xml +npm run channels:parse --- --config=./sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js --output=./sites/programme-tv.vini.pf/programme-tv.vini.pf.channels.xml ``` ### Test ```sh -npm test -- programme-tv.vini.pf +npm test ---programme-tv.vini.pf ``` diff --git a/sites/programme.tvb.com/readme.md b/sites/programme.tvb.com/readme.md index 4bc63b26..19f9bed2 100644 --- a/sites/programme.tvb.com/readme.md +++ b/sites/programme.tvb.com/readme.md @@ -7,13 +7,13 @@ https://www.programme.tvb.com/ English: ```sh -npm run grab -- --site=programme.tvb.com --lang=en +npm run grab --- --site=programme.tvb.com --lang=en ``` Chinese: ```sh -npm run grab -- --site=programme.tvb.com --lang=zh +npm run grab --- --site=programme.tvb.com --lang=zh ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=programme.tvb.com --lang=zh English: ```sh -npm run channels:parse -- --config=sites/programme.tvb.com/programme.tvb.com.config.js --output=sites/programme.tvb.com/programme.tvb.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=sites/programme.tvb.com/programme.tvb.com.config.js --output=sites/programme.tvb.com/programme.tvb.com_en.channels.xml --set=lang:en ``` Chinese: ```sh -npm run channels:parse -- --config=sites/programme.tvb.com/programme.tvb.com.config.js --output=sites/programme.tvb.com/programme.tvb.com_zh.channels.xml --set=lang:zh +npm run channels:parse --- --config=sites/programme.tvb.com/programme.tvb.com.config.js --output=sites/programme.tvb.com/programme.tvb.com_zh.channels.xml --set=lang:zh ``` ### Test ```sh -npm test -- programme.tvb.com +npm test ---programme.tvb.com ``` diff --git a/sites/programtv.onet.pl/readme.md b/sites/programtv.onet.pl/readme.md index fca4118a..9b53c1e5 100644 --- a/sites/programtv.onet.pl/readme.md +++ b/sites/programtv.onet.pl/readme.md @@ -5,17 +5,17 @@ https://programtv.onet.pl/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=programtv.onet.pl +npm run grab --- --site=programtv.onet.pl ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/programtv.onet.pl/programtv.onet.pl.config.js --output=./sites/programtv.onet.pl/programtv.onet.pl.channels.xml +npm run channels:parse --- --config=./sites/programtv.onet.pl/programtv.onet.pl.config.js --output=./sites/programtv.onet.pl/programtv.onet.pl.channels.xml ``` ### Test ```sh -npm test -- programtv.onet.pl +npm test ---programtv.onet.pl ``` diff --git a/sites/raiplay.it/raiplay.it.test.js b/sites/raiplay.it/raiplay.it.test.js index 348aed04..057ca8bf 100644 --- a/sites/raiplay.it/raiplay.it.test.js +++ b/sites/raiplay.it/raiplay.it.test.js @@ -1,4 +1,4 @@ -// npm run grab -- --site=raiplay.it +// npm run grab --- --site=raiplay.it const { parser, url } = require('./raiplay.it.config.js') const dayjs = require('dayjs') diff --git a/sites/raiplay.it/readme.md b/sites/raiplay.it/readme.md index b8ada0b2..9daa21ad 100644 --- a/sites/raiplay.it/readme.md +++ b/sites/raiplay.it/readme.md @@ -5,11 +5,11 @@ https://www.raiplay.it/guidatv ### Download the guide ```sh -npm run grab -- --site=raiplay.it +npm run grab --- --site=raiplay.it ``` ### Test ```sh -npm test -- raiplay.it +npm test ---raiplay.it ``` diff --git a/sites/reportv.com.ar/readme.md b/sites/reportv.com.ar/readme.md index c7ce745f..db059e22 100644 --- a/sites/reportv.com.ar/readme.md +++ b/sites/reportv.com.ar/readme.md @@ -5,17 +5,17 @@ https://www.reportv.com.ar/buscador/Buscador.php?aid=2337 ### Download the guide ```sh -npm run grab -- --site=reportv.com.ar +npm run grab --- --site=reportv.com.ar ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/reportv.com.ar/reportv.com.ar.config.js --output=./sites/reportv.com.ar/reportv.com.ar.channels.xml +npm run channels:parse --- --config=./sites/reportv.com.ar/reportv.com.ar.config.js --output=./sites/reportv.com.ar/reportv.com.ar.channels.xml ``` ### Test ```sh -npm test -- reportv.com.ar +npm test ---reportv.com.ar ``` diff --git a/sites/rev.bs/readme.md b/sites/rev.bs/readme.md index 7fbf0692..318f8d72 100644 --- a/sites/rev.bs/readme.md +++ b/sites/rev.bs/readme.md @@ -5,11 +5,11 @@ https://www.rev.bs/ ### Download the guide ```sh -npm run grab -- --site=rev.bs +npm run grab --- --site=rev.bs ``` ### Test ```sh -npm test -- rev.bs +npm test ---rev.bs ``` diff --git a/sites/rotana.net/readme.md b/sites/rotana.net/readme.md index d39318ed..c72246ad 100644 --- a/sites/rotana.net/readme.md +++ b/sites/rotana.net/readme.md @@ -9,13 +9,13 @@ https://rotana.net/en/streams (English) Arabic: ```sh -npm run grab -- --site=rotana.net --lang=ar +npm run grab --- --site=rotana.net --lang=ar ``` English: ```sh -npm run grab -- --site=rotana.net --lang=en +npm run grab --- --site=rotana.net --lang=en ``` ### Update channel list @@ -23,17 +23,17 @@ npm run grab -- --site=rotana.net --lang=en Arabic: ```sh -npm run channels:parse -- --config=./sites/rotana.net/rotana.net.config.js --output=./sites/rotana.net/rotana.net_ar.channels.xml --set=lang:ar +npm run channels:parse --- --config=./sites/rotana.net/rotana.net.config.js --output=./sites/rotana.net/rotana.net_ar.channels.xml --set=lang:ar ``` English: ```sh -npm run channels:parse -- --config=./sites/rotana.net/rotana.net.config.js --output=./sites/rotana.net/rotana.net_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/rotana.net/rotana.net.config.js --output=./sites/rotana.net/rotana.net_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- rotana.net +npm test ---rotana.net ``` diff --git a/sites/rtb.gov.bn/readme.md b/sites/rtb.gov.bn/readme.md index 422def7b..fe22b82d 100644 --- a/sites/rtb.gov.bn/readme.md +++ b/sites/rtb.gov.bn/readme.md @@ -5,11 +5,11 @@ https://www.rtb.gov.bn/SitePages/Programme%20Guide.aspx ### Download the guide ```sh -npm run grab -- --site=rtb.gov.bn +npm run grab --- --site=rtb.gov.bn ``` ### Test ```sh -npm test -- rtb.gov.bn +npm test ---rtb.gov.bn ``` diff --git a/sites/rthk.hk/readme.md b/sites/rthk.hk/readme.md index 75f967fb..c181c208 100644 --- a/sites/rthk.hk/readme.md +++ b/sites/rthk.hk/readme.md @@ -7,17 +7,17 @@ https://www.rthk.hk/ Chinese: ```sh -npm run grab -- --site=rthk.hk --lang=zh +npm run grab --- --site=rthk.hk --lang=zh ``` English: ```sh -npm run grab -- --site=rthk.hk --lang=en +npm run grab --- --site=rthk.hk --lang=en ``` ### Test ```sh -npm test -- rthk.hk +npm test ---rthk.hk ``` diff --git a/sites/rtmklik.rtm.gov.my/readme.md b/sites/rtmklik.rtm.gov.my/readme.md index d04a6706..25eeb22a 100644 --- a/sites/rtmklik.rtm.gov.my/readme.md +++ b/sites/rtmklik.rtm.gov.my/readme.md @@ -5,11 +5,11 @@ https://rtmklik.rtm.gov.my/live ### Download the guide ```sh -npm run grab -- --site=rtmklik.rtm.gov.my +npm run grab --- --site=rtmklik.rtm.gov.my ``` ### Test ```sh -npm test -- rtmklik.rtm.gov.my +npm test ---rtmklik.rtm.gov.my ``` diff --git a/sites/rtp.pt/readme.md b/sites/rtp.pt/readme.md index cc0f484f..b46fc38c 100644 --- a/sites/rtp.pt/readme.md +++ b/sites/rtp.pt/readme.md @@ -5,11 +5,11 @@ https://www.rtp.pt/tv/ ### Download the guide ```sh -npm run grab -- --site=rtp.pt +npm run grab --- --site=rtp.pt ``` ### Test ```sh -npm test -- rtp.pt +npm test ---rtp.pt ``` diff --git a/sites/ruv.is/readme.md b/sites/ruv.is/readme.md index 703a4bc8..cddc2542 100644 --- a/sites/ruv.is/readme.md +++ b/sites/ruv.is/readme.md @@ -5,11 +5,11 @@ https://www.ruv.is/sjonvarp/dagskra/ ### Download the guide ```sh -npm run grab -- --site=ruv.is +npm run grab --- --site=ruv.is ``` ### Test ```sh -npm test -- ruv.is +npm test ---ruv.is ``` diff --git a/sites/s.mxtv.jp/README.md b/sites/s.mxtv.jp/README.md index ffe7c67b..de3125e9 100644 --- a/sites/s.mxtv.jp/README.md +++ b/sites/s.mxtv.jp/README.md @@ -12,17 +12,17 @@ ## Download the guide ```sh -npm run grab -- --site=s.mxtv.jp +npm run grab --- --site=s.mxtv.jp ``` ## Update channel list ```sh -npm run channels:parse -- --config=./sites/s.mxtv.jp/s.mxtv.jp.config.js --output=./sites/s.mxtv.jp/s.mxtv.jp.channels.xml +npm run channels:parse --- --config=./sites/s.mxtv.jp/s.mxtv.jp.config.js --output=./sites/s.mxtv.jp/s.mxtv.jp.channels.xml ``` ## Test ```sh -npm test -- s.mxtv.jp +npm test ---s.mxtv.jp ``` diff --git a/sites/sat.tv/readme.md b/sites/sat.tv/readme.md index bac11c15..62fdf6be 100644 --- a/sites/sat.tv/readme.md +++ b/sites/sat.tv/readme.md @@ -7,13 +7,13 @@ https://sat.tv/tv-channels Arabic: ```sh -npm run grab -- --site=sat.tv --lang=ar +npm run grab --- --site=sat.tv --lang=ar ``` English: ```sh -npm run grab -- --site=sat.tv --lang=en +npm run grab --- --site=sat.tv --lang=en ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=sat.tv --lang=en Arabic: ```sh -npm run channels:parse -- --config=./sites/sat.tv/sat.tv.config.js --output=./sites/sat.tv/sat.tv_ar.channels.xml --set=lang:ar +npm run channels:parse --- --config=./sites/sat.tv/sat.tv.config.js --output=./sites/sat.tv/sat.tv_ar.channels.xml --set=lang:ar ``` English: ```sh -npm run channels:parse -- --config=./sites/sat.tv/sat.tv.config.js --output=./sites/sat.tv/sat.tv_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/sat.tv/sat.tv.config.js --output=./sites/sat.tv/sat.tv_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- sat.tv +npm test ---sat.tv ``` diff --git a/sites/shahid.mbc.net/readme.md b/sites/shahid.mbc.net/readme.md index e2d2b582..8fd4a66a 100644 --- a/sites/shahid.mbc.net/readme.md +++ b/sites/shahid.mbc.net/readme.md @@ -11,19 +11,19 @@ https://shahid.mbc.net/fr/livestream (French) Arabic: ```sh -npm run grab -- --site=shahid.mbc.net --lang=ar +npm run grab --- --site=shahid.mbc.net --lang=ar ``` English: ```sh -npm run grab -- --site=shahid.mbc.net --lang=en +npm run grab --- --site=shahid.mbc.net --lang=en ``` French: ```sh -npm run grab -- --site=shahid.mbc.net --lang=fr +npm run grab --- --site=shahid.mbc.net --lang=fr ``` ### Update channel list @@ -31,23 +31,23 @@ npm run grab -- --site=shahid.mbc.net --lang=fr Arabic: ```sh -npm run channels:parse -- --config=./sites/shahid.mbc.net/shahid.mbc.net.config.js --output=./sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml --set=lang:ar +npm run channels:parse --- --config=./sites/shahid.mbc.net/shahid.mbc.net.config.js --output=./sites/shahid.mbc.net/shahid.mbc.net_ar.channels.xml --set=lang:ar ``` English: ```sh -npm run channels:parse -- --config=./sites/shahid.mbc.net/shahid.mbc.net.config.js --output=./sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/shahid.mbc.net/shahid.mbc.net.config.js --output=./sites/shahid.mbc.net/shahid.mbc.net_en.channels.xml --set=lang:en ``` French: ```sh -npm run channels:parse -- --config=./sites/shahid.mbc.net/shahid.mbc.net.config.js --output=./sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml --set=lang:fr +npm run channels:parse --- --config=./sites/shahid.mbc.net/shahid.mbc.net.config.js --output=./sites/shahid.mbc.net/shahid.mbc.net_fr.channels.xml --set=lang:fr ``` ### Test ```sh -npm test -- shahid.mbc.net +npm test ---shahid.mbc.net ``` diff --git a/sites/siba.com.co/readme.md b/sites/siba.com.co/readme.md index 894c0337..46baec74 100644 --- a/sites/siba.com.co/readme.md +++ b/sites/siba.com.co/readme.md @@ -5,11 +5,11 @@ https://web.siba.com.co/ ### Download the guide ```sh -npm run grab -- --site=siba.com.co +npm run grab --- --site=siba.com.co ``` ### Test ```sh -npm test -- siba.com.co +npm test ---siba.com.co ``` diff --git a/sites/singtel.com/readme.md b/sites/singtel.com/readme.md index a879e874..3867c805 100644 --- a/sites/singtel.com/readme.md +++ b/sites/singtel.com/readme.md @@ -5,17 +5,17 @@ https://www.singtel.com/personal/products-services/tv/tv-programme-guide ### Download the guide ```sh -npm run grab -- --site=singtel.com +npm run grab --- --site=singtel.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/singtel.com/singtel.com.config.js --output=./sites/singtel.com/singtel.com.channels.xml +npm run channels:parse --- --config=./sites/singtel.com/singtel.com.config.js --output=./sites/singtel.com/singtel.com.channels.xml ``` ### Test ```sh -npm test -- singtel.com +npm test ---singtel.com ``` diff --git a/sites/sjonvarp.is/readme.md b/sites/sjonvarp.is/readme.md index 69c0c3ef..29a385e7 100644 --- a/sites/sjonvarp.is/readme.md +++ b/sites/sjonvarp.is/readme.md @@ -5,17 +5,17 @@ https://sjonvarp.is/ ### Download the guide ```sh -npm run grab -- --site=sjonvarp.is +npm run grab --- --site=sjonvarp.is ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/sjonvarp.is/sjonvarp.is.config.js --output=./sites/sjonvarp.is/sjonvarp.is.channels.xml +npm run channels:parse --- --config=./sites/sjonvarp.is/sjonvarp.is.config.js --output=./sites/sjonvarp.is/sjonvarp.is.channels.xml ``` ### Test ```sh -npm test -- sjonvarp.is +npm test ---sjonvarp.is ``` diff --git a/sites/sky.co.nz/readme.md b/sites/sky.co.nz/readme.md index 8a77459b..a917688e 100644 --- a/sites/sky.co.nz/readme.md +++ b/sites/sky.co.nz/readme.md @@ -5,17 +5,17 @@ https://sky.co.nz/ _[Geo-Blocked]_ ### Download the guide ```sh -npm run grab -- --site=sky.co.nz +npm run grab --- --site=sky.co.nz ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/sky.co.nz/sky.co.nz.config.js --output=./sites/sky.co.nz/sky.co.nz.channels.xml +npm run channels:parse --- --config=./sites/sky.co.nz/sky.co.nz.config.js --output=./sites/sky.co.nz/sky.co.nz.channels.xml ``` ### Test ```sh -npm test -- sky.co.nz +npm test ---sky.co.nz ``` diff --git a/sites/sky.com/readme.md b/sites/sky.com/readme.md index 49f1569e..3bd39a47 100644 --- a/sites/sky.com/readme.md +++ b/sites/sky.com/readme.md @@ -5,17 +5,17 @@ https://www.sky.com/tv-guide ### Download the guide ```sh -npm run grab -- --site=sky.com +npm run grab --- --site=sky.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/sky.com/sky.com.config.js --output=./sites/sky.com/sky.com.channels.xml +npm run channels:parse --- --config=./sites/sky.com/sky.com.config.js --output=./sites/sky.com/sky.com.channels.xml ``` ### Test ```sh -npm test -- sky.com +npm test ---sky.com ``` diff --git a/sites/sky.de/readme.md b/sites/sky.de/readme.md index f58ad306..6bc5fc81 100644 --- a/sites/sky.de/readme.md +++ b/sites/sky.de/readme.md @@ -5,17 +5,17 @@ https://www.sky.de/tvguide-7599 ### Download the guide ```sh -npm run grab -- --site=sky.de +npm run grab --- --site=sky.de ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/sky.de/sky.de.config.js --output=./sites/sky.de/sky.de.channels.xml +npm run channels:parse --- --config=./sites/sky.de/sky.de.config.js --output=./sites/sky.de/sky.de.channels.xml ``` ### Test ```sh -npm test -- sky.de +npm test ---sky.de ``` diff --git a/sites/skylife.co.kr/readme.md b/sites/skylife.co.kr/readme.md index 7116cfd1..6b2ad116 100644 --- a/sites/skylife.co.kr/readme.md +++ b/sites/skylife.co.kr/readme.md @@ -5,17 +5,17 @@ https://www.skylife.co.kr/product/tv/channelNo/chart ### Download the guide ```sh -npm run grab -- --site=skylife.co.kr +npm run grab --- --site=skylife.co.kr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/skylife.co.kr/skylife.co.kr.config.js --output=./sites/skylife.co.kr/skylife.co.kr.channels.xml +npm run channels:parse --- --config=./sites/skylife.co.kr/skylife.co.kr.config.js --output=./sites/skylife.co.kr/skylife.co.kr.channels.xml ``` ### Test ```sh -npm test -- skylife.co.kr +npm test ---skylife.co.kr ``` diff --git a/sites/skyperfectv.co.jp/README.md b/sites/skyperfectv.co.jp/README.md index f6ad307b..59689f9f 100644 --- a/sites/skyperfectv.co.jp/README.md +++ b/sites/skyperfectv.co.jp/README.md @@ -12,17 +12,17 @@ ## Download the guide ```sh -npm run grab -- --site=skyperfectv.co.jp +npm run grab --- --site=skyperfectv.co.jp ``` ## Update channel list ```sh -npm run channels:parse -- --config=./sites/skyperfectv.co.jp/skyperfectv.co.jp.config.js --output=./sites/skyperfectv.co.jp/skyperfectv.co.jp.channels.xml +npm run channels:parse --- --config=./sites/skyperfectv.co.jp/skyperfectv.co.jp.config.js --output=./sites/skyperfectv.co.jp/skyperfectv.co.jp.channels.xml ``` ## Test ```sh -npm test -- skyperfectv.co.jp +npm test ---skyperfectv.co.jp ``` diff --git a/sites/starhubtvplus.com/readme.md b/sites/starhubtvplus.com/readme.md index d03792ed..8d6532ec 100644 --- a/sites/starhubtvplus.com/readme.md +++ b/sites/starhubtvplus.com/readme.md @@ -7,13 +7,13 @@ https://www.starhubtvplus.com/ English: ```sh -npm run grab -- --site=starhubtvplus.com --lang=en +npm run grab --- --site=starhubtvplus.com --lang=en ``` Chinese: ```sh -npm run grab -- --site=starhubtvplus.com --lang=zh +npm run grab --- --site=starhubtvplus.com --lang=zh ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=starhubtvplus.com --lang=zh English: ```sh -npm run channels:parse -- --config=sites/starhubtvplus.com/starhubtvplus.com.config.js --output=sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml --set=lang:en +npm run channels:parse --- --config=sites/starhubtvplus.com/starhubtvplus.com.config.js --output=sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml --set=lang:en ``` Chinese: ```sh -npm run channels:parse -- --config=sites/starhubtvplus.com/starhubtvplus.com.config.js --output=sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml --set=lang:zh +npm run channels:parse --- --config=sites/starhubtvplus.com/starhubtvplus.com.config.js --output=sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml --set=lang:zh ``` ### Test ```sh -npm test -- starhubtvplus.com +npm test ---starhubtvplus.com ``` diff --git a/sites/startimestv.com/readme.md b/sites/startimestv.com/readme.md index 021f3708..f37bdeaf 100644 --- a/sites/startimestv.com/readme.md +++ b/sites/startimestv.com/readme.md @@ -5,17 +5,17 @@ https://startimestv.com/tv_guide.html ### Download the guide ```sh -npm run grab -- --site=startimestv.com +npm run grab --- --site=startimestv.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/startimestv.com/startimestv.com.config.js --output=./sites/startimestv.com/startimestv.com.channels.xml +npm run channels:parse --- --config=./sites/startimestv.com/startimestv.com.config.js --output=./sites/startimestv.com/startimestv.com.channels.xml ``` ### Test ```sh -npm test -- startimestv.com +npm test ---startimestv.com ``` diff --git a/sites/streamingtvguides.com/readme.md b/sites/streamingtvguides.com/readme.md index 4e81a504..1d43ca71 100644 --- a/sites/streamingtvguides.com/readme.md +++ b/sites/streamingtvguides.com/readme.md @@ -5,17 +5,17 @@ https://streamingtvguides.com/ ### Download the guide ```sh -npm run grab -- --site=streamingtvguides.com +npm run grab --- --site=streamingtvguides.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/streamingtvguides.com/streamingtvguides.com.config.js --output=./sites/streamingtvguides.com/streamingtvguides.com.channels.xml +npm run channels:parse --- --config=./sites/streamingtvguides.com/streamingtvguides.com.config.js --output=./sites/streamingtvguides.com/streamingtvguides.com.channels.xml ``` ### Test ```sh -npm test -- streamingtvguides.com +npm test ---streamingtvguides.com ``` diff --git a/sites/superguidatv.it/readme.md b/sites/superguidatv.it/readme.md index b0bc3e79..65a4da04 100644 --- a/sites/superguidatv.it/readme.md +++ b/sites/superguidatv.it/readme.md @@ -5,17 +5,17 @@ https://www.superguidatv.it/ ### Download the guide ```sh -npm run grab -- --site=superguidatv.it +npm run grab --- --site=superguidatv.it ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/superguidatv.it/superguidatv.it.config.js --output=./sites/superguidatv.it/superguidatv.it.channels.xml +npm run channels:parse --- --config=./sites/superguidatv.it/superguidatv.it.config.js --output=./sites/superguidatv.it/superguidatv.it.channels.xml ``` ### Test ```sh -npm test -- superguidatv.it +npm test ---superguidatv.it ``` diff --git a/sites/taiwanplus.com/readme.md b/sites/taiwanplus.com/readme.md index 959c7d26..f4c58653 100644 --- a/sites/taiwanplus.com/readme.md +++ b/sites/taiwanplus.com/readme.md @@ -5,11 +5,11 @@ https://www.taiwanplus.com/taiwanplustv/schedule ### Download the guide ```sh -npm run grab -- --site=taiwanplus.com +npm run grab --- --site=taiwanplus.com ``` ### Test ```sh -npm test -- taiwanplus.com +npm test ---taiwanplus.com ``` diff --git a/sites/tapdmv.com/readme.md b/sites/tapdmv.com/readme.md index 4a5f455f..2a3912b0 100644 --- a/sites/tapdmv.com/readme.md +++ b/sites/tapdmv.com/readme.md @@ -5,17 +5,17 @@ https://tapdmv.com/Schedule/index.html ### Download the guide ```sh -npm run grab -- --site=tapdmv.com +npm run grab --- --site=tapdmv.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tapdmv.com/tapdmv.com.config.js --output=./sites/tapdmv.com/tapdmv.com.channels.xml +npm run channels:parse --- --config=./sites/tapdmv.com/tapdmv.com.config.js --output=./sites/tapdmv.com/tapdmv.com.channels.xml ``` ### Test ```sh -npm test -- tapdmv.com +npm test ---tapdmv.com ``` diff --git a/sites/telenet.tv/readme.md b/sites/telenet.tv/readme.md index fb698d49..9d598d43 100644 --- a/sites/telenet.tv/readme.md +++ b/sites/telenet.tv/readme.md @@ -5,17 +5,17 @@ https://www.telenet.tv/nl/epg/initial ### Download the guide ```sh -npm run grab -- --site=telenet.tv +npm run grab --- --site=telenet.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/telenet.tv/telenet.tv.config.js --output=./sites/telenet.tv/telenet.tv.channels.xml +npm run channels:parse --- --config=./sites/telenet.tv/telenet.tv.config.js --output=./sites/telenet.tv/telenet.tv.channels.xml ``` ### Test ```sh -npm test -- telenet.tv +npm test ---telenet.tv ``` diff --git a/sites/teliatv.ee/readme.md b/sites/teliatv.ee/readme.md index 087ab8bd..e4ea0694 100644 --- a/sites/teliatv.ee/readme.md +++ b/sites/teliatv.ee/readme.md @@ -11,19 +11,19 @@ https://www.teliatv.ee/ru/kava/ (Russian) Estonian: ```sh -npm run grab -- --channels=sites/teliatv.ee/teliatv.ee_et.channels.xml +npm run grab --- --channels=sites/teliatv.ee/teliatv.ee_et.channels.xml ``` English: ```sh -npm run grab -- --channels=sites/teliatv.ee/teliatv.ee_en.channels.xml +npm run grab --- --channels=sites/teliatv.ee/teliatv.ee_en.channels.xml ``` Russian: ```sh -npm run grab -- --channels=sites/teliatv.ee/teliatv.ee_ru.channels.xml +npm run grab --- --channels=sites/teliatv.ee/teliatv.ee_ru.channels.xml ``` ### Update channel list @@ -31,23 +31,23 @@ npm run grab -- --channels=sites/teliatv.ee/teliatv.ee_ru.channels.xml Estonian: ```sh -npm run channels:parse -- --config=./sites/teliatv.ee/teliatv.ee.config.js --output=./sites/teliatv.ee/teliatv.ee_et.channels.xml --set=lang:et +npm run channels:parse --- --config=./sites/teliatv.ee/teliatv.ee.config.js --output=./sites/teliatv.ee/teliatv.ee_et.channels.xml --set=lang:et ``` English: ```sh -npm run channels:parse -- --config=./sites/teliatv.ee/teliatv.ee.config.js --output=./sites/teliatv.ee/teliatv.ee_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/teliatv.ee/teliatv.ee.config.js --output=./sites/teliatv.ee/teliatv.ee_en.channels.xml --set=lang:en ``` Russian: ```sh -npm run channels:parse -- --config=./sites/teliatv.ee/teliatv.ee.config.js --output=./sites/teliatv.ee/teliatv.ee_ru.channels.xml --set=lang:ru +npm run channels:parse --- --config=./sites/teliatv.ee/teliatv.ee.config.js --output=./sites/teliatv.ee/teliatv.ee_ru.channels.xml --set=lang:ru ``` ### Test ```sh -npm test -- teliatv.ee +npm test ---teliatv.ee ``` diff --git a/sites/telkussa.fi/readme.md b/sites/telkussa.fi/readme.md index f30547ec..173f8e20 100644 --- a/sites/telkussa.fi/readme.md +++ b/sites/telkussa.fi/readme.md @@ -5,17 +5,17 @@ https://telkussa.fi/ ### Download the guide ```sh -npm run grab -- --site=telkussa.fi +npm run grab --- --site=telkussa.fi ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/telkussa.fi/telkussa.fi.config.js --output=./sites/telkussa.fi/telkussa.fi.channels.xml +npm run channels:parse --- --config=./sites/telkussa.fi/telkussa.fi.config.js --output=./sites/telkussa.fi/telkussa.fi.channels.xml ``` ### Test ```sh -npm test -- telkussa.fi +npm test ---telkussa.fi ``` diff --git a/sites/telsu.fi/readme.md b/sites/telsu.fi/readme.md index debd7402..8b15fd7c 100644 --- a/sites/telsu.fi/readme.md +++ b/sites/telsu.fi/readme.md @@ -5,17 +5,17 @@ https://www.telsu.fi/ ### Download the guide ```sh -npm run grab -- --site=telsu.fi +npm run grab --- --site=telsu.fi ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/telsu.fi/telsu.fi.config.js --output=./sites/telsu.fi/telsu.fi.channels.xml +npm run channels:parse --- --config=./sites/telsu.fi/telsu.fi.config.js --output=./sites/telsu.fi/telsu.fi.channels.xml ``` ### Test ```sh -npm test -- telsu.fi +npm test ---telsu.fi ``` diff --git a/sites/tivu.tv/readme.md b/sites/tivu.tv/readme.md index 6b2e27d6..9a95a1d3 100644 --- a/sites/tivu.tv/readme.md +++ b/sites/tivu.tv/readme.md @@ -5,17 +5,17 @@ https://www.tivu.tv/ ### Download the guide ```sh -npm run grab -- --site=tivu.tv +npm run grab --- --site=tivu.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tivu.tv/tivu.tv.config.js --output=./sites/tivu.tv/tivu.tv.channels.xml +npm run channels:parse --- --config=./sites/tivu.tv/tivu.tv.config.js --output=./sites/tivu.tv/tivu.tv.channels.xml ``` ### Test ```sh -npm test -- tivu.tv +npm test ---tivu.tv ``` diff --git a/sites/toonamiaftermath.com/readme.md b/sites/toonamiaftermath.com/readme.md index d5157235..6a3138a1 100644 --- a/sites/toonamiaftermath.com/readme.md +++ b/sites/toonamiaftermath.com/readme.md @@ -5,11 +5,11 @@ https://www.toonamiaftermath.com/schedule ### Download the guide ```sh -npm run grab -- --site=toonamiaftermath.com +npm run grab --- --site=toonamiaftermath.com ``` ### Test ```sh -npm test -- toonamiaftermath.com +npm test ---toonamiaftermath.com ``` diff --git a/sites/turksatkablo.com.tr/readme.md b/sites/turksatkablo.com.tr/readme.md index cff7b41a..94f13b0a 100644 --- a/sites/turksatkablo.com.tr/readme.md +++ b/sites/turksatkablo.com.tr/readme.md @@ -5,17 +5,17 @@ https://www.turksatkablo.com.tr/yayin-akisi.aspx ### Download the guide ```sh -npm run grab -- --site=turksatkablo.com.tr +npm run grab --- --site=turksatkablo.com.tr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js --output=./sites/turksatkablo.com.tr/turksatkablo.com.tr.channels.xml +npm run channels:parse --- --config=./sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js --output=./sites/turksatkablo.com.tr/turksatkablo.com.tr.channels.xml ``` ### Test ```sh -npm test -- turksatkablo.com.tr +npm test ---turksatkablo.com.tr ``` diff --git a/sites/tv-programme.telecablesat.fr/readme.md b/sites/tv-programme.telecablesat.fr/readme.md index c56982bc..478a19f3 100644 --- a/sites/tv-programme.telecablesat.fr/readme.md +++ b/sites/tv-programme.telecablesat.fr/readme.md @@ -5,17 +5,17 @@ https://tv-programme.telecablesat.fr/ ### Download the guide ```sh -npm run grab -- --site=tv-programme.telecablesat.fr +npm run grab --- --site=tv-programme.telecablesat.fr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv-programme.telecablesat.fr/tv-programme.telecablesat.fr.config.js --output=./sites/tv-programme.telecablesat.fr/tv-programme.telecablesat.fr.channels.xml +npm run channels:parse --- --config=./sites/tv-programme.telecablesat.fr/tv-programme.telecablesat.fr.config.js --output=./sites/tv-programme.telecablesat.fr/tv-programme.telecablesat.fr.channels.xml ``` ### Test ```sh -npm test -- tv-programme.telecablesat.fr +npm test ---tv-programme.telecablesat.fr ``` diff --git a/sites/tv.blue.ch/readme.md b/sites/tv.blue.ch/readme.md index 1a80dbe5..f37b3c98 100644 --- a/sites/tv.blue.ch/readme.md +++ b/sites/tv.blue.ch/readme.md @@ -5,17 +5,17 @@ https://tv.blue.ch/tv-guide ### Download the guide ```sh -npm run grab -- --site=tv.blue.ch +npm run grab --- --site=tv.blue.ch ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.blue.ch/tv.blue.ch.config.js --output=./sites/tv.blue.ch/tv.blue.ch.channels.xml +npm run channels:parse --- --config=./sites/tv.blue.ch/tv.blue.ch.config.js --output=./sites/tv.blue.ch/tv.blue.ch.channels.xml ``` ### Test ```sh -npm test -- tv.blue.ch +npm test ---tv.blue.ch ``` diff --git a/sites/tv.cctv.com/readme.md b/sites/tv.cctv.com/readme.md index 400c3495..e0efa498 100644 --- a/sites/tv.cctv.com/readme.md +++ b/sites/tv.cctv.com/readme.md @@ -5,11 +5,11 @@ https://tv.cctv.com/epg/index.shtml ### Download the guide ```sh -npm run grab -- --site=tv.cctv.com +npm run grab --- --site=tv.cctv.com ``` ### Test ```sh -npm test -- tv.cctv.com +npm test ---tv.cctv.com ``` diff --git a/sites/tv.dir.bg/readme.md b/sites/tv.dir.bg/readme.md index 5cc1364d..8f81e17f 100644 --- a/sites/tv.dir.bg/readme.md +++ b/sites/tv.dir.bg/readme.md @@ -5,17 +5,17 @@ https://tv.dir.bg/programata.php ### Download the guide ```sh -npm run grab -- --site=tv.dir.bg +npm run grab --- --site=tv.dir.bg ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.dir.bg/tv.dir.bg.config.js --output=./sites/tv.dir.bg/tv.dir.bg.channels.xml +npm run channels:parse --- --config=./sites/tv.dir.bg/tv.dir.bg.config.js --output=./sites/tv.dir.bg/tv.dir.bg.channels.xml ``` ### Test ```sh -npm test -- tv.dir.bg +npm test ---tv.dir.bg ``` diff --git a/sites/tv.lv/readme.md b/sites/tv.lv/readme.md index 3ca1ef9c..b07ba5c8 100644 --- a/sites/tv.lv/readme.md +++ b/sites/tv.lv/readme.md @@ -5,17 +5,17 @@ https://www.tv.lv/ ### Download the guide ```sh -npm run grab -- --site=tv.lv +npm run grab --- --site=tv.lv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.lv/tv.lv.config.js --output=./sites/tv.lv/tv.lv.channels.xml +npm run channels:parse --- --config=./sites/tv.lv/tv.lv.config.js --output=./sites/tv.lv/tv.lv.channels.xml ``` ### Test ```sh -npm test -- tv.lv +npm test ---tv.lv ``` diff --git a/sites/tv.magenta.at/readme.md b/sites/tv.magenta.at/readme.md index 508ad0a7..c2a87846 100644 --- a/sites/tv.magenta.at/readme.md +++ b/sites/tv.magenta.at/readme.md @@ -5,17 +5,17 @@ https://tv.magenta.at/epg ### Download the guide ```sh -npm run grab -- --site=tv.magenta.at +npm run grab --- --site=tv.magenta.at ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.magenta.at/tv.magenta.at.config.js --output=./sites/tv.magenta.at/tv.magenta.at.channels.xml +npm run channels:parse --- --config=./sites/tv.magenta.at/tv.magenta.at.config.js --output=./sites/tv.magenta.at/tv.magenta.at.channels.xml ``` ### Test ```sh -npm test -- tv.magenta.at +npm test ---tv.magenta.at ``` diff --git a/sites/tv.mail.ru/readme.md b/sites/tv.mail.ru/readme.md index aba0362d..fbd83777 100644 --- a/sites/tv.mail.ru/readme.md +++ b/sites/tv.mail.ru/readme.md @@ -5,13 +5,13 @@ https://tv.mail.ru/ ### Download the guide ```sh -npm run grab -- --site=tv.mail.ru +npm run grab --- --site=tv.mail.ru ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.mail.ru/tv.mail.ru.config.js --output=./sites/tv.mail.ru/tv.mail.ru.channels.xml +npm run channels:parse --- --config=./sites/tv.mail.ru/tv.mail.ru.config.js --output=./sites/tv.mail.ru/tv.mail.ru.channels.xml ``` **NOTE:** There is a limit to the number of requests. @@ -19,5 +19,5 @@ npm run channels:parse -- --config=./sites/tv.mail.ru/tv.mail.ru.config.js --out ### Test ```sh -npm test -- tv.mail.ru +npm test ---tv.mail.ru ``` diff --git a/sites/tv.movistar.com.pe/readme.md b/sites/tv.movistar.com.pe/readme.md index edb55e47..e339af0d 100644 --- a/sites/tv.movistar.com.pe/readme.md +++ b/sites/tv.movistar.com.pe/readme.md @@ -5,17 +5,17 @@ http://tv.movistar.com.pe/ ### Download the guide ```sh -npm run grab -- --site=tv.movistar.com.pe +npm run grab --- --site=tv.movistar.com.pe ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.movistar.com.pe/tv.movistar.com.pe.config.js --output=./sites/tv.movistar.com.pe/tv.movistar.com.pe.channels.xml +npm run channels:parse --- --config=./sites/tv.movistar.com.pe/tv.movistar.com.pe.config.js --output=./sites/tv.movistar.com.pe/tv.movistar.com.pe.channels.xml ``` ### Test ```sh -npm test -- tv.movistar.com.pe +npm test ---tv.movistar.com.pe ``` diff --git a/sites/tv.nu/readme.md b/sites/tv.nu/readme.md index 152a85e4..d163d884 100644 --- a/sites/tv.nu/readme.md +++ b/sites/tv.nu/readme.md @@ -5,17 +5,17 @@ https://www.tv.nu/alla-kanaler ### Download the guide ```sh -npm run grab -- --site=tv.nu +npm run grab --- --site=tv.nu ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.nu/tv.nu.config.js --output=./sites/tv.nu/tv.nu.channels.xml +npm run channels:parse --- --config=./sites/tv.nu/tv.nu.config.js --output=./sites/tv.nu/tv.nu.channels.xml ``` ### Test ```sh -npm test -- tv.nu +npm test ---tv.nu ``` diff --git a/sites/tv.post.lu/readme.md b/sites/tv.post.lu/readme.md index d68c0880..94c8d2f9 100644 --- a/sites/tv.post.lu/readme.md +++ b/sites/tv.post.lu/readme.md @@ -5,17 +5,17 @@ https://tv.post.lu/en/tv-programme/ ### Download the guide ```sh -npm run grab -- --site=tv.post.lu +npm run grab --- --site=tv.post.lu ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.post.lu/tv.post.lu.config.js --output=./sites/tv.post.lu/tv.post.lu.channels.xml +npm run channels:parse --- --config=./sites/tv.post.lu/tv.post.lu.config.js --output=./sites/tv.post.lu/tv.post.lu.channels.xml ``` ### Test ```sh -npm test -- tv.post.lu +npm test ---tv.post.lu ``` diff --git a/sites/tv.trueid.net/readme.md b/sites/tv.trueid.net/readme.md index 28956781..a3030ad7 100644 --- a/sites/tv.trueid.net/readme.md +++ b/sites/tv.trueid.net/readme.md @@ -9,13 +9,13 @@ https://tv.trueid.net/ Thai: ```sh -npm run grab -- --site=tv.trueid.net --lang=th +npm run grab --- --site=tv.trueid.net --lang=th ``` English: ```sh -npm run grab -- --site=tv.trueid.net --lang=en +npm run grab --- --site=tv.trueid.net --lang=en ``` ### Update channel list @@ -23,17 +23,17 @@ npm run grab -- --site=tv.trueid.net --lang=en Thai: ```sh -npm run channels:parse -- --config=./sites/tv.trueid.net/tv.trueid.net.config.js --output=./sites/tv.trueid.net/tv.trueid.net_th.channels.xml --set=lang:th +npm run channels:parse --- --config=./sites/tv.trueid.net/tv.trueid.net.config.js --output=./sites/tv.trueid.net/tv.trueid.net_th.channels.xml --set=lang:th ``` English: ```sh -npm run channels:parse -- --config=./sites/tv.trueid.net/tv.trueid.net.config.js --output=./sites/tv.trueid.net/tv.trueid.net_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/tv.trueid.net/tv.trueid.net.config.js --output=./sites/tv.trueid.net/tv.trueid.net_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- tv.trueid.net +npm test ---tv.trueid.net ``` diff --git a/sites/tv.yandex.ru/readme.md b/sites/tv.yandex.ru/readme.md index 3874150c..f371b0d2 100644 --- a/sites/tv.yandex.ru/readme.md +++ b/sites/tv.yandex.ru/readme.md @@ -30,17 +30,17 @@ export DEBUG="site:tv.yandex.ru" ### Download the guide ```sh -npm run grab -- --site=tv.yandex.ru +npm run grab --- --site=tv.yandex.ru ``` ### Update channel list ```sh -npm run channels:parse -- --config=sites/tv.yandex.ru/tv.yandex.ru.config.js --output=sites/tv.yandex.ru/tv.yandex.ru.channels.xml +npm run channels:parse --- --config=sites/tv.yandex.ru/tv.yandex.ru.config.js --output=sites/tv.yandex.ru/tv.yandex.ru.channels.xml ``` ### Test ```sh -npm test -- tv.yandex.ru +npm test ---tv.yandex.ru ``` diff --git a/sites/tv.yettel.hu/readme.md b/sites/tv.yettel.hu/readme.md index 908b6dfb..4ee5264a 100644 --- a/sites/tv.yettel.hu/readme.md +++ b/sites/tv.yettel.hu/readme.md @@ -5,17 +5,17 @@ https://tv.yettel.hu/ ### Download the guide ```sh -npm run grab -- --site=tv.yettel.hu +npm run grab --- --site=tv.yettel.hu ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv.yettel.hu/tv.yettel.hu.config.js --output=./sites/tv.yettel.hu/tv.yettel.hu.channels.xml +npm run channels:parse --- --config=./sites/tv.yettel.hu/tv.yettel.hu.config.js --output=./sites/tv.yettel.hu/tv.yettel.hu.channels.xml ``` ### Test ```sh -npm test -- tv.yettel.hu +npm test ---tv.yettel.hu ``` diff --git a/sites/tv24.co.uk/readme.md b/sites/tv24.co.uk/readme.md index 5329fac6..589d73f4 100644 --- a/sites/tv24.co.uk/readme.md +++ b/sites/tv24.co.uk/readme.md @@ -5,17 +5,17 @@ https://tv24.co.uk/ ### Download the guide ```sh -npm run grab -- --site=tv24.co.uk +npm run grab --- --site=tv24.co.uk ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv24.co.uk/tv24.co.uk.config.js --output=./sites/tv24.co.uk/tv24.co.uk.channels.xml +npm run channels:parse --- --config=./sites/tv24.co.uk/tv24.co.uk.config.js --output=./sites/tv24.co.uk/tv24.co.uk.channels.xml ``` ### Test ```sh -npm test -- tv24.co.uk +npm test ---tv24.co.uk ``` diff --git a/sites/tv24.se/readme.md b/sites/tv24.se/readme.md index 252339c5..7a8df11a 100644 --- a/sites/tv24.se/readme.md +++ b/sites/tv24.se/readme.md @@ -5,17 +5,17 @@ https://tv24.se/ ### Download the guide ```sh -npm run grab -- --site=tv24.se +npm run grab --- --site=tv24.se ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv24.se/tv24.se.config.js --output=./sites/tv24.se/tv24.se.channels.xml +npm run channels:parse --- --config=./sites/tv24.se/tv24.se.config.js --output=./sites/tv24.se/tv24.se.channels.xml ``` ### Test ```sh -npm test -- tv24.se +npm test ---tv24.se ``` diff --git a/sites/tv2go.t-2.net/readme.md b/sites/tv2go.t-2.net/readme.md index ba7fba70..5e791ee0 100644 --- a/sites/tv2go.t-2.net/readme.md +++ b/sites/tv2go.t-2.net/readme.md @@ -5,17 +5,17 @@ https://tv2go.t-2.net/tv/epg/ ### Download the guide ```sh -npm run grab -- --site=tv2go.t-2.net +npm run grab --- --site=tv2go.t-2.net ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tv2go.t-2.net/tv2go.t-2.net.config.js --output=./sites/tv2go.t-2.net/tv2go.t-2.net.channels.xml +npm run channels:parse --- --config=./sites/tv2go.t-2.net/tv2go.t-2.net.config.js --output=./sites/tv2go.t-2.net/tv2go.t-2.net.channels.xml ``` ### Test ```sh -npm test -- tv2go.t-2.net +npm test ---tv2go.t-2.net ``` diff --git a/sites/tva.tv/readme.md b/sites/tva.tv/readme.md index abd8bd27..7917c7e1 100644 --- a/sites/tva.tv/readme.md +++ b/sites/tva.tv/readme.md @@ -5,17 +5,17 @@ https://tva.tv/ ### Download the guide ```sh -npm run grab -- --site=tva.tv +npm run grab --- --site=tva.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tva.tv/tva.tv.config.js --output=./sites/tva.tv/tva.tv.channels.xml +npm run channels:parse --- --config=./sites/tva.tv/tva.tv.config.js --output=./sites/tva.tv/tva.tv.channels.xml ``` ### Test ```sh -npm test -- tva.tv +npm test ---tva.tv ``` diff --git a/sites/tvarenasport.com/readme.md b/sites/tvarenasport.com/readme.md index af20ee01..575fb287 100644 --- a/sites/tvarenasport.com/readme.md +++ b/sites/tvarenasport.com/readme.md @@ -5,17 +5,17 @@ https://www.tvarenasport.com/tv-scheme ### Download the guide ```sh -npm run grab -- --site=tvarenasport.com +npm run grab --- --site=tvarenasport.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvarenasport.com/tvarenasport.com.config.js --output=./sites/tvarenasport.com/tvarenasport.com.channels.xml +npm run channels:parse --- --config=./sites/tvarenasport.com/tvarenasport.com.config.js --output=./sites/tvarenasport.com/tvarenasport.com.channels.xml ``` ### Test ```sh -npm test -- tvarenasport.com +npm test ---tvarenasport.com ``` diff --git a/sites/tvarenasport.hr/readme.md b/sites/tvarenasport.hr/readme.md index 25fff065..59f67ddb 100644 --- a/sites/tvarenasport.hr/readme.md +++ b/sites/tvarenasport.hr/readme.md @@ -5,17 +5,17 @@ https://www.tvarenasport.hr/ ### Download the guide ```sh -npm run grab -- --site=tvarenasport.hr +npm run grab --- --site=tvarenasport.hr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvarenasport.hr/tvarenasport.hr.config.js --output=./sites/tvarenasport.hr/tvarenasport.hr.channels.xml +npm run channels:parse --- --config=./sites/tvarenasport.hr/tvarenasport.hr.config.js --output=./sites/tvarenasport.hr/tvarenasport.hr.channels.xml ``` ### Test ```sh -npm test -- tvarenasport.hr +npm test ---tvarenasport.hr ``` diff --git a/sites/tvcesoir.fr/readme.md b/sites/tvcesoir.fr/readme.md index e453441b..a6240226 100644 --- a/sites/tvcesoir.fr/readme.md +++ b/sites/tvcesoir.fr/readme.md @@ -5,17 +5,17 @@ https://www.tvcesoir.fr/programme-tv/ ### Download the guide ```sh -npm run grab -- --site=tvcesoir.fr +npm run grab --- --site=tvcesoir.fr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvcesoir.fr/tvcesoir.fr.config.js --output=./sites/tvcesoir.fr/tvcesoir.fr.channels.xml +npm run channels:parse --- --config=./sites/tvcesoir.fr/tvcesoir.fr.config.js --output=./sites/tvcesoir.fr/tvcesoir.fr.channels.xml ``` ### Test ```sh -npm test -- tvcesoir.fr +npm test ---tvcesoir.fr ``` diff --git a/sites/tvcubana.icrt.cu/readme.md b/sites/tvcubana.icrt.cu/readme.md index e06c1cee..8d8b1cb6 100644 --- a/sites/tvcubana.icrt.cu/readme.md +++ b/sites/tvcubana.icrt.cu/readme.md @@ -5,11 +5,11 @@ https://www.tvcubana.icrt.cu/cartelera-de-la-tv-cubana ### Download the guide ```sh -npm run grab -- --site=tvcubana.icrt.cu +npm run grab --- --site=tvcubana.icrt.cu ``` ### Test ```sh -npm test -- tvcubana.icrt.cu +npm test ---tvcubana.icrt.cu ``` diff --git a/sites/tvgids.nl/readme.md b/sites/tvgids.nl/readme.md index 5a4b4926..3984a8d8 100644 --- a/sites/tvgids.nl/readme.md +++ b/sites/tvgids.nl/readme.md @@ -5,17 +5,17 @@ https://www.tvgids.nl/gids/ ### Download the guide ```sh -npm run grab -- --site=tvgids.nl +npm run grab --- --site=tvgids.nl ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvgids.nl/tvgids.nl.config.js --output=./sites/tvgids.nl/tvgids.nl.channels.xml +npm run channels:parse --- --config=./sites/tvgids.nl/tvgids.nl.config.js --output=./sites/tvgids.nl/tvgids.nl.channels.xml ``` ### Test ```sh -npm test -- tvgids.nl +npm test ---tvgids.nl ``` diff --git a/sites/tvguide.com/readme.md b/sites/tvguide.com/readme.md index 8e743e38..c726b555 100644 --- a/sites/tvguide.com/readme.md +++ b/sites/tvguide.com/readme.md @@ -5,17 +5,17 @@ https://www.tvguide.com/listings/ ### Download the guide ```sh -npm run grab -- --site=tvguide.com +npm run grab --- --site=tvguide.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvguide.com/tvguide.com.config.js --output=./sites/tvguide.com/tvguide.com.channels.xml +npm run channels:parse --- --config=./sites/tvguide.com/tvguide.com.config.js --output=./sites/tvguide.com/tvguide.com.channels.xml ``` ### Test ```sh -npm test -- tvguide.com +npm test ---tvguide.com ``` diff --git a/sites/tvguide.myjcom.jp/readme.md b/sites/tvguide.myjcom.jp/readme.md index 8b1292f2..22aee36d 100644 --- a/sites/tvguide.myjcom.jp/readme.md +++ b/sites/tvguide.myjcom.jp/readme.md @@ -5,17 +5,17 @@ https://tvguide.myjcom.jp/ ### Download the guide ```sh -npm run grab -- --site=tvguide.myjcom.jp +npm run grab --- --site=tvguide.myjcom.jp ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js --output=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp.channels.xml +npm run channels:parse --- --config=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js --output=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp.channels.xml ``` ### Test ```sh -npm test -- tvguide.myjcom.jp +npm test ---tvguide.myjcom.jp ``` diff --git a/sites/tvhebdo.com/readme.md b/sites/tvhebdo.com/readme.md index d8dcf382..914f9350 100644 --- a/sites/tvhebdo.com/readme.md +++ b/sites/tvhebdo.com/readme.md @@ -5,17 +5,17 @@ https://www.tvhebdo.com/ ### Download the guide ```sh -npm run grab -- --site=tvhebdo.com +npm run grab --- --site=tvhebdo.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvhebdo.com/tvhebdo.com.config.js --output=./sites/tvhebdo.com/tvhebdo.com.channels.xml +npm run channels:parse --- --config=./sites/tvhebdo.com/tvhebdo.com.config.js --output=./sites/tvhebdo.com/tvhebdo.com.channels.xml ``` ### Test ```sh -npm test -- tvhebdo.com +npm test ---tvhebdo.com ``` diff --git a/sites/tvheute.at/readme.md b/sites/tvheute.at/readme.md index 9566ada8..f809d42a 100644 --- a/sites/tvheute.at/readme.md +++ b/sites/tvheute.at/readme.md @@ -5,17 +5,17 @@ https://tvheute.at/ ### Download the guide ```sh -npm run grab -- --site=tvheute.at +npm run grab --- --site=tvheute.at ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvheute.at/tvheute.at.config.js --output=./sites/tvheute.at/tvheute.at.channels.xml +npm run channels:parse --- --config=./sites/tvheute.at/tvheute.at.config.js --output=./sites/tvheute.at/tvheute.at.channels.xml ``` ### Test ```sh -npm test -- tvheute.at +npm test ---tvheute.at ``` diff --git a/sites/tvim.tv/readme.md b/sites/tvim.tv/readme.md index bfb90c0a..91837094 100644 --- a/sites/tvim.tv/readme.md +++ b/sites/tvim.tv/readme.md @@ -5,17 +5,17 @@ https://www.tvim.tv/tv-guide/on-tvim ### Download the guide ```sh -npm run grab -- --site=tvim.tv +npm run grab --- --site=tvim.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvim.tv/tvim.tv.config.js --output=./sites/tvim.tv/tvim.tv.channels.xml +npm run channels:parse --- --config=./sites/tvim.tv/tvim.tv.config.js --output=./sites/tvim.tv/tvim.tv.channels.xml ``` ### Test ```sh -npm test -- tvim.tv +npm test ---tvim.tv ``` diff --git a/sites/tvireland.ie/readme.md b/sites/tvireland.ie/readme.md index 58e1aae4..ef430786 100644 --- a/sites/tvireland.ie/readme.md +++ b/sites/tvireland.ie/readme.md @@ -5,17 +5,17 @@ https://www.tvireland.ie/tv/ ### Download the guide ```sh -npm run grab -- --site=tvireland.ie +npm run grab --- --site=tvireland.ie ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvireland.ie/tvireland.ie.config.js --output=./sites/tvireland.ie/tvireland.ie.channels.xml +npm run channels:parse --- --config=./sites/tvireland.ie/tvireland.ie.config.js --output=./sites/tvireland.ie/tvireland.ie.channels.xml ``` ### Test ```sh -npm test -- tvireland.ie +npm test ---tvireland.ie ``` diff --git a/sites/tvmi.mt/readme.md b/sites/tvmi.mt/readme.md index 9cde9d29..36ed1ee2 100644 --- a/sites/tvmi.mt/readme.md +++ b/sites/tvmi.mt/readme.md @@ -5,11 +5,11 @@ https://tvmi.mt/schedule/ ### Download the guide ```sh -npm run grab -- --site=tvmi.mt +npm run grab --- --site=tvmi.mt ``` ### Test ```sh -npm test -- tvmi.mt +npm test ---tvmi.mt ``` diff --git a/sites/tvmusor.hu/readme.md b/sites/tvmusor.hu/readme.md index dcc30246..a6ed8187 100644 --- a/sites/tvmusor.hu/readme.md +++ b/sites/tvmusor.hu/readme.md @@ -5,17 +5,17 @@ https://tvmusor.hu/schedule/ ### Download the guide ```sh -npm run grab -- --site=tvmusor.hu +npm run grab --- --site=tvmusor.hu ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvmusor.hu/tvmusor.hu.config.js --output=./sites/tvmusor.hu/tvmusor.hu.channels.xml +npm run channels:parse --- --config=./sites/tvmusor.hu/tvmusor.hu.config.js --output=./sites/tvmusor.hu/tvmusor.hu.channels.xml ``` ### Test ```sh -npm test -- tvmusor.hu +npm test ---tvmusor.hu ``` diff --git a/sites/tvpassport.com/readme.md b/sites/tvpassport.com/readme.md index 6c541aa3..eee6b40f 100644 --- a/sites/tvpassport.com/readme.md +++ b/sites/tvpassport.com/readme.md @@ -5,17 +5,17 @@ https://www.tvpassport.com/tv-listings ### Download the guide ```sh -npm run grab -- --site=tvpassport.com +npm run grab --- --site=tvpassport.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvpassport.com/tvpassport.com.config.js --output=./sites/tvpassport.com/tvpassport.com.channels.xml +npm run channels:parse --- --config=./sites/tvpassport.com/tvpassport.com.config.js --output=./sites/tvpassport.com/tvpassport.com.channels.xml ``` ### Test ```sh -npm test -- tvpassport.com +npm test ---tvpassport.com ``` diff --git a/sites/tvplus.com.tr/readme.md b/sites/tvplus.com.tr/readme.md index db0e2670..c10e4d8a 100644 --- a/sites/tvplus.com.tr/readme.md +++ b/sites/tvplus.com.tr/readme.md @@ -5,17 +5,17 @@ https://tvplus.com.tr/canli-tv/yayin-akisi ### Download the guide ```sh -npm run grab -- --site=tvplus.com.tr +npm run grab --- --site=tvplus.com.tr ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvplus.com.tr/tvplus.com.tr.config.js --output=./sites/tvplus.com.tr/tvplus.com.tr.channels.xml +npm run channels:parse --- --config=./sites/tvplus.com.tr/tvplus.com.tr.config.js --output=./sites/tvplus.com.tr/tvplus.com.tr.channels.xml ``` ### Test ```sh -npm test -- tvplus.com.tr +npm test ---tvplus.com.tr ``` diff --git a/sites/tvprofil.com/readme.md b/sites/tvprofil.com/readme.md index 9d22d840..c8643855 100644 --- a/sites/tvprofil.com/readme.md +++ b/sites/tvprofil.com/readme.md @@ -5,17 +5,17 @@ https://tvprofil.com/tvprogram/ ### Download the guide ```sh -npm run grab -- --site=tvprofil.com +npm run grab --- --site=tvprofil.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/tvprofil.com/tvprofil.com.config.js --output=./sites/tvprofil.com/tvprofil.com.channels.xml +npm run channels:parse --- --config=./sites/tvprofil.com/tvprofil.com.config.js --output=./sites/tvprofil.com/tvprofil.com.channels.xml ``` ### Test ```sh -npm test -- tvprofil.com +npm test ---tvprofil.com ``` diff --git a/sites/tvtv.us/readme.md b/sites/tvtv.us/readme.md index 7892b33e..35dff0f0 100644 --- a/sites/tvtv.us/readme.md +++ b/sites/tvtv.us/readme.md @@ -5,11 +5,11 @@ https://www.tvtv.us/ ### Download the guide ```sh -npm run grab -- --site=tvtv.us +npm run grab --- --site=tvtv.us ``` ### Test ```sh -npm test -- tvtv.us +npm test ---tvtv.us ``` diff --git a/sites/v3.myafn.dodmedia.osd.mil/readme.md b/sites/v3.myafn.dodmedia.osd.mil/readme.md index 258e04e0..9e823170 100644 --- a/sites/v3.myafn.dodmedia.osd.mil/readme.md +++ b/sites/v3.myafn.dodmedia.osd.mil/readme.md @@ -5,17 +5,17 @@ https://v3.myafn.dodmedia.osd.mil/ ### Download the guide ```sh -npm run grab -- --site=v3.myafn.dodmedia.osd.mil +npm run grab --- --site=v3.myafn.dodmedia.osd.mil ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/v3.myafn.dodmedia.osd.mil/v3.myafn.dodmedia.osd.mil.config.js --output=./sites/v3.myafn.dodmedia.osd.mil/v3.myafn.dodmedia.osd.mil.channels.xml +npm run channels:parse --- --config=./sites/v3.myafn.dodmedia.osd.mil/v3.myafn.dodmedia.osd.mil.config.js --output=./sites/v3.myafn.dodmedia.osd.mil/v3.myafn.dodmedia.osd.mil.channels.xml ``` ### Test ```sh -npm test -- v3.myafn.dodmedia.osd.mil +npm test ---v3.myafn.dodmedia.osd.mil ``` diff --git a/sites/vidio.com/readme.md b/sites/vidio.com/readme.md index 2659c567..26ec5410 100644 --- a/sites/vidio.com/readme.md +++ b/sites/vidio.com/readme.md @@ -5,17 +5,17 @@ https://www.vidio.com/schedule/tv ### Download the guide ```sh -npm run grab -- --site=vidio.com +npm run grab --- --site=vidio.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/vidio.com/vidio.com.config.js --output=./sites/vidio.com/vidio.com.channels.xml +npm run channels:parse --- --config=./sites/vidio.com/vidio.com.config.js --output=./sites/vidio.com/vidio.com.channels.xml ``` ### Test ```sh -npm test -- vidio.com +npm test ---vidio.com ``` diff --git a/sites/virginmediatelevision.ie/readme.md b/sites/virginmediatelevision.ie/readme.md index 950ee667..73b07850 100644 --- a/sites/virginmediatelevision.ie/readme.md +++ b/sites/virginmediatelevision.ie/readme.md @@ -5,11 +5,11 @@ https://www.virginmediatelevision.ie/tv-guide ### Download the guide ```sh -npm run grab -- --site=virginmediatelevision.ie +npm run grab --- --site=virginmediatelevision.ie ``` ### Test ```sh -npm test -- virginmediatelevision.ie +npm test ---virginmediatelevision.ie ``` diff --git a/sites/virgintvgo.virginmedia.com/readme.md b/sites/virgintvgo.virginmedia.com/readme.md index 69f1d16b..339c5f8b 100644 --- a/sites/virgintvgo.virginmedia.com/readme.md +++ b/sites/virgintvgo.virginmedia.com/readme.md @@ -5,17 +5,17 @@ https://virgintvgo.virginmedia.com/en/epg/initial ### Download the guide ```sh -npm run grab -- --site=virgintvgo.virginmedia.com +npm run grab --- --site=virgintvgo.virginmedia.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js --output=./sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.channels.xml +npm run channels:parse --- --config=./sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js --output=./sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.channels.xml ``` ### Test ```sh -npm test -- virgintvgo.virginmedia.com +npm test ---virgintvgo.virginmedia.com ``` diff --git a/sites/visionplus.id/readme.md b/sites/visionplus.id/readme.md index 5b8d7d04..cd45eb5e 100644 --- a/sites/visionplus.id/readme.md +++ b/sites/visionplus.id/readme.md @@ -7,13 +7,13 @@ https://www.visionplus.id/channel Indonesian: ```sh -npm run grab -- --site=visionplus.id --lang=id +npm run grab --- --site=visionplus.id --lang=id ``` English: ```sh -npm run grab -- --site=visionplus.id --lang=en +npm run grab --- --site=visionplus.id --lang=en ``` ### Update channel list @@ -21,17 +21,17 @@ npm run grab -- --site=visionplus.id --lang=en Indonesian: ```sh -npm run channels:parse -- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id_id.channels.xml --set=lang:id +npm run channels:parse --- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id_id.channels.xml --set=lang:id ``` English: ```sh -npm run channels:parse -- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id_en.channels.xml --set=lang:en +npm run channels:parse --- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id_en.channels.xml --set=lang:en ``` ### Test ```sh -npm test -- visionplus.id +npm test ---visionplus.id ``` diff --git a/sites/vivacom.bg/readme.md b/sites/vivacom.bg/readme.md index f3d542f6..dd9bec4d 100644 --- a/sites/vivacom.bg/readme.md +++ b/sites/vivacom.bg/readme.md @@ -5,11 +5,11 @@ https://www.vivacom.bg/ ### Download the guide ```sh -npm run grab -- --site=vivacom.bg +npm run grab --- --site=vivacom.bg ``` ### Test ```sh -npm test -- vivacom.bg +npm test ---vivacom.bg ``` diff --git a/sites/vtm.be/readme.md b/sites/vtm.be/readme.md index 17079500..8f7a6d84 100644 --- a/sites/vtm.be/readme.md +++ b/sites/vtm.be/readme.md @@ -5,11 +5,11 @@ https://vtm.be/tv-gids ### Download the guide ```sh -npm run grab -- --site=vtm.be +npm run grab --- --site=vtm.be ``` ### Test ```sh -npm test -- vtm.be +npm test ---vtm.be ``` diff --git a/sites/walesi.com.fj/readme.md b/sites/walesi.com.fj/readme.md index 26de663a..f1f8147e 100644 --- a/sites/walesi.com.fj/readme.md +++ b/sites/walesi.com.fj/readme.md @@ -5,17 +5,17 @@ https://www.walesi.com.fj/channel-guide/ ### Download the guide ```sh -npm run grab -- --site=walesi.com.fj +npm run grab --- --site=walesi.com.fj ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/walesi.com.fj/walesi.com.fj.config.js --output=./sites/walesi.com.fj/walesi.com.fj.channels.xml +npm run channels:parse --- --config=./sites/walesi.com.fj/walesi.com.fj.config.js --output=./sites/walesi.com.fj/walesi.com.fj.channels.xml ``` ### Test ```sh -npm test -- walesi.com.fj +npm test ---walesi.com.fj ``` diff --git a/sites/watch.sportsnet.ca/readme.md b/sites/watch.sportsnet.ca/readme.md index 47972314..d7d2a383 100644 --- a/sites/watch.sportsnet.ca/readme.md +++ b/sites/watch.sportsnet.ca/readme.md @@ -5,17 +5,17 @@ https://watch.sportsnet.ca/schedule/tvlistings ### Download the guide ```sh -npm run grab -- --site=watch.sportsnet.ca +npm run grab --- --site=watch.sportsnet.ca ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/watch.sportsnet.ca/watch.sportsnet.ca.config.js --output=./sites/watch.sportsnet.ca/watch.sportsnet.ca.channels.xml +npm run channels:parse --- --config=./sites/watch.sportsnet.ca/watch.sportsnet.ca.config.js --output=./sites/watch.sportsnet.ca/watch.sportsnet.ca.channels.xml ``` ### Test ```sh -npm test -- watch.sportsnet.ca +npm test ---watch.sportsnet.ca ``` diff --git a/sites/watchyour.tv/readme.md b/sites/watchyour.tv/readme.md index 3b6e0041..c05a0a88 100644 --- a/sites/watchyour.tv/readme.md +++ b/sites/watchyour.tv/readme.md @@ -5,17 +5,17 @@ https://watchyour.tv/tvexperience.php ### Download the guide ```sh -npm run grab -- --site=watchyour.tv +npm run grab --- --site=watchyour.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/watchyour.tv/watchyour.tv.config.js --output=./sites/watchyour.tv/watchyour.tv.channels.xml +npm run channels:parse --- --config=./sites/watchyour.tv/watchyour.tv.config.js --output=./sites/watchyour.tv/watchyour.tv.channels.xml ``` ### Test ```sh -npm test -- watchyour.tv +npm test ---watchyour.tv ``` diff --git a/sites/wavve.com/readme.md b/sites/wavve.com/readme.md index 8dbeef2d..81df44c4 100644 --- a/sites/wavve.com/readme.md +++ b/sites/wavve.com/readme.md @@ -5,17 +5,17 @@ https://wavve.com/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=wavve.com +npm run grab --- --site=wavve.com ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/wavve.com/wavve.com.config.js --output=./sites/wavve.com/wavve.com.channels.xml +npm run channels:parse --- --config=./sites/wavve.com/wavve.com.config.js --output=./sites/wavve.com/wavve.com.channels.xml ``` ### Test ```sh -npm test -- wavve.com +npm test ---wavve.com ``` diff --git a/sites/web.magentatv.de/readme.md b/sites/web.magentatv.de/readme.md index cd58aef1..cf867893 100644 --- a/sites/web.magentatv.de/readme.md +++ b/sites/web.magentatv.de/readme.md @@ -5,17 +5,17 @@ https://web.magentatv.de/tv-guide ### Download the guide ```sh -npm run grab -- --site=web.magentatv.de +npm run grab --- --site=web.magentatv.de ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/web.magentatv.de/web.magentatv.de.config.js --output=./sites/web.magentatv.de/web.magentatv.de.channels.xml +npm run channels:parse --- --config=./sites/web.magentatv.de/web.magentatv.de.config.js --output=./sites/web.magentatv.de/web.magentatv.de.channels.xml ``` ### Test ```sh -npm test -- web.magentatv.de +npm test ---web.magentatv.de ``` diff --git a/sites/webtv.delta.nl/readme.md b/sites/webtv.delta.nl/readme.md index 3854f210..9716dc09 100644 --- a/sites/webtv.delta.nl/readme.md +++ b/sites/webtv.delta.nl/readme.md @@ -5,17 +5,17 @@ https://webtv.delta.nl/#/guide ### Download the guide ```sh -npm run grab -- --site=webtv.delta.nl +npm run grab --- --site=webtv.delta.nl ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/webtv.delta.nl/webtv.delta.nl.config.js --output=./sites/webtv.delta.nl/webtv.delta.nl.channels.xml +npm run channels:parse --- --config=./sites/webtv.delta.nl/webtv.delta.nl.config.js --output=./sites/webtv.delta.nl/webtv.delta.nl.channels.xml ``` ### Test ```sh -npm test -- webtv.delta.nl +npm test ---webtv.delta.nl ``` diff --git a/sites/worldfishingnetwork.com/readme.md b/sites/worldfishingnetwork.com/readme.md index 56a79da0..90b0c6a1 100644 --- a/sites/worldfishingnetwork.com/readme.md +++ b/sites/worldfishingnetwork.com/readme.md @@ -5,11 +5,11 @@ https://www.worldfishingnetwork.com/schedule/ ### Download the guide ```sh -npm run grab -- --site=worldfishingnetwork.com +npm run grab --- --site=worldfishingnetwork.com ``` ### Test ```sh -npm test -- worldfishingnetwork.com +npm test ---worldfishingnetwork.com ``` diff --git a/sites/www3.nhk.or.jp/readme.md b/sites/www3.nhk.or.jp/readme.md index 94b7149f..301a0572 100644 --- a/sites/www3.nhk.or.jp/readme.md +++ b/sites/www3.nhk.or.jp/readme.md @@ -5,11 +5,11 @@ https://www3.nhk.or.jp/nhkworld/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=www3.nhk.or.jp +npm run grab --- --site=www3.nhk.or.jp ``` ### Test ```sh -npm test -- www3.nhk.or.jp +npm test ---www3.nhk.or.jp ``` diff --git a/sites/xumo.tv/readme.md b/sites/xumo.tv/readme.md index 3026fdfd..7ebd4588 100644 --- a/sites/xumo.tv/readme.md +++ b/sites/xumo.tv/readme.md @@ -5,17 +5,17 @@ https://www.xumo.tv/ _[Geo-blocked]_ ### Download the guide ```sh -npm run grab -- --site=xumo.tv +npm run grab --- --site=xumo.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/xumo.tv/xumo.tv.config.js --output=./sites/xumo.tv/xumo.tv.channels.xml +npm run channels:parse --- --config=./sites/xumo.tv/xumo.tv.config.js --output=./sites/xumo.tv/xumo.tv.channels.xml ``` ### Test ```sh -npm test -- xumo.tv +npm test ---xumo.tv ``` diff --git a/sites/zap.co.ao/readme.md b/sites/zap.co.ao/readme.md index 753edef9..da2b358c 100644 --- a/sites/zap.co.ao/readme.md +++ b/sites/zap.co.ao/readme.md @@ -5,17 +5,17 @@ https://zap.co.ao/tv/guia-tv ### Download the guide ```sh -npm run grab -- --site=zap.co.ao +npm run grab --- --site=zap.co.ao ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/zap.co.ao/zap.co.ao.config.js --output=./sites/zap.co.ao/zap.co.ao.channels.xml +npm run channels:parse --- --config=./sites/zap.co.ao/zap.co.ao.config.js --output=./sites/zap.co.ao/zap.co.ao.channels.xml ``` ### Test ```sh -npm test -- zap.co.ao +npm test ---zap.co.ao ``` diff --git a/sites/ziggogo.tv/readme.md b/sites/ziggogo.tv/readme.md index aad31462..0319311e 100644 --- a/sites/ziggogo.tv/readme.md +++ b/sites/ziggogo.tv/readme.md @@ -5,17 +5,17 @@ https://www.ziggogo.tv/nl/epg/initial ### Download the guide ```sh -npm run grab -- --site=ziggogo.tv +npm run grab --- --site=ziggogo.tv ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/ziggogo.tv/ziggogo.tv.config.js --output=./sites/ziggogo.tv/ziggogo.tv.channels.xml +npm run channels:parse --- --config=./sites/ziggogo.tv/ziggogo.tv.config.js --output=./sites/ziggogo.tv/ziggogo.tv.channels.xml ``` ### Test ```sh -npm test -- ziggogo.tv +npm test ---ziggogo.tv ``` diff --git a/sites/znbc.co.zm/readme.md b/sites/znbc.co.zm/readme.md index 392df43e..d55b6bd1 100644 --- a/sites/znbc.co.zm/readme.md +++ b/sites/znbc.co.zm/readme.md @@ -5,11 +5,11 @@ https://www.znbc.co.zm/ ### Download the guide ```sh -npm run grab -- --site=znbc.co.zm +npm run grab --- --site=znbc.co.zm ``` ### Test ```sh -npm test -- znbc.co.zm +npm test ---znbc.co.zm ``` diff --git a/sites/zuragt.mn/readme.md b/sites/zuragt.mn/readme.md index 2dd26d96..6d24c896 100644 --- a/sites/zuragt.mn/readme.md +++ b/sites/zuragt.mn/readme.md @@ -5,17 +5,17 @@ https://www.zuragt.mn/ ### Download the guide ```sh -npm run grab -- --site=zuragt.mn +npm run grab --- --site=zuragt.mn ``` ### Update channel list ```sh -npm run channels:parse -- --config=./sites/zuragt.mn/zuragt.mn.config.js --output=./sites/zuragt.mn/zuragt.mn.channels.xml +npm run channels:parse --- --config=./sites/zuragt.mn/zuragt.mn.config.js --output=./sites/zuragt.mn/zuragt.mn.channels.xml ``` ### Test ```sh -npm test -- zuragt.mn +npm test ---zuragt.mn ``` diff --git a/tests/commands/channels/editor.test.ts b/tests/commands/channels/editor.test.ts index 6abc50a7..271014f0 100644 --- a/tests/commands/channels/editor.test.ts +++ b/tests/commands/channels/editor.test.ts @@ -24,7 +24,7 @@ describe('channels:editor', () => { } try { - const cmd = `${ENV_VAR} npm run channels:editor -- tests/__data__/output/channels.xml` + const cmd = `${ENV_VAR} npm run channels:editor --- tests/__data__/output/channels.xml` execSync(cmd, { encoding: 'utf8' }) } catch (error) { expect((error as ExecError).status).toBe(1) diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts index 2a772fe5..4e37d7a9 100644 --- a/tests/commands/channels/lint.test.ts +++ b/tests/commands/channels/lint.test.ts @@ -9,7 +9,7 @@ describe('channels:lint', () => { it('will show a message if the file contains a syntax error', () => { try { const cmd = - 'npm run channels:lint -- --channels=tests/__data__/input/channels-lint/channels-lint.channels.xml' + 'npm run channels:lint --- --channels=tests/__data__/input/channels-lint/channels-lint.channels.xml' execSync(cmd, { encoding: 'utf8' }) process.exit(1) } catch (error) { diff --git a/tests/commands/channels/parse.test.ts b/tests/commands/channels/parse.test.ts index feb3af67..5ca5ad87 100644 --- a/tests/commands/channels/parse.test.ts +++ b/tests/commands/channels/parse.test.ts @@ -13,7 +13,7 @@ beforeEach(() => { describe('channels:parse', () => { it('can parse channels', () => { const cmd = - 'npm run channels:parse -- --config=tests/__data__/input/channels-parse/channels-parse.config.js --output=tests/__data__/output/channels.xml' + 'npm run channels:parse --- --config=tests/__data__/input/channels-parse/channels-parse.config.js --output=tests/__data__/output/channels.xml' execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/channels.xml')).toEqual( diff --git a/tests/commands/channels/validate.test.ts b/tests/commands/channels/validate.test.ts index 56598267..dfb1e907 100644 --- a/tests/commands/channels/validate.test.ts +++ b/tests/commands/channels/validate.test.ts @@ -14,7 +14,7 @@ if (os.platform() === 'win32') { describe('channels:validate', () => { it('will show a message if the file contains a duplicate', () => { try { - const cmd = `${ENV_VAR} npm run channels:validate -- --channels=tests/__data__/input/channels-validate/duplicate.channels.xml` + const cmd = `${ENV_VAR} npm run channels:validate --- --channels=tests/__data__/input/channels-validate/duplicate.channels.xml` execSync(cmd, { encoding: 'utf8' }) process.exit(1) } catch (error) { @@ -39,7 +39,7 @@ tests/__data__/input/channels-validate/duplicate.channels.xml it('will show a message if the file contains a channel with wrong xmltv_id', () => { try { - const cmd = `${ENV_VAR} npm run channels:validate -- --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml` + const cmd = `${ENV_VAR} npm run channels:validate --- --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml` execSync(cmd, { encoding: 'utf8' }) process.exit(1) } catch (error) { diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index 7c4ec98d..caad7708 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -17,7 +17,7 @@ beforeEach(() => { describe('epg:grab', () => { it('can grab epg by site name', () => { - const cmd = `${ENV_VAR} npm run grab -- --site=example.com --output=tests/__data__/output/guide.xml` + const cmd = `${ENV_VAR} npm run grab --- --site=example.com --output=tests/__data__/output/guide.xml` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guide.xml')).toEqual( @@ -26,7 +26,7 @@ describe('epg:grab', () => { }) it('can grab epg with multiple channels.xml files', () => { - const cmd = `${ENV_VAR} npm run grab -- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guide.xml')).toEqual( @@ -35,7 +35,7 @@ describe('epg:grab', () => { }) it('can grab epg with gzip option enabled', async () => { - const cmd = `${ENV_VAR} npm run grab -- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml --gzip` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml --gzip` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guide.xml')).toEqual( @@ -49,7 +49,7 @@ describe('epg:grab', () => { }) it('can grab epg with wildcard as output', () => { - const cmd = `${ENV_VAR} npm run grab -- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guides/en/example.com.xml')).toEqual( @@ -62,7 +62,7 @@ describe('epg:grab', () => { }) it('can grab epg then language filter enabled', () => { - const cmd = `${ENV_VAR} npm run grab -- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml --lang=fr` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml --lang=fr` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guides/fr/example.com.xml')).toEqual( @@ -71,7 +71,7 @@ describe('epg:grab', () => { }) it('can grab epg using custom channels list', () => { - const cmd = `${ENV_VAR} npm run grab -- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guide.xml')).toEqual( @@ -80,7 +80,7 @@ describe('epg:grab', () => { }) it('it will raise an error if the timeout is exceeded', () => { - const cmd = `${ENV_VAR} npm run grab -- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml --timeout=0` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml --timeout=0` const stdout = execSync(cmd, { encoding: 'utf8' }) expect(stdout).toContain('ERR: Connection timeout') From 0b2e2db664df4f5f8d94efacbecea78a359f6b6a Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 15 Dec 2024 18:08:01 +0300 Subject: [PATCH 09/64] Add support for absolute output path Resolves https://github.com/iptv-org/epg/issues/2342 --- scripts/core/guide.ts | 9 ++++++--- tests/commands/epg/grab.test.ts | 8 ++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/scripts/core/guide.ts b/scripts/core/guide.ts index 6c9921b7..11f3021f 100644 --- a/scripts/core/guide.ts +++ b/scripts/core/guide.ts @@ -1,6 +1,7 @@ import { Collection, Logger, DateTime, Storage, Zip } from '@freearhey/core' import { Channel } from 'epg-grabber' import { XMLTV } from '../core' +import path from 'path' type GuideProps = { channels: Collection @@ -22,7 +23,7 @@ export class Guide { this.channels = channels this.programs = programs this.logger = logger - this.storage = new Storage() + this.storage = new Storage(path.dirname(filepath)) this.filepath = filepath this.gzip = gzip || false } @@ -43,15 +44,17 @@ export class Guide { }) const xmlFilepath = this.filepath + const xmlFilename = path.basename(xmlFilepath) this.logger.info(` saving to "${xmlFilepath}"...`) - await this.storage.save(xmlFilepath, xmltv.toString()) + await this.storage.save(xmlFilename, xmltv.toString()) if (this.gzip) { const zip = new Zip() const compressed = await zip.compress(xmltv.toString()) const gzFilepath = `${this.filepath}.gz` + const gzFilename = path.basename(gzFilepath) this.logger.info(` saving to "${gzFilepath}"...`) - await this.storage.save(gzFilepath, compressed) + await this.storage.save(gzFilename, compressed) } } } diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index caad7708..1c5be77e 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -17,7 +17,9 @@ beforeEach(() => { describe('epg:grab', () => { it('can grab epg by site name', () => { - const cmd = `${ENV_VAR} npm run grab --- --site=example.com --output=tests/__data__/output/guide.xml` + const cmd = `${ENV_VAR} npm run grab --- --site=example.com --output=${path.resolve( + 'tests/__data__/output/guide.xml' + )}` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guide.xml')).toEqual( @@ -35,7 +37,9 @@ describe('epg:grab', () => { }) it('can grab epg with gzip option enabled', async () => { - const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml --gzip` + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=${path.resolve( + 'tests/__data__/output/guide.xml' + )} --gzip` execSync(cmd, { encoding: 'utf8' }) expect(content('tests/__data__/output/guide.xml')).toEqual( From d50bc8ee2fd523a8a7c60d782f50aa3ea4532f1e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 17 Dec 2024 20:14:19 +0300 Subject: [PATCH 10/64] Add missing space --- sites/9tv.co.il/readme.md | 2 +- sites/abc.net.au/readme.md | 2 +- sites/allente.dk/readme.md | 2 +- sites/allente.fi/readme.md | 2 +- sites/allente.no/readme.md | 2 +- sites/allente.se/readme.md | 2 +- sites/andorradifusio.ad/readme.md | 2 +- sites/anteltv.com.uy/readme.md | 2 +- sites/arianaafgtv.com/readme.md | 2 +- sites/arianatelevision.com/readme.md | 2 +- sites/arirang.com/readme.md | 2 +- sites/artonline.tv/readme.md | 2 +- sites/awilime.com/readme.md | 2 +- sites/bein.com/readme.md | 2 +- sites/beinsports.com/readme.md | 2 +- sites/berrymedia.co.kr/readme.md | 2 +- sites/cablego.com.pe/readme.md | 2 +- sites/cableplus.com.uy/readme.md | 2 +- sites/canalplus-haiti.com/readme.md | 2 +- sites/canalplus.com/readme.md | 2 +- sites/cgates.lt/readme.md | 2 +- sites/chaines-tv.orange.fr/readme.md | 2 +- sites/clickthecity.com/readme.md | 2 +- sites/comteco.com.bo/readme.md | 2 +- sites/content.astro.com.my/readme.md | 2 +- sites/cosmote.gr/readme.md | 2 +- sites/cubmu.com/readme.md | 2 +- sites/dens.tv/readme.md | 2 +- sites/digiturk.com.tr/readme.md | 2 +- sites/directv.com.ar/readme.md | 2 +- sites/directv.com.uy/readme.md | 2 +- sites/directv.com/readme.md | 2 +- sites/dishtv.in/readme.md | 2 +- sites/dsmart.com.tr/readme.md | 2 +- sites/dstv.com/readme.md | 2 +- sites/elcinema.com/readme.md | 2 +- sites/ena.skylifetv.co.kr/readme.md | 2 +- sites/energeek.cl/readme.md | 2 +- sites/entertainment.ie/readme.md | 2 +- sites/firstmedia.com/readme.md | 2 +- sites/flixed.io/readme.md | 2 +- sites/foxsports.com.au/readme.md | 2 +- sites/foxtel.com.au/readme.md | 2 +- sites/frikanalen.no/readme.md | 2 +- sites/gatotv.com/readme.md | 2 +- sites/getafteritmedia.com/readme.md | 2 +- sites/guida.tv/readme.md | 2 +- sites/guidatv.sky.it/readme.md | 2 +- sites/hd-plus.de/readme.md | 2 +- sites/horizon.tv/readme.md | 2 +- sites/hoy.tv/readme.md | 2 +- sites/i.mjh.nz/readme.md | 2 +- sites/i24news.tv/readme.md | 2 +- sites/iltalehti.fi/readme.md | 2 +- sites/indihometv.com/readme.md | 2 +- sites/ionplustv.com/readme.md | 2 +- sites/ipko.com/readme.md | 2 +- sites/kan.org.il/readme.md | 2 +- sites/knr.gl/readme.md | 2 +- sites/kplus.vn/readme.md | 2 +- sites/kvf.fo/readme.md | 2 +- sites/m.tv.sms.cz/readme.md | 2 +- sites/m.tving.com/readme.md | 2 +- sites/magticom.ge/readme.md | 2 +- sites/mako.co.il/readme.md | 2 +- sites/maxtv.hrvatskitelekom.hr/readme.md | 2 +- sites/maxtvgo.mk/readme.md | 2 +- sites/mediagenie.co.kr/readme.md | 2 +- sites/mediaklikk.hu/readme.md | 2 +- sites/mediasetinfinity.mediaset.it/readme.md | 2 +- sites/melita.com/readme.md | 2 +- sites/meo.pt/readme.md | 2 +- sites/meuguia.tv/readme.md | 2 +- sites/mewatch.sg/readme.md | 2 +- sites/mi.tv/readme.md | 2 +- sites/mncvision.id/readme.md | 2 +- sites/moji.id/readme.md | 2 +- sites/mon-programme-tv.be/readme.md | 2 +- sites/movistarplus.es/readme.md | 2 +- sites/mtel.ba/readme.md | 2 +- sites/mts.rs/readme.md | 2 +- sites/mujtvprogram.cz/readme.md | 2 +- sites/musor.tv/readme.md | 2 +- sites/mysky.com.ph/readme.md | 2 +- sites/mytelly.co.uk/readme.md | 2 +- sites/mytvsuper.com/readme.md | 2 +- sites/nhkworldpremium.com/readme.md | 2 +- sites/nhl.com/readme.md | 2 +- sites/nostv.pt/readme.md | 2 +- sites/novacyprus.com/readme.md | 2 +- sites/novasports.gr/readme.md | 2 +- sites/nowplayer.now.com/readme.md | 2 +- sites/nuevosiglo.com.uy/readme.md | 2 +- sites/nzxmltv.com/readme.md | 2 +- sites/ontvtonight.com/readme.md | 2 +- sites/osn.com/readme.md | 2 +- sites/pbsguam.org/readme.md | 2 +- sites/pickx.be/readme.md | 2 +- sites/player.ee.co.uk/readme.md | 2 +- sites/playtv.unifi.com.my/readme.md | 2 +- sites/plex.tv/readme.md | 2 +- sites/programacion-tv.elpais.com/readme.md | 2 +- sites/programacion.tcc.com.uy/readme.md | 2 +- sites/programetv.ro/readme.md | 2 +- sites/programme-tv.net/readme.md | 2 +- sites/programme-tv.vini.pf/readme.md | 2 +- sites/programme.tvb.com/readme.md | 2 +- sites/programtv.onet.pl/readme.md | 2 +- sites/raiplay.it/readme.md | 2 +- sites/reportv.com.ar/readme.md | 2 +- sites/rev.bs/readme.md | 2 +- sites/rotana.net/readme.md | 2 +- sites/rtb.gov.bn/readme.md | 2 +- sites/rthk.hk/readme.md | 2 +- sites/rtmklik.rtm.gov.my/readme.md | 2 +- sites/rtp.pt/readme.md | 2 +- sites/ruv.is/readme.md | 2 +- sites/s.mxtv.jp/README.md | 2 +- sites/sat.tv/readme.md | 2 +- sites/shahid.mbc.net/readme.md | 2 +- sites/siba.com.co/readme.md | 2 +- sites/singtel.com/readme.md | 2 +- sites/sjonvarp.is/readme.md | 2 +- sites/sky.co.nz/readme.md | 2 +- sites/sky.com/readme.md | 2 +- sites/sky.de/readme.md | 2 +- sites/skylife.co.kr/readme.md | 2 +- sites/skyperfectv.co.jp/README.md | 2 +- sites/starhubtvplus.com/readme.md | 2 +- sites/startimestv.com/readme.md | 2 +- sites/streamingtvguides.com/readme.md | 2 +- sites/superguidatv.it/readme.md | 2 +- sites/taiwanplus.com/readme.md | 2 +- sites/tapdmv.com/readme.md | 2 +- sites/telenet.tv/readme.md | 2 +- sites/teliatv.ee/readme.md | 2 +- sites/telkussa.fi/readme.md | 2 +- sites/telsu.fi/readme.md | 2 +- sites/tivu.tv/readme.md | 2 +- sites/toonamiaftermath.com/readme.md | 2 +- sites/turksatkablo.com.tr/readme.md | 2 +- sites/tv-programme.telecablesat.fr/readme.md | 2 +- sites/tv.blue.ch/readme.md | 2 +- sites/tv.cctv.com/readme.md | 2 +- sites/tv.dir.bg/readme.md | 2 +- sites/tv.lv/readme.md | 2 +- sites/tv.magenta.at/readme.md | 2 +- sites/tv.mail.ru/readme.md | 2 +- sites/tv.movistar.com.pe/readme.md | 2 +- sites/tv.nu/readme.md | 2 +- sites/tv.post.lu/readme.md | 2 +- sites/tv.trueid.net/readme.md | 2 +- sites/tv.yandex.ru/readme.md | 2 +- sites/tv.yettel.hu/readme.md | 2 +- sites/tv24.co.uk/readme.md | 2 +- sites/tv24.se/readme.md | 2 +- sites/tv2go.t-2.net/readme.md | 2 +- sites/tva.tv/readme.md | 2 +- sites/tvarenasport.com/readme.md | 2 +- sites/tvarenasport.hr/readme.md | 2 +- sites/tvcesoir.fr/readme.md | 2 +- sites/tvcubana.icrt.cu/readme.md | 2 +- sites/tvgids.nl/readme.md | 2 +- sites/tvguide.com/readme.md | 2 +- sites/tvguide.myjcom.jp/readme.md | 2 +- sites/tvhebdo.com/readme.md | 2 +- sites/tvheute.at/readme.md | 2 +- sites/tvim.tv/readme.md | 2 +- sites/tvireland.ie/readme.md | 2 +- sites/tvmi.mt/readme.md | 2 +- sites/tvmusor.hu/readme.md | 2 +- sites/tvpassport.com/readme.md | 2 +- sites/tvplus.com.tr/readme.md | 2 +- sites/tvprofil.com/readme.md | 2 +- sites/tvtv.us/readme.md | 2 +- sites/v3.myafn.dodmedia.osd.mil/readme.md | 2 +- sites/vidio.com/readme.md | 2 +- sites/virginmediatelevision.ie/readme.md | 2 +- sites/virgintvgo.virginmedia.com/readme.md | 2 +- sites/visionplus.id/readme.md | 2 +- sites/vivacom.bg/readme.md | 2 +- sites/vtm.be/readme.md | 2 +- sites/walesi.com.fj/readme.md | 2 +- sites/watch.sportsnet.ca/readme.md | 2 +- sites/watchyour.tv/readme.md | 2 +- sites/wavve.com/readme.md | 2 +- sites/web.magentatv.de/readme.md | 2 +- sites/webtv.delta.nl/readme.md | 2 +- sites/worldfishingnetwork.com/readme.md | 2 +- sites/www3.nhk.or.jp/readme.md | 2 +- sites/xumo.tv/readme.md | 2 +- sites/zap.co.ao/readme.md | 2 +- sites/ziggogo.tv/readme.md | 2 +- sites/znbc.co.zm/readme.md | 2 +- sites/zuragt.mn/readme.md | 2 +- 195 files changed, 195 insertions(+), 195 deletions(-) diff --git a/sites/9tv.co.il/readme.md b/sites/9tv.co.il/readme.md index 33162169..873f30b9 100644 --- a/sites/9tv.co.il/readme.md +++ b/sites/9tv.co.il/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=9tv.co.il ### Test ```sh -npm test ---9tv.co.il +npm test --- 9tv.co.il ``` diff --git a/sites/abc.net.au/readme.md b/sites/abc.net.au/readme.md index f8248933..cd6902ec 100644 --- a/sites/abc.net.au/readme.md +++ b/sites/abc.net.au/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/abc.net.au/abc.net.au.config.js --ou ### Test ```sh -npm test ---abc.net.au +npm test --- abc.net.au ``` diff --git a/sites/allente.dk/readme.md b/sites/allente.dk/readme.md index f1b164d3..cb60865d 100644 --- a/sites/allente.dk/readme.md +++ b/sites/allente.dk/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/allente.dk/allente.dk.config.js --ou ### Test ```sh -npm test ---allente.dk +npm test --- allente.dk ``` diff --git a/sites/allente.fi/readme.md b/sites/allente.fi/readme.md index b494e6ae..9753d24c 100644 --- a/sites/allente.fi/readme.md +++ b/sites/allente.fi/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/allente.fi/allente.fi.config.js --ou ### Test ```sh -npm test ---allente.fi +npm test --- allente.fi ``` diff --git a/sites/allente.no/readme.md b/sites/allente.no/readme.md index 1a3b6351..2adc9524 100644 --- a/sites/allente.no/readme.md +++ b/sites/allente.no/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/allente.no/allente.no.config.js --ou ### Test ```sh -npm test ---allente.no +npm test --- allente.no ``` diff --git a/sites/allente.se/readme.md b/sites/allente.se/readme.md index b3c1f91c..b903b1f6 100644 --- a/sites/allente.se/readme.md +++ b/sites/allente.se/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/allente.se/allente.se.config.js --ou ### Test ```sh -npm test ---allente.se +npm test --- allente.se ``` diff --git a/sites/andorradifusio.ad/readme.md b/sites/andorradifusio.ad/readme.md index 63031e11..e036d02d 100644 --- a/sites/andorradifusio.ad/readme.md +++ b/sites/andorradifusio.ad/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=andorradifusio.ad ### Test ```sh -npm test ---andorradifusio.ad +npm test --- andorradifusio.ad ``` diff --git a/sites/anteltv.com.uy/readme.md b/sites/anteltv.com.uy/readme.md index 94f94d68..60812d17 100644 --- a/sites/anteltv.com.uy/readme.md +++ b/sites/anteltv.com.uy/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/anteltv.com.uy/anteltv.com.uy.config ### Test ```sh -npm test ---anteltv.com.uy +npm test --- anteltv.com.uy ``` diff --git a/sites/arianaafgtv.com/readme.md b/sites/arianaafgtv.com/readme.md index 2cd69b3e..a75d4db1 100644 --- a/sites/arianaafgtv.com/readme.md +++ b/sites/arianaafgtv.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=arianaafgtv.com ### Test ```sh -npm test ---arianaafgtv.com +npm test --- arianaafgtv.com ``` diff --git a/sites/arianatelevision.com/readme.md b/sites/arianatelevision.com/readme.md index 89f5aa7b..f5046183 100644 --- a/sites/arianatelevision.com/readme.md +++ b/sites/arianatelevision.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=arianatelevision.com ### Test ```sh -npm test ---arianatelevision.com +npm test --- arianatelevision.com ``` diff --git a/sites/arirang.com/readme.md b/sites/arirang.com/readme.md index 88c530ee..e94e39e0 100644 --- a/sites/arirang.com/readme.md +++ b/sites/arirang.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=arirang.com ### Test ```sh -npm test ---arirang.com +npm test --- arirang.com ``` diff --git a/sites/artonline.tv/readme.md b/sites/artonline.tv/readme.md index 367278ac..d8142ef9 100644 --- a/sites/artonline.tv/readme.md +++ b/sites/artonline.tv/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=artonline.tv ### Test ```sh -npm test ---artonline.tv +npm test --- artonline.tv ``` diff --git a/sites/awilime.com/readme.md b/sites/awilime.com/readme.md index 7484ca4a..ca405883 100644 --- a/sites/awilime.com/readme.md +++ b/sites/awilime.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/awilime.com/awilime.com.config.js -- ### Test ```sh -npm test ---awilime.com +npm test --- awilime.com ``` diff --git a/sites/bein.com/readme.md b/sites/bein.com/readme.md index c50c9f62..815d13fd 100644 --- a/sites/bein.com/readme.md +++ b/sites/bein.com/readme.md @@ -35,5 +35,5 @@ npm run channels:parse --- --config=./sites/bein.com/bein.com.config.js --output ### Test ```sh -npm test ---bein.com +npm test --- bein.com ``` diff --git a/sites/beinsports.com/readme.md b/sites/beinsports.com/readme.md index da021ddc..a9195298 100644 --- a/sites/beinsports.com/readme.md +++ b/sites/beinsports.com/readme.md @@ -26,5 +26,5 @@ npm run channels:parse --- --config=./sites/beinsports.com/beinsports.com.config ### Test ```sh -npm test ---beinsports.com +npm test --- beinsports.com ``` diff --git a/sites/berrymedia.co.kr/readme.md b/sites/berrymedia.co.kr/readme.md index 1bad04e5..45edd929 100644 --- a/sites/berrymedia.co.kr/readme.md +++ b/sites/berrymedia.co.kr/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=berrymedia.co.kr ### Test ```sh -npm test ---berrymedia.co.kr +npm test --- berrymedia.co.kr ``` diff --git a/sites/cablego.com.pe/readme.md b/sites/cablego.com.pe/readme.md index 721e3ef8..d72d71e6 100644 --- a/sites/cablego.com.pe/readme.md +++ b/sites/cablego.com.pe/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/cablego.com.pe/cablego.com.pe.config ### Test ```sh -npm test ---cablego.com.pe +npm test --- cablego.com.pe ``` diff --git a/sites/cableplus.com.uy/readme.md b/sites/cableplus.com.uy/readme.md index 219e432d..d90cdf1a 100644 --- a/sites/cableplus.com.uy/readme.md +++ b/sites/cableplus.com.uy/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/cableplus.com.uy/cableplus.com.uy.co ### Test ```sh -npm test ---cableplus.com.uy +npm test --- cableplus.com.uy ``` diff --git a/sites/canalplus-haiti.com/readme.md b/sites/canalplus-haiti.com/readme.md index bd378f07..5ba0efbc 100644 --- a/sites/canalplus-haiti.com/readme.md +++ b/sites/canalplus-haiti.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/canalplus-haiti.com/canalplus-haiti. ### Test ```sh -npm test ---canalplus-haiti.com +npm test --- canalplus-haiti.com ``` diff --git a/sites/canalplus.com/readme.md b/sites/canalplus.com/readme.md index 56ce2500..6e1b538b 100644 --- a/sites/canalplus.com/readme.md +++ b/sites/canalplus.com/readme.md @@ -56,5 +56,5 @@ npm run channels:parse --- --config=./sites/canalplus.com/canalplus.com.config.j ### Test ```sh -npm test ---canalplus.com +npm test --- canalplus.com ``` diff --git a/sites/cgates.lt/readme.md b/sites/cgates.lt/readme.md index 125e5ec5..8e5368c7 100644 --- a/sites/cgates.lt/readme.md +++ b/sites/cgates.lt/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/cgates.lt/cgates.lt.config.js --outp ### Test ```sh -npm test ---cgates.lt +npm test --- cgates.lt ``` diff --git a/sites/chaines-tv.orange.fr/readme.md b/sites/chaines-tv.orange.fr/readme.md index 4cf90bb8..50a8dada 100644 --- a/sites/chaines-tv.orange.fr/readme.md +++ b/sites/chaines-tv.orange.fr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/chaines-tv.orange.fr/chaines-tv.oran ### Test ```sh -npm test ---chaines-tv.orange.fr +npm test --- chaines-tv.orange.fr ``` diff --git a/sites/clickthecity.com/readme.md b/sites/clickthecity.com/readme.md index b1e940f4..7e5babbe 100644 --- a/sites/clickthecity.com/readme.md +++ b/sites/clickthecity.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/clickthecity.com/clickthecity.com.co ### Test ```sh -npm test ---clickthecity.com +npm test --- clickthecity.com ``` diff --git a/sites/comteco.com.bo/readme.md b/sites/comteco.com.bo/readme.md index f5628581..6ca36ec9 100644 --- a/sites/comteco.com.bo/readme.md +++ b/sites/comteco.com.bo/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=comteco.com.bo ### Test ```sh -npm test ---comteco.com.bo +npm test --- comteco.com.bo ``` diff --git a/sites/content.astro.com.my/readme.md b/sites/content.astro.com.my/readme.md index 409d3771..3a52fbe8 100644 --- a/sites/content.astro.com.my/readme.md +++ b/sites/content.astro.com.my/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/content.astro.com.my/content.astro.c ### Test ```sh -npm test ---content.astro.com.my +npm test --- content.astro.com.my ``` diff --git a/sites/cosmote.gr/readme.md b/sites/cosmote.gr/readme.md index d3cfdb32..34d51abe 100644 --- a/sites/cosmote.gr/readme.md +++ b/sites/cosmote.gr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/cosmote.gr/cosmote.gr.config.js --ou ### Test ```sh -npm test ---cosmote.gr +npm test --- cosmote.gr ``` diff --git a/sites/cubmu.com/readme.md b/sites/cubmu.com/readme.md index a2de893d..d1f455b7 100644 --- a/sites/cubmu.com/readme.md +++ b/sites/cubmu.com/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=sites/cubmu.com/cubmu.com.config.js --output ### Test ```sh -npm test ---cubmu.com +npm test --- cubmu.com ``` diff --git a/sites/dens.tv/readme.md b/sites/dens.tv/readme.md index 0e60cde2..90b3902a 100644 --- a/sites/dens.tv/readme.md +++ b/sites/dens.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=sites/dens.tv/dens.tv.config.js --output=sit ### Test ```sh -npm test ---dens.tv +npm test --- dens.tv ``` diff --git a/sites/digiturk.com.tr/readme.md b/sites/digiturk.com.tr/readme.md index cd5dad00..d5a0f1de 100644 --- a/sites/digiturk.com.tr/readme.md +++ b/sites/digiturk.com.tr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/digiturk.com.tr/digiturk.com.tr.conf ### Test ```sh -npm test ---digiturk.com.tr +npm test --- digiturk.com.tr ``` diff --git a/sites/directv.com.ar/readme.md b/sites/directv.com.ar/readme.md index 10495ab8..55a4983d 100644 --- a/sites/directv.com.ar/readme.md +++ b/sites/directv.com.ar/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=directv.com.ar ### Test ```sh -npm test ---directv.com.ar +npm test --- directv.com.ar ``` diff --git a/sites/directv.com.uy/readme.md b/sites/directv.com.uy/readme.md index cef00722..ecc1ce93 100644 --- a/sites/directv.com.uy/readme.md +++ b/sites/directv.com.uy/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=directv.com.uy ### Test ```sh -npm test ---directv.com.uy +npm test --- directv.com.uy ``` diff --git a/sites/directv.com/readme.md b/sites/directv.com/readme.md index 0a1e944b..6d6408d0 100644 --- a/sites/directv.com/readme.md +++ b/sites/directv.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/directv.com/directv.com.config.js -- ### Test ```sh -npm test ---directv.com +npm test --- directv.com ``` diff --git a/sites/dishtv.in/readme.md b/sites/dishtv.in/readme.md index 3c88f417..907e4a4d 100644 --- a/sites/dishtv.in/readme.md +++ b/sites/dishtv.in/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/dishtv.in/dishtv.in.config.js --outp ### Test ```sh -npm test ---dishtv.in +npm test --- dishtv.in ``` diff --git a/sites/dsmart.com.tr/readme.md b/sites/dsmart.com.tr/readme.md index 6dfd9c6f..f4307203 100644 --- a/sites/dsmart.com.tr/readme.md +++ b/sites/dsmart.com.tr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.j ### Test ```sh -npm test ---dsmart.com.tr +npm test --- dsmart.com.tr ``` diff --git a/sites/dstv.com/readme.md b/sites/dstv.com/readme.md index d51ada73..33342c89 100644 --- a/sites/dstv.com/readme.md +++ b/sites/dstv.com/readme.md @@ -66,5 +66,5 @@ npm run channels:parse --- --config=./sites/dstv.com/dstv.com.config.js --output ### Test ```sh -npm test ---dstv.com +npm test --- dstv.com ``` diff --git a/sites/elcinema.com/readme.md b/sites/elcinema.com/readme.md index 48c318b2..f14747ee 100644 --- a/sites/elcinema.com/readme.md +++ b/sites/elcinema.com/readme.md @@ -35,5 +35,5 @@ npm run channels:parse --- --config=./sites/elcinema.com/elcinema.com.config.js ### Test ```sh -npm test ---elcinema.com +npm test --- elcinema.com ``` diff --git a/sites/ena.skylifetv.co.kr/readme.md b/sites/ena.skylifetv.co.kr/readme.md index 5f15e6e2..0eba03ef 100644 --- a/sites/ena.skylifetv.co.kr/readme.md +++ b/sites/ena.skylifetv.co.kr/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=ena.skylifetv.co.kr ### Test ```sh -npm test ---ena.skylifetv.co.kr +npm test --- ena.skylifetv.co.kr ``` diff --git a/sites/energeek.cl/readme.md b/sites/energeek.cl/readme.md index c6158d03..424eea91 100644 --- a/sites/energeek.cl/readme.md +++ b/sites/energeek.cl/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=energeek.cl ### Test ```sh -npm test ---energeek.cl +npm test --- energeek.cl ``` diff --git a/sites/entertainment.ie/readme.md b/sites/entertainment.ie/readme.md index 5b4fdb93..fbab9237 100644 --- a/sites/entertainment.ie/readme.md +++ b/sites/entertainment.ie/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/entertainment.ie/entertainment.ie.co ### Test ```sh -npm test ---entertainment.ie +npm test --- entertainment.ie ``` diff --git a/sites/firstmedia.com/readme.md b/sites/firstmedia.com/readme.md index 9b20063e..bb2c68e9 100644 --- a/sites/firstmedia.com/readme.md +++ b/sites/firstmedia.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/firstmedia.com/firstmedia.com.config ### Test ```sh -npm test ---firstmedia.com +npm test --- firstmedia.com ``` diff --git a/sites/flixed.io/readme.md b/sites/flixed.io/readme.md index f514b0f0..d8e738a4 100644 --- a/sites/flixed.io/readme.md +++ b/sites/flixed.io/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=flixed.io ### Test ```sh -npm test ---flixed.io +npm test --- flixed.io ``` diff --git a/sites/foxsports.com.au/readme.md b/sites/foxsports.com.au/readme.md index eef7cb5c..c68209a8 100644 --- a/sites/foxsports.com.au/readme.md +++ b/sites/foxsports.com.au/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/foxsports.com.au/foxsports.com.au.co ### Test ```sh -npm test ---foxsports.com.au +npm test --- foxsports.com.au ``` diff --git a/sites/foxtel.com.au/readme.md b/sites/foxtel.com.au/readme.md index 6bbce500..b203ab45 100644 --- a/sites/foxtel.com.au/readme.md +++ b/sites/foxtel.com.au/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/foxtel.com.au/foxtel.com.au.config.j ### Test ```sh -npm test ---foxtel.com.au +npm test --- foxtel.com.au ``` diff --git a/sites/frikanalen.no/readme.md b/sites/frikanalen.no/readme.md index 452fcc46..20b16e6a 100644 --- a/sites/frikanalen.no/readme.md +++ b/sites/frikanalen.no/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=frikanalen.no ### Test ```sh -npm test ---frikanalen.no +npm test --- frikanalen.no ``` diff --git a/sites/gatotv.com/readme.md b/sites/gatotv.com/readme.md index 87af0831..1f8cefd2 100644 --- a/sites/gatotv.com/readme.md +++ b/sites/gatotv.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/gatotv.com/gatotv.com.config.js --ou ### Test ```sh -npm test ---gatotv.com +npm test --- gatotv.com ``` diff --git a/sites/getafteritmedia.com/readme.md b/sites/getafteritmedia.com/readme.md index fdf1cb10..7ae91743 100644 --- a/sites/getafteritmedia.com/readme.md +++ b/sites/getafteritmedia.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=getafteritmedia.com ### Test ```sh -npm test ---getafteritmedia.com +npm test --- getafteritmedia.com ``` diff --git a/sites/guida.tv/readme.md b/sites/guida.tv/readme.md index 4c5153e6..257ff0e8 100644 --- a/sites/guida.tv/readme.md +++ b/sites/guida.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/guida.tv/guida.tv.config.js --output ### Test ```sh -npm test ---guida.tv +npm test --- guida.tv ``` diff --git a/sites/guidatv.sky.it/readme.md b/sites/guidatv.sky.it/readme.md index dfd38cc5..63076632 100644 --- a/sites/guidatv.sky.it/readme.md +++ b/sites/guidatv.sky.it/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/guidatv.sky.it/guidatv.sky.it.config ### Test ```sh -npm test ---guidatv.sky.it +npm test --- guidatv.sky.it ``` diff --git a/sites/hd-plus.de/readme.md b/sites/hd-plus.de/readme.md index 25ddf545..e2092854 100644 --- a/sites/hd-plus.de/readme.md +++ b/sites/hd-plus.de/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=hd-plus.de ### Test ```sh -npm test ---hd-plus.de +npm test --- hd-plus.de ``` diff --git a/sites/horizon.tv/readme.md b/sites/horizon.tv/readme.md index ea90d7d9..19cb31af 100644 --- a/sites/horizon.tv/readme.md +++ b/sites/horizon.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/horizon.tv/horizon.tv.config.js --ou ### Test ```sh -npm test ---horizon.tv +npm test --- horizon.tv ``` diff --git a/sites/hoy.tv/readme.md b/sites/hoy.tv/readme.md index 06a890f3..5180bc87 100644 --- a/sites/hoy.tv/readme.md +++ b/sites/hoy.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/hoy.tv/hoy.tv.config.js --output=./s ### Test ```sh -npm test ---hoy.tv +npm test --- hoy.tv ``` diff --git a/sites/i.mjh.nz/readme.md b/sites/i.mjh.nz/readme.md index 6ed4a6e9..a8c3367e 100644 --- a/sites/i.mjh.nz/readme.md +++ b/sites/i.mjh.nz/readme.md @@ -39,5 +39,5 @@ npm run channels:parse --- --config=./sites/i.mjh.nz/i.mjh.nz.config.js --output ### Test ```sh -npm test ---i.mjh.nz +npm test --- i.mjh.nz ``` diff --git a/sites/i24news.tv/readme.md b/sites/i24news.tv/readme.md index e82b7160..58c13602 100644 --- a/sites/i24news.tv/readme.md +++ b/sites/i24news.tv/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=i24news.tv ### Test ```sh -npm test ---i24news.tv +npm test --- i24news.tv ``` diff --git a/sites/iltalehti.fi/readme.md b/sites/iltalehti.fi/readme.md index d39e2378..2cf22d63 100644 --- a/sites/iltalehti.fi/readme.md +++ b/sites/iltalehti.fi/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/iltalehti.fi/iltalehti.fi.config.js ### Test ```sh -npm test ---iltalehti.fi +npm test --- iltalehti.fi ``` diff --git a/sites/indihometv.com/readme.md b/sites/indihometv.com/readme.md index 5ee5dd25..43f27706 100644 --- a/sites/indihometv.com/readme.md +++ b/sites/indihometv.com/readme.md @@ -19,5 +19,5 @@ npm run channels:parse --- --config=./sites/indihometv.com/indihometv.com.config ### Test ```sh -npm test ---indihometv.com +npm test --- indihometv.com ``` diff --git a/sites/ionplustv.com/readme.md b/sites/ionplustv.com/readme.md index d2ed29c7..e431af80 100644 --- a/sites/ionplustv.com/readme.md +++ b/sites/ionplustv.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=ionplustv.com ### Test ```sh -npm test ---ionplustv.com +npm test --- ionplustv.com ``` diff --git a/sites/ipko.com/readme.md b/sites/ipko.com/readme.md index 2ec3d912..fa54e122 100644 --- a/sites/ipko.com/readme.md +++ b/sites/ipko.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/ipko.com/ipko.com.config.js --output ### Test ```sh -npm test ---ipko.com +npm test --- ipko.com ``` diff --git a/sites/kan.org.il/readme.md b/sites/kan.org.il/readme.md index 4c215fb7..a83d01aa 100644 --- a/sites/kan.org.il/readme.md +++ b/sites/kan.org.il/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=kan.org.il ### Test ```sh -npm test ---kan.org.il +npm test --- kan.org.il ``` diff --git a/sites/knr.gl/readme.md b/sites/knr.gl/readme.md index c8b2a9b4..e690eb6e 100644 --- a/sites/knr.gl/readme.md +++ b/sites/knr.gl/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=knr.gl ### Test ```sh -npm test ---knr.gl +npm test --- knr.gl ``` diff --git a/sites/kplus.vn/readme.md b/sites/kplus.vn/readme.md index a14c2a42..1ac0bb5e 100644 --- a/sites/kplus.vn/readme.md +++ b/sites/kplus.vn/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/kplus.vn/kplus.vn.config.js --output ### Test ```sh -npm test ---kplus.vn +npm test --- kplus.vn ``` diff --git a/sites/kvf.fo/readme.md b/sites/kvf.fo/readme.md index 9adabd58..dc9debb3 100644 --- a/sites/kvf.fo/readme.md +++ b/sites/kvf.fo/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=kvf.fo ### Test ```sh -npm test ---kvf.fo +npm test --- kvf.fo ``` diff --git a/sites/m.tv.sms.cz/readme.md b/sites/m.tv.sms.cz/readme.md index 8e0ac032..b93a8e59 100644 --- a/sites/m.tv.sms.cz/readme.md +++ b/sites/m.tv.sms.cz/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/m.tv.sms.cz/m.tv.sms.cz.config.js -- ### Test ```sh -npm test ---m.tv.sms.cz +npm test --- m.tv.sms.cz ``` diff --git a/sites/m.tving.com/readme.md b/sites/m.tving.com/readme.md index d21fb013..a25fbd25 100644 --- a/sites/m.tving.com/readme.md +++ b/sites/m.tving.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/m.tving.com/m.tving.com.config.js -- ### Test ```sh -npm test ---m.tving.com +npm test --- m.tving.com ``` diff --git a/sites/magticom.ge/readme.md b/sites/magticom.ge/readme.md index 4c99050b..78711beb 100644 --- a/sites/magticom.ge/readme.md +++ b/sites/magticom.ge/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/magticom.ge/magticom.ge.config.js -- ### Test ```sh -npm test ---magticom.ge +npm test --- magticom.ge ``` diff --git a/sites/mako.co.il/readme.md b/sites/mako.co.il/readme.md index 84ce5aa9..621df880 100644 --- a/sites/mako.co.il/readme.md +++ b/sites/mako.co.il/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=mako.co.il ### Test ```sh -npm test ---mako.co.il +npm test --- mako.co.il ``` diff --git a/sites/maxtv.hrvatskitelekom.hr/readme.md b/sites/maxtv.hrvatskitelekom.hr/readme.md index 6426d5be..3f528ab9 100644 --- a/sites/maxtv.hrvatskitelekom.hr/readme.md +++ b/sites/maxtv.hrvatskitelekom.hr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/maxtv.hrvatskitelekom.hr/maxtv.hrvat ### Test ```sh -npm test ---maxtv.hrvatskitelekom.hr +npm test --- maxtv.hrvatskitelekom.hr ``` diff --git a/sites/maxtvgo.mk/readme.md b/sites/maxtvgo.mk/readme.md index 737b910a..951deb33 100644 --- a/sites/maxtvgo.mk/readme.md +++ b/sites/maxtvgo.mk/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/maxtvgo.mk/maxtvgo.mk.config.js --ou ### Test ```sh -npm test ---maxtvgo.mk +npm test --- maxtvgo.mk ``` diff --git a/sites/mediagenie.co.kr/readme.md b/sites/mediagenie.co.kr/readme.md index 1d32add7..f01b20e7 100644 --- a/sites/mediagenie.co.kr/readme.md +++ b/sites/mediagenie.co.kr/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=mediagenie.co.kr ### Test ```sh -npm test ---mediagenie.co.kr +npm test --- mediagenie.co.kr ``` diff --git a/sites/mediaklikk.hu/readme.md b/sites/mediaklikk.hu/readme.md index 30abba42..4d778d0e 100644 --- a/sites/mediaklikk.hu/readme.md +++ b/sites/mediaklikk.hu/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=mediaklikk.hu ### Test ```sh -npm test ---mediaklikk.hu +npm test --- mediaklikk.hu ``` diff --git a/sites/mediasetinfinity.mediaset.it/readme.md b/sites/mediasetinfinity.mediaset.it/readme.md index dd7e5b35..36c57fbb 100644 --- a/sites/mediasetinfinity.mediaset.it/readme.md +++ b/sites/mediasetinfinity.mediaset.it/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=mediasetinfinity.mediaset.it ### Test ```sh -npm test ---mediasetinfinity.mediaset.it +npm test --- mediasetinfinity.mediaset.it ``` diff --git a/sites/melita.com/readme.md b/sites/melita.com/readme.md index e4f51965..fa61da0f 100644 --- a/sites/melita.com/readme.md +++ b/sites/melita.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/melita.com/melita.com.config.js --ou ### Test ```sh -npm test ---melita.com +npm test --- melita.com ``` diff --git a/sites/meo.pt/readme.md b/sites/meo.pt/readme.md index 4b252007..79e5f975 100644 --- a/sites/meo.pt/readme.md +++ b/sites/meo.pt/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/meo.pt/meo.pt.config.js --output=./s ### Test ```sh -npm test ---meo.pt +npm test --- meo.pt ``` diff --git a/sites/meuguia.tv/readme.md b/sites/meuguia.tv/readme.md index d94d974f..dd6af3fa 100644 --- a/sites/meuguia.tv/readme.md +++ b/sites/meuguia.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/meuguia.tv/meuguia.tv.config.js --ou ### Test ```sh -npm test ---meuguia.tv +npm test --- meuguia.tv ``` diff --git a/sites/mewatch.sg/readme.md b/sites/mewatch.sg/readme.md index 3e263779..cf993cad 100644 --- a/sites/mewatch.sg/readme.md +++ b/sites/mewatch.sg/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mewatch.sg/mewatch.sg.config.js --ou ### Test ```sh -npm test ---mewatch.sg +npm test --- mewatch.sg ``` diff --git a/sites/mi.tv/readme.md b/sites/mi.tv/readme.md index 8547e387..0041bd15 100644 --- a/sites/mi.tv/readme.md +++ b/sites/mi.tv/readme.md @@ -28,5 +28,5 @@ npm run channels:parse --- --config=./sites/mi.tv/mi.tv.config.js --output=./sit ### Test ```sh -npm test ---mi.tv +npm test --- mi.tv ``` diff --git a/sites/mncvision.id/readme.md b/sites/mncvision.id/readme.md index 277f1f4f..ec0c6dbf 100644 --- a/sites/mncvision.id/readme.md +++ b/sites/mncvision.id/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=./sites/mncvision.id/mncvision.id.config.js ### Test ```sh -npm test ---mncvision.id +npm test --- mncvision.id ``` diff --git a/sites/moji.id/readme.md b/sites/moji.id/readme.md index 90587e4c..e2d49add 100644 --- a/sites/moji.id/readme.md +++ b/sites/moji.id/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=moji.id ### Test ```sh -npm test ---moji.id +npm test --- moji.id ``` diff --git a/sites/mon-programme-tv.be/readme.md b/sites/mon-programme-tv.be/readme.md index 5659e3c4..9194fbb0 100644 --- a/sites/mon-programme-tv.be/readme.md +++ b/sites/mon-programme-tv.be/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mon-programme-tv.be/mon-programme-tv ### Test ```sh -npm test ---mon-programme-tv.be +npm test --- mon-programme-tv.be ``` diff --git a/sites/movistarplus.es/readme.md b/sites/movistarplus.es/readme.md index 1df07153..4cba72c9 100644 --- a/sites/movistarplus.es/readme.md +++ b/sites/movistarplus.es/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/movistarplus.es/movistarplus.es.conf ### Test ```sh -npm test ---movistarplus.es +npm test --- movistarplus.es ``` diff --git a/sites/mtel.ba/readme.md b/sites/mtel.ba/readme.md index 1338bc2f..245dcb6d 100644 --- a/sites/mtel.ba/readme.md +++ b/sites/mtel.ba/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mtel.ba/mtel.ba.config.js --output=. ### Test ```sh -npm test ---mtel.ba +npm test --- mtel.ba ``` diff --git a/sites/mts.rs/readme.md b/sites/mts.rs/readme.md index 54d17e86..121667e1 100644 --- a/sites/mts.rs/readme.md +++ b/sites/mts.rs/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mts.rs/mts.rs.config.js --output=./s ### Test ```sh -npm test ---mts.rs +npm test --- mts.rs ``` diff --git a/sites/mujtvprogram.cz/readme.md b/sites/mujtvprogram.cz/readme.md index 385bff6a..57a73e42 100644 --- a/sites/mujtvprogram.cz/readme.md +++ b/sites/mujtvprogram.cz/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mujtvprogram.cz/mujtvprogram.cz.conf ### Test ```sh -npm test ---mujtvprogram.cz +npm test --- mujtvprogram.cz ``` diff --git a/sites/musor.tv/readme.md b/sites/musor.tv/readme.md index 902fdb33..1186e0bd 100644 --- a/sites/musor.tv/readme.md +++ b/sites/musor.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/musor.tv/musor.tv.config.js --output ### Test ```sh -npm test ---musor.tv +npm test --- musor.tv ``` diff --git a/sites/mysky.com.ph/readme.md b/sites/mysky.com.ph/readme.md index 285c2646..73f5ab33 100644 --- a/sites/mysky.com.ph/readme.md +++ b/sites/mysky.com.ph/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mysky.com.ph/mysky.com.ph.config.js ### Test ```sh -npm test ---mysky.com.ph +npm test --- mysky.com.ph ``` diff --git a/sites/mytelly.co.uk/readme.md b/sites/mytelly.co.uk/readme.md index 56221fe9..dd1380ea 100644 --- a/sites/mytelly.co.uk/readme.md +++ b/sites/mytelly.co.uk/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/mytelly.co.uk/mytelly.co.uk.config.j ### Test ```sh -npm test ---mytelly.co.uk +npm test --- mytelly.co.uk ``` diff --git a/sites/mytvsuper.com/readme.md b/sites/mytvsuper.com/readme.md index f5b8e618..ebfe1e0c 100644 --- a/sites/mytvsuper.com/readme.md +++ b/sites/mytvsuper.com/readme.md @@ -35,5 +35,5 @@ npm run channels:parse --- --config=./sites/mytvsuper.com/mytvsuper.com.config.j ### Test ```sh -npm test ---mytvsuper.com +npm test --- mytvsuper.com ``` diff --git a/sites/nhkworldpremium.com/readme.md b/sites/nhkworldpremium.com/readme.md index f398398e..74c0a674 100644 --- a/sites/nhkworldpremium.com/readme.md +++ b/sites/nhkworldpremium.com/readme.md @@ -21,5 +21,5 @@ npm run grab --- --site=nhkworldpremium.com --lang=ja ### Test ```sh -npm test ---nhkworldpremium.com +npm test --- nhkworldpremium.com ``` diff --git a/sites/nhl.com/readme.md b/sites/nhl.com/readme.md index df92f852..2c1963d3 100644 --- a/sites/nhl.com/readme.md +++ b/sites/nhl.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=nhl.com ### Test ```sh -npm test ---nhl.com +npm test --- nhl.com ``` diff --git a/sites/nostv.pt/readme.md b/sites/nostv.pt/readme.md index aebf7bee..62eed5f7 100644 --- a/sites/nostv.pt/readme.md +++ b/sites/nostv.pt/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/nostv.pt/nostv.pt.config.js --output ### Test ```sh -npm test ---nostv.pt +npm test --- nostv.pt ``` diff --git a/sites/novacyprus.com/readme.md b/sites/novacyprus.com/readme.md index afbdd748..1993c847 100644 --- a/sites/novacyprus.com/readme.md +++ b/sites/novacyprus.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/novacyprus.com/novacyprus.com.config ### Test ```sh -npm test ---novacyprus.com +npm test --- novacyprus.com ``` diff --git a/sites/novasports.gr/readme.md b/sites/novasports.gr/readme.md index 31e4357c..34278291 100644 --- a/sites/novasports.gr/readme.md +++ b/sites/novasports.gr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/novasports.gr/novasports.gr.config.j ### Test ```sh -npm test ---novasports.gr +npm test --- novasports.gr ``` diff --git a/sites/nowplayer.now.com/readme.md b/sites/nowplayer.now.com/readme.md index 2328de77..aff03ffb 100644 --- a/sites/nowplayer.now.com/readme.md +++ b/sites/nowplayer.now.com/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=./sites/nowplayer.now.com/nowplayer.now.com. ### Test ```sh -npm test ---nowplayer.now.com +npm test --- nowplayer.now.com ``` diff --git a/sites/nuevosiglo.com.uy/readme.md b/sites/nuevosiglo.com.uy/readme.md index 9935101e..e66ca442 100644 --- a/sites/nuevosiglo.com.uy/readme.md +++ b/sites/nuevosiglo.com.uy/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/nuevosiglo.com.uy/nuevosiglo.com.uy. ### Test ```sh -npm test ---nuevosiglo.com.uy +npm test --- nuevosiglo.com.uy ``` diff --git a/sites/nzxmltv.com/readme.md b/sites/nzxmltv.com/readme.md index b72ecb0b..d5d89651 100644 --- a/sites/nzxmltv.com/readme.md +++ b/sites/nzxmltv.com/readme.md @@ -57,5 +57,5 @@ npm run channels:parse --- --config=./sites/nzxmltv.com/nzxmltv.com.config.js -- ### Test ```sh -npm test ---nzxmltv.com +npm test --- nzxmltv.com ``` diff --git a/sites/ontvtonight.com/readme.md b/sites/ontvtonight.com/readme.md index d25f28cb..830dcf33 100644 --- a/sites/ontvtonight.com/readme.md +++ b/sites/ontvtonight.com/readme.md @@ -49,5 +49,5 @@ npm run channels:parse --- --config=./sites/ontvtonight.com/ontvtonight.com.conf ### Test ```sh -npm test ---ontvtonight.com +npm test --- ontvtonight.com ``` diff --git a/sites/osn.com/readme.md b/sites/osn.com/readme.md index e823ec41..c4b2a7f5 100644 --- a/sites/osn.com/readme.md +++ b/sites/osn.com/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=./sites/osn.com/osn.com.config.js --output=. ### Test ```sh -npm test ---osn.com +npm test --- osn.com ``` diff --git a/sites/pbsguam.org/readme.md b/sites/pbsguam.org/readme.md index 6e24c0b3..f6cefc93 100644 --- a/sites/pbsguam.org/readme.md +++ b/sites/pbsguam.org/readme.md @@ -13,5 +13,5 @@ npm run grab --- --site=pbsguam.org ### Test ```sh -npm test ---pbsguam.org +npm test --- pbsguam.org ``` diff --git a/sites/pickx.be/readme.md b/sites/pickx.be/readme.md index dea5a1f3..8f392ccd 100644 --- a/sites/pickx.be/readme.md +++ b/sites/pickx.be/readme.md @@ -57,5 +57,5 @@ npm run channels:parse --- --config=./sites/pickx.be/pickx.be.config.js --output ### Test ```sh -npm test ---pickx.be +npm test --- pickx.be ``` diff --git a/sites/player.ee.co.uk/readme.md b/sites/player.ee.co.uk/readme.md index 52e24ed2..b53e8409 100644 --- a/sites/player.ee.co.uk/readme.md +++ b/sites/player.ee.co.uk/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=player.ee.co.uk ### Test ```sh -npm test ---player.ee.co.uk +npm test --- player.ee.co.uk ``` diff --git a/sites/playtv.unifi.com.my/readme.md b/sites/playtv.unifi.com.my/readme.md index 2e894cd2..8ae74f09 100644 --- a/sites/playtv.unifi.com.my/readme.md +++ b/sites/playtv.unifi.com.my/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/playtv.unifi.com.my/playtv.unifi.com ### Test ```sh -npm test ---playtv.unifi.com.my +npm test --- playtv.unifi.com.my ``` diff --git a/sites/plex.tv/readme.md b/sites/plex.tv/readme.md index 6891a0e2..f94d57ff 100644 --- a/sites/plex.tv/readme.md +++ b/sites/plex.tv/readme.md @@ -19,5 +19,5 @@ Where to get the Plex Token? https://www.plexopedia.com/plex-media-server/genera ### Test ```sh -npm test ---plex.tv +npm test --- plex.tv ``` diff --git a/sites/programacion-tv.elpais.com/readme.md b/sites/programacion-tv.elpais.com/readme.md index 00e9d2f1..a99be315 100644 --- a/sites/programacion-tv.elpais.com/readme.md +++ b/sites/programacion-tv.elpais.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/programacion-tv.elpais.com/programac ### Test ```sh -npm test ---programacion-tv.elpais.com +npm test --- programacion-tv.elpais.com ``` diff --git a/sites/programacion.tcc.com.uy/readme.md b/sites/programacion.tcc.com.uy/readme.md index fed8b483..2b79a0ca 100644 --- a/sites/programacion.tcc.com.uy/readme.md +++ b/sites/programacion.tcc.com.uy/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/programacion.tcc.com.uy/programacion ### Test ```sh -npm test ---programacion.tcc.com.uy +npm test --- programacion.tcc.com.uy ``` diff --git a/sites/programetv.ro/readme.md b/sites/programetv.ro/readme.md index 14ea5d34..d1543c55 100644 --- a/sites/programetv.ro/readme.md +++ b/sites/programetv.ro/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/programetv.ro/programetv.ro.config.j ### Test ```sh -npm test ---programetv.ro +npm test --- programetv.ro ``` diff --git a/sites/programme-tv.net/readme.md b/sites/programme-tv.net/readme.md index 33c308e4..f6052abe 100644 --- a/sites/programme-tv.net/readme.md +++ b/sites/programme-tv.net/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/programme-tv.net/programme-tv.net.co ### Test ```sh -npm test ---programme-tv.net +npm test --- programme-tv.net ``` diff --git a/sites/programme-tv.vini.pf/readme.md b/sites/programme-tv.vini.pf/readme.md index 6f5c1154..d6f3589f 100644 --- a/sites/programme-tv.vini.pf/readme.md +++ b/sites/programme-tv.vini.pf/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/programme-tv.vini.pf/programme-tv.vi ### Test ```sh -npm test ---programme-tv.vini.pf +npm test --- programme-tv.vini.pf ``` diff --git a/sites/programme.tvb.com/readme.md b/sites/programme.tvb.com/readme.md index 19f9bed2..5fae4c89 100644 --- a/sites/programme.tvb.com/readme.md +++ b/sites/programme.tvb.com/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=sites/programme.tvb.com/programme.tvb.com.co ### Test ```sh -npm test ---programme.tvb.com +npm test --- programme.tvb.com ``` diff --git a/sites/programtv.onet.pl/readme.md b/sites/programtv.onet.pl/readme.md index 9b53c1e5..b408c0d8 100644 --- a/sites/programtv.onet.pl/readme.md +++ b/sites/programtv.onet.pl/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/programtv.onet.pl/programtv.onet.pl. ### Test ```sh -npm test ---programtv.onet.pl +npm test --- programtv.onet.pl ``` diff --git a/sites/raiplay.it/readme.md b/sites/raiplay.it/readme.md index 9daa21ad..9d8c1bd0 100644 --- a/sites/raiplay.it/readme.md +++ b/sites/raiplay.it/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=raiplay.it ### Test ```sh -npm test ---raiplay.it +npm test --- raiplay.it ``` diff --git a/sites/reportv.com.ar/readme.md b/sites/reportv.com.ar/readme.md index db059e22..4c55c20f 100644 --- a/sites/reportv.com.ar/readme.md +++ b/sites/reportv.com.ar/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/reportv.com.ar/reportv.com.ar.config ### Test ```sh -npm test ---reportv.com.ar +npm test --- reportv.com.ar ``` diff --git a/sites/rev.bs/readme.md b/sites/rev.bs/readme.md index 318f8d72..370c3bb1 100644 --- a/sites/rev.bs/readme.md +++ b/sites/rev.bs/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=rev.bs ### Test ```sh -npm test ---rev.bs +npm test --- rev.bs ``` diff --git a/sites/rotana.net/readme.md b/sites/rotana.net/readme.md index c72246ad..b11db828 100644 --- a/sites/rotana.net/readme.md +++ b/sites/rotana.net/readme.md @@ -35,5 +35,5 @@ npm run channels:parse --- --config=./sites/rotana.net/rotana.net.config.js --ou ### Test ```sh -npm test ---rotana.net +npm test --- rotana.net ``` diff --git a/sites/rtb.gov.bn/readme.md b/sites/rtb.gov.bn/readme.md index fe22b82d..4643d8a7 100644 --- a/sites/rtb.gov.bn/readme.md +++ b/sites/rtb.gov.bn/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=rtb.gov.bn ### Test ```sh -npm test ---rtb.gov.bn +npm test --- rtb.gov.bn ``` diff --git a/sites/rthk.hk/readme.md b/sites/rthk.hk/readme.md index c181c208..ce8224e1 100644 --- a/sites/rthk.hk/readme.md +++ b/sites/rthk.hk/readme.md @@ -19,5 +19,5 @@ npm run grab --- --site=rthk.hk --lang=en ### Test ```sh -npm test ---rthk.hk +npm test --- rthk.hk ``` diff --git a/sites/rtmklik.rtm.gov.my/readme.md b/sites/rtmklik.rtm.gov.my/readme.md index 25eeb22a..350bee32 100644 --- a/sites/rtmklik.rtm.gov.my/readme.md +++ b/sites/rtmklik.rtm.gov.my/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=rtmklik.rtm.gov.my ### Test ```sh -npm test ---rtmklik.rtm.gov.my +npm test --- rtmklik.rtm.gov.my ``` diff --git a/sites/rtp.pt/readme.md b/sites/rtp.pt/readme.md index b46fc38c..f71e7f71 100644 --- a/sites/rtp.pt/readme.md +++ b/sites/rtp.pt/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=rtp.pt ### Test ```sh -npm test ---rtp.pt +npm test --- rtp.pt ``` diff --git a/sites/ruv.is/readme.md b/sites/ruv.is/readme.md index cddc2542..8907e52f 100644 --- a/sites/ruv.is/readme.md +++ b/sites/ruv.is/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=ruv.is ### Test ```sh -npm test ---ruv.is +npm test --- ruv.is ``` diff --git a/sites/s.mxtv.jp/README.md b/sites/s.mxtv.jp/README.md index de3125e9..6fd61800 100644 --- a/sites/s.mxtv.jp/README.md +++ b/sites/s.mxtv.jp/README.md @@ -24,5 +24,5 @@ npm run channels:parse --- --config=./sites/s.mxtv.jp/s.mxtv.jp.config.js --outp ## Test ```sh -npm test ---s.mxtv.jp +npm test --- s.mxtv.jp ``` diff --git a/sites/sat.tv/readme.md b/sites/sat.tv/readme.md index 62fdf6be..3a0f3bbe 100644 --- a/sites/sat.tv/readme.md +++ b/sites/sat.tv/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=./sites/sat.tv/sat.tv.config.js --output=./s ### Test ```sh -npm test ---sat.tv +npm test --- sat.tv ``` diff --git a/sites/shahid.mbc.net/readme.md b/sites/shahid.mbc.net/readme.md index 8fd4a66a..80a06e6f 100644 --- a/sites/shahid.mbc.net/readme.md +++ b/sites/shahid.mbc.net/readme.md @@ -49,5 +49,5 @@ npm run channels:parse --- --config=./sites/shahid.mbc.net/shahid.mbc.net.config ### Test ```sh -npm test ---shahid.mbc.net +npm test --- shahid.mbc.net ``` diff --git a/sites/siba.com.co/readme.md b/sites/siba.com.co/readme.md index 46baec74..a157c86a 100644 --- a/sites/siba.com.co/readme.md +++ b/sites/siba.com.co/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=siba.com.co ### Test ```sh -npm test ---siba.com.co +npm test --- siba.com.co ``` diff --git a/sites/singtel.com/readme.md b/sites/singtel.com/readme.md index 3867c805..4d84bf25 100644 --- a/sites/singtel.com/readme.md +++ b/sites/singtel.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/singtel.com/singtel.com.config.js -- ### Test ```sh -npm test ---singtel.com +npm test --- singtel.com ``` diff --git a/sites/sjonvarp.is/readme.md b/sites/sjonvarp.is/readme.md index 29a385e7..316b51f5 100644 --- a/sites/sjonvarp.is/readme.md +++ b/sites/sjonvarp.is/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/sjonvarp.is/sjonvarp.is.config.js -- ### Test ```sh -npm test ---sjonvarp.is +npm test --- sjonvarp.is ``` diff --git a/sites/sky.co.nz/readme.md b/sites/sky.co.nz/readme.md index a917688e..6e776d41 100644 --- a/sites/sky.co.nz/readme.md +++ b/sites/sky.co.nz/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/sky.co.nz/sky.co.nz.config.js --outp ### Test ```sh -npm test ---sky.co.nz +npm test --- sky.co.nz ``` diff --git a/sites/sky.com/readme.md b/sites/sky.com/readme.md index 3bd39a47..e5737f5e 100644 --- a/sites/sky.com/readme.md +++ b/sites/sky.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/sky.com/sky.com.config.js --output=. ### Test ```sh -npm test ---sky.com +npm test --- sky.com ``` diff --git a/sites/sky.de/readme.md b/sites/sky.de/readme.md index 6bc5fc81..5819c240 100644 --- a/sites/sky.de/readme.md +++ b/sites/sky.de/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/sky.de/sky.de.config.js --output=./s ### Test ```sh -npm test ---sky.de +npm test --- sky.de ``` diff --git a/sites/skylife.co.kr/readme.md b/sites/skylife.co.kr/readme.md index 6b2ad116..80527d59 100644 --- a/sites/skylife.co.kr/readme.md +++ b/sites/skylife.co.kr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/skylife.co.kr/skylife.co.kr.config.j ### Test ```sh -npm test ---skylife.co.kr +npm test --- skylife.co.kr ``` diff --git a/sites/skyperfectv.co.jp/README.md b/sites/skyperfectv.co.jp/README.md index 59689f9f..0ae0fce9 100644 --- a/sites/skyperfectv.co.jp/README.md +++ b/sites/skyperfectv.co.jp/README.md @@ -24,5 +24,5 @@ npm run channels:parse --- --config=./sites/skyperfectv.co.jp/skyperfectv.co.jp. ## Test ```sh -npm test ---skyperfectv.co.jp +npm test --- skyperfectv.co.jp ``` diff --git a/sites/starhubtvplus.com/readme.md b/sites/starhubtvplus.com/readme.md index 8d6532ec..bed044ff 100644 --- a/sites/starhubtvplus.com/readme.md +++ b/sites/starhubtvplus.com/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=sites/starhubtvplus.com/starhubtvplus.com.co ### Test ```sh -npm test ---starhubtvplus.com +npm test --- starhubtvplus.com ``` diff --git a/sites/startimestv.com/readme.md b/sites/startimestv.com/readme.md index f37bdeaf..5ab8c1aa 100644 --- a/sites/startimestv.com/readme.md +++ b/sites/startimestv.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/startimestv.com/startimestv.com.conf ### Test ```sh -npm test ---startimestv.com +npm test --- startimestv.com ``` diff --git a/sites/streamingtvguides.com/readme.md b/sites/streamingtvguides.com/readme.md index 1d43ca71..9f97cf8d 100644 --- a/sites/streamingtvguides.com/readme.md +++ b/sites/streamingtvguides.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/streamingtvguides.com/streamingtvgui ### Test ```sh -npm test ---streamingtvguides.com +npm test --- streamingtvguides.com ``` diff --git a/sites/superguidatv.it/readme.md b/sites/superguidatv.it/readme.md index 65a4da04..cfa724ed 100644 --- a/sites/superguidatv.it/readme.md +++ b/sites/superguidatv.it/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/superguidatv.it/superguidatv.it.conf ### Test ```sh -npm test ---superguidatv.it +npm test --- superguidatv.it ``` diff --git a/sites/taiwanplus.com/readme.md b/sites/taiwanplus.com/readme.md index f4c58653..a44b63f1 100644 --- a/sites/taiwanplus.com/readme.md +++ b/sites/taiwanplus.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=taiwanplus.com ### Test ```sh -npm test ---taiwanplus.com +npm test --- taiwanplus.com ``` diff --git a/sites/tapdmv.com/readme.md b/sites/tapdmv.com/readme.md index 2a3912b0..4c2bf1d4 100644 --- a/sites/tapdmv.com/readme.md +++ b/sites/tapdmv.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tapdmv.com/tapdmv.com.config.js --ou ### Test ```sh -npm test ---tapdmv.com +npm test --- tapdmv.com ``` diff --git a/sites/telenet.tv/readme.md b/sites/telenet.tv/readme.md index 9d598d43..6db340bd 100644 --- a/sites/telenet.tv/readme.md +++ b/sites/telenet.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/telenet.tv/telenet.tv.config.js --ou ### Test ```sh -npm test ---telenet.tv +npm test --- telenet.tv ``` diff --git a/sites/teliatv.ee/readme.md b/sites/teliatv.ee/readme.md index e4ea0694..2f2255b6 100644 --- a/sites/teliatv.ee/readme.md +++ b/sites/teliatv.ee/readme.md @@ -49,5 +49,5 @@ npm run channels:parse --- --config=./sites/teliatv.ee/teliatv.ee.config.js --ou ### Test ```sh -npm test ---teliatv.ee +npm test --- teliatv.ee ``` diff --git a/sites/telkussa.fi/readme.md b/sites/telkussa.fi/readme.md index 173f8e20..c45c1204 100644 --- a/sites/telkussa.fi/readme.md +++ b/sites/telkussa.fi/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/telkussa.fi/telkussa.fi.config.js -- ### Test ```sh -npm test ---telkussa.fi +npm test --- telkussa.fi ``` diff --git a/sites/telsu.fi/readme.md b/sites/telsu.fi/readme.md index 8b15fd7c..5c29fd78 100644 --- a/sites/telsu.fi/readme.md +++ b/sites/telsu.fi/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/telsu.fi/telsu.fi.config.js --output ### Test ```sh -npm test ---telsu.fi +npm test --- telsu.fi ``` diff --git a/sites/tivu.tv/readme.md b/sites/tivu.tv/readme.md index 9a95a1d3..3ac1515e 100644 --- a/sites/tivu.tv/readme.md +++ b/sites/tivu.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tivu.tv/tivu.tv.config.js --output=. ### Test ```sh -npm test ---tivu.tv +npm test --- tivu.tv ``` diff --git a/sites/toonamiaftermath.com/readme.md b/sites/toonamiaftermath.com/readme.md index 6a3138a1..250e4d85 100644 --- a/sites/toonamiaftermath.com/readme.md +++ b/sites/toonamiaftermath.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=toonamiaftermath.com ### Test ```sh -npm test ---toonamiaftermath.com +npm test --- toonamiaftermath.com ``` diff --git a/sites/turksatkablo.com.tr/readme.md b/sites/turksatkablo.com.tr/readme.md index 94f13b0a..23841469 100644 --- a/sites/turksatkablo.com.tr/readme.md +++ b/sites/turksatkablo.com.tr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/turksatkablo.com.tr/turksatkablo.com ### Test ```sh -npm test ---turksatkablo.com.tr +npm test --- turksatkablo.com.tr ``` diff --git a/sites/tv-programme.telecablesat.fr/readme.md b/sites/tv-programme.telecablesat.fr/readme.md index 478a19f3..022d6ed9 100644 --- a/sites/tv-programme.telecablesat.fr/readme.md +++ b/sites/tv-programme.telecablesat.fr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv-programme.telecablesat.fr/tv-prog ### Test ```sh -npm test ---tv-programme.telecablesat.fr +npm test --- tv-programme.telecablesat.fr ``` diff --git a/sites/tv.blue.ch/readme.md b/sites/tv.blue.ch/readme.md index f37b3c98..238f38bb 100644 --- a/sites/tv.blue.ch/readme.md +++ b/sites/tv.blue.ch/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.blue.ch/tv.blue.ch.config.js --ou ### Test ```sh -npm test ---tv.blue.ch +npm test --- tv.blue.ch ``` diff --git a/sites/tv.cctv.com/readme.md b/sites/tv.cctv.com/readme.md index e0efa498..3a55978d 100644 --- a/sites/tv.cctv.com/readme.md +++ b/sites/tv.cctv.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=tv.cctv.com ### Test ```sh -npm test ---tv.cctv.com +npm test --- tv.cctv.com ``` diff --git a/sites/tv.dir.bg/readme.md b/sites/tv.dir.bg/readme.md index 8f81e17f..47f67840 100644 --- a/sites/tv.dir.bg/readme.md +++ b/sites/tv.dir.bg/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.dir.bg/tv.dir.bg.config.js --outp ### Test ```sh -npm test ---tv.dir.bg +npm test --- tv.dir.bg ``` diff --git a/sites/tv.lv/readme.md b/sites/tv.lv/readme.md index b07ba5c8..4b1b4492 100644 --- a/sites/tv.lv/readme.md +++ b/sites/tv.lv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.lv/tv.lv.config.js --output=./sit ### Test ```sh -npm test ---tv.lv +npm test --- tv.lv ``` diff --git a/sites/tv.magenta.at/readme.md b/sites/tv.magenta.at/readme.md index c2a87846..e3ac0686 100644 --- a/sites/tv.magenta.at/readme.md +++ b/sites/tv.magenta.at/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.magenta.at/tv.magenta.at.config.j ### Test ```sh -npm test ---tv.magenta.at +npm test --- tv.magenta.at ``` diff --git a/sites/tv.mail.ru/readme.md b/sites/tv.mail.ru/readme.md index fbd83777..cdf68fa5 100644 --- a/sites/tv.mail.ru/readme.md +++ b/sites/tv.mail.ru/readme.md @@ -19,5 +19,5 @@ npm run channels:parse --- --config=./sites/tv.mail.ru/tv.mail.ru.config.js --ou ### Test ```sh -npm test ---tv.mail.ru +npm test --- tv.mail.ru ``` diff --git a/sites/tv.movistar.com.pe/readme.md b/sites/tv.movistar.com.pe/readme.md index e339af0d..fafb0a0f 100644 --- a/sites/tv.movistar.com.pe/readme.md +++ b/sites/tv.movistar.com.pe/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.movistar.com.pe/tv.movistar.com.p ### Test ```sh -npm test ---tv.movistar.com.pe +npm test --- tv.movistar.com.pe ``` diff --git a/sites/tv.nu/readme.md b/sites/tv.nu/readme.md index d163d884..9cdb8ff9 100644 --- a/sites/tv.nu/readme.md +++ b/sites/tv.nu/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.nu/tv.nu.config.js --output=./sit ### Test ```sh -npm test ---tv.nu +npm test --- tv.nu ``` diff --git a/sites/tv.post.lu/readme.md b/sites/tv.post.lu/readme.md index 94c8d2f9..6f798934 100644 --- a/sites/tv.post.lu/readme.md +++ b/sites/tv.post.lu/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.post.lu/tv.post.lu.config.js --ou ### Test ```sh -npm test ---tv.post.lu +npm test --- tv.post.lu ``` diff --git a/sites/tv.trueid.net/readme.md b/sites/tv.trueid.net/readme.md index a3030ad7..0dfad099 100644 --- a/sites/tv.trueid.net/readme.md +++ b/sites/tv.trueid.net/readme.md @@ -35,5 +35,5 @@ npm run channels:parse --- --config=./sites/tv.trueid.net/tv.trueid.net.config.j ### Test ```sh -npm test ---tv.trueid.net +npm test --- tv.trueid.net ``` diff --git a/sites/tv.yandex.ru/readme.md b/sites/tv.yandex.ru/readme.md index f371b0d2..28c426af 100644 --- a/sites/tv.yandex.ru/readme.md +++ b/sites/tv.yandex.ru/readme.md @@ -42,5 +42,5 @@ npm run channels:parse --- --config=sites/tv.yandex.ru/tv.yandex.ru.config.js -- ### Test ```sh -npm test ---tv.yandex.ru +npm test --- tv.yandex.ru ``` diff --git a/sites/tv.yettel.hu/readme.md b/sites/tv.yettel.hu/readme.md index 4ee5264a..b27e2e28 100644 --- a/sites/tv.yettel.hu/readme.md +++ b/sites/tv.yettel.hu/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv.yettel.hu/tv.yettel.hu.config.js ### Test ```sh -npm test ---tv.yettel.hu +npm test --- tv.yettel.hu ``` diff --git a/sites/tv24.co.uk/readme.md b/sites/tv24.co.uk/readme.md index 589d73f4..b043bef7 100644 --- a/sites/tv24.co.uk/readme.md +++ b/sites/tv24.co.uk/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv24.co.uk/tv24.co.uk.config.js --ou ### Test ```sh -npm test ---tv24.co.uk +npm test --- tv24.co.uk ``` diff --git a/sites/tv24.se/readme.md b/sites/tv24.se/readme.md index 7a8df11a..7d670038 100644 --- a/sites/tv24.se/readme.md +++ b/sites/tv24.se/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv24.se/tv24.se.config.js --output=. ### Test ```sh -npm test ---tv24.se +npm test --- tv24.se ``` diff --git a/sites/tv2go.t-2.net/readme.md b/sites/tv2go.t-2.net/readme.md index 5e791ee0..49fceb5d 100644 --- a/sites/tv2go.t-2.net/readme.md +++ b/sites/tv2go.t-2.net/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tv2go.t-2.net/tv2go.t-2.net.config.j ### Test ```sh -npm test ---tv2go.t-2.net +npm test --- tv2go.t-2.net ``` diff --git a/sites/tva.tv/readme.md b/sites/tva.tv/readme.md index 7917c7e1..871bcdc2 100644 --- a/sites/tva.tv/readme.md +++ b/sites/tva.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tva.tv/tva.tv.config.js --output=./s ### Test ```sh -npm test ---tva.tv +npm test --- tva.tv ``` diff --git a/sites/tvarenasport.com/readme.md b/sites/tvarenasport.com/readme.md index 575fb287..f6d89c62 100644 --- a/sites/tvarenasport.com/readme.md +++ b/sites/tvarenasport.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvarenasport.com/tvarenasport.com.co ### Test ```sh -npm test ---tvarenasport.com +npm test --- tvarenasport.com ``` diff --git a/sites/tvarenasport.hr/readme.md b/sites/tvarenasport.hr/readme.md index 59f67ddb..e0164796 100644 --- a/sites/tvarenasport.hr/readme.md +++ b/sites/tvarenasport.hr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvarenasport.hr/tvarenasport.hr.conf ### Test ```sh -npm test ---tvarenasport.hr +npm test --- tvarenasport.hr ``` diff --git a/sites/tvcesoir.fr/readme.md b/sites/tvcesoir.fr/readme.md index a6240226..49dc6491 100644 --- a/sites/tvcesoir.fr/readme.md +++ b/sites/tvcesoir.fr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvcesoir.fr/tvcesoir.fr.config.js -- ### Test ```sh -npm test ---tvcesoir.fr +npm test --- tvcesoir.fr ``` diff --git a/sites/tvcubana.icrt.cu/readme.md b/sites/tvcubana.icrt.cu/readme.md index 8d8b1cb6..52a5cbdd 100644 --- a/sites/tvcubana.icrt.cu/readme.md +++ b/sites/tvcubana.icrt.cu/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=tvcubana.icrt.cu ### Test ```sh -npm test ---tvcubana.icrt.cu +npm test --- tvcubana.icrt.cu ``` diff --git a/sites/tvgids.nl/readme.md b/sites/tvgids.nl/readme.md index 3984a8d8..0b5c7dbd 100644 --- a/sites/tvgids.nl/readme.md +++ b/sites/tvgids.nl/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvgids.nl/tvgids.nl.config.js --outp ### Test ```sh -npm test ---tvgids.nl +npm test --- tvgids.nl ``` diff --git a/sites/tvguide.com/readme.md b/sites/tvguide.com/readme.md index c726b555..c33fa3c0 100644 --- a/sites/tvguide.com/readme.md +++ b/sites/tvguide.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvguide.com/tvguide.com.config.js -- ### Test ```sh -npm test ---tvguide.com +npm test --- tvguide.com ``` diff --git a/sites/tvguide.myjcom.jp/readme.md b/sites/tvguide.myjcom.jp/readme.md index 22aee36d..529e3ab7 100644 --- a/sites/tvguide.myjcom.jp/readme.md +++ b/sites/tvguide.myjcom.jp/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp. ### Test ```sh -npm test ---tvguide.myjcom.jp +npm test --- tvguide.myjcom.jp ``` diff --git a/sites/tvhebdo.com/readme.md b/sites/tvhebdo.com/readme.md index 914f9350..c9dc515b 100644 --- a/sites/tvhebdo.com/readme.md +++ b/sites/tvhebdo.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvhebdo.com/tvhebdo.com.config.js -- ### Test ```sh -npm test ---tvhebdo.com +npm test --- tvhebdo.com ``` diff --git a/sites/tvheute.at/readme.md b/sites/tvheute.at/readme.md index f809d42a..1e53e42d 100644 --- a/sites/tvheute.at/readme.md +++ b/sites/tvheute.at/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvheute.at/tvheute.at.config.js --ou ### Test ```sh -npm test ---tvheute.at +npm test --- tvheute.at ``` diff --git a/sites/tvim.tv/readme.md b/sites/tvim.tv/readme.md index 91837094..4c90da6f 100644 --- a/sites/tvim.tv/readme.md +++ b/sites/tvim.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvim.tv/tvim.tv.config.js --output=. ### Test ```sh -npm test ---tvim.tv +npm test --- tvim.tv ``` diff --git a/sites/tvireland.ie/readme.md b/sites/tvireland.ie/readme.md index ef430786..06f2110a 100644 --- a/sites/tvireland.ie/readme.md +++ b/sites/tvireland.ie/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvireland.ie/tvireland.ie.config.js ### Test ```sh -npm test ---tvireland.ie +npm test --- tvireland.ie ``` diff --git a/sites/tvmi.mt/readme.md b/sites/tvmi.mt/readme.md index 36ed1ee2..41bc9d58 100644 --- a/sites/tvmi.mt/readme.md +++ b/sites/tvmi.mt/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=tvmi.mt ### Test ```sh -npm test ---tvmi.mt +npm test --- tvmi.mt ``` diff --git a/sites/tvmusor.hu/readme.md b/sites/tvmusor.hu/readme.md index a6ed8187..16e5ec1a 100644 --- a/sites/tvmusor.hu/readme.md +++ b/sites/tvmusor.hu/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvmusor.hu/tvmusor.hu.config.js --ou ### Test ```sh -npm test ---tvmusor.hu +npm test --- tvmusor.hu ``` diff --git a/sites/tvpassport.com/readme.md b/sites/tvpassport.com/readme.md index eee6b40f..18f35e33 100644 --- a/sites/tvpassport.com/readme.md +++ b/sites/tvpassport.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvpassport.com/tvpassport.com.config ### Test ```sh -npm test ---tvpassport.com +npm test --- tvpassport.com ``` diff --git a/sites/tvplus.com.tr/readme.md b/sites/tvplus.com.tr/readme.md index c10e4d8a..71b3c3c4 100644 --- a/sites/tvplus.com.tr/readme.md +++ b/sites/tvplus.com.tr/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvplus.com.tr/tvplus.com.tr.config.j ### Test ```sh -npm test ---tvplus.com.tr +npm test --- tvplus.com.tr ``` diff --git a/sites/tvprofil.com/readme.md b/sites/tvprofil.com/readme.md index c8643855..39eb3309 100644 --- a/sites/tvprofil.com/readme.md +++ b/sites/tvprofil.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/tvprofil.com/tvprofil.com.config.js ### Test ```sh -npm test ---tvprofil.com +npm test --- tvprofil.com ``` diff --git a/sites/tvtv.us/readme.md b/sites/tvtv.us/readme.md index 35dff0f0..ceb3285b 100644 --- a/sites/tvtv.us/readme.md +++ b/sites/tvtv.us/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=tvtv.us ### Test ```sh -npm test ---tvtv.us +npm test --- tvtv.us ``` diff --git a/sites/v3.myafn.dodmedia.osd.mil/readme.md b/sites/v3.myafn.dodmedia.osd.mil/readme.md index 9e823170..3cce74c4 100644 --- a/sites/v3.myafn.dodmedia.osd.mil/readme.md +++ b/sites/v3.myafn.dodmedia.osd.mil/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/v3.myafn.dodmedia.osd.mil/v3.myafn.d ### Test ```sh -npm test ---v3.myafn.dodmedia.osd.mil +npm test --- v3.myafn.dodmedia.osd.mil ``` diff --git a/sites/vidio.com/readme.md b/sites/vidio.com/readme.md index 26ec5410..39a1c75e 100644 --- a/sites/vidio.com/readme.md +++ b/sites/vidio.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/vidio.com/vidio.com.config.js --outp ### Test ```sh -npm test ---vidio.com +npm test --- vidio.com ``` diff --git a/sites/virginmediatelevision.ie/readme.md b/sites/virginmediatelevision.ie/readme.md index 73b07850..dd8e7f4a 100644 --- a/sites/virginmediatelevision.ie/readme.md +++ b/sites/virginmediatelevision.ie/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=virginmediatelevision.ie ### Test ```sh -npm test ---virginmediatelevision.ie +npm test --- virginmediatelevision.ie ``` diff --git a/sites/virgintvgo.virginmedia.com/readme.md b/sites/virgintvgo.virginmedia.com/readme.md index 339c5f8b..98090f10 100644 --- a/sites/virgintvgo.virginmedia.com/readme.md +++ b/sites/virgintvgo.virginmedia.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/virgintvgo.virginmedia.com/virgintvg ### Test ```sh -npm test ---virgintvgo.virginmedia.com +npm test --- virgintvgo.virginmedia.com ``` diff --git a/sites/visionplus.id/readme.md b/sites/visionplus.id/readme.md index cd45eb5e..d607ab72 100644 --- a/sites/visionplus.id/readme.md +++ b/sites/visionplus.id/readme.md @@ -33,5 +33,5 @@ npm run channels:parse --- --config=./sites/visionplus.id/visionplus.id.config.j ### Test ```sh -npm test ---visionplus.id +npm test --- visionplus.id ``` diff --git a/sites/vivacom.bg/readme.md b/sites/vivacom.bg/readme.md index dd9bec4d..51d24bd0 100644 --- a/sites/vivacom.bg/readme.md +++ b/sites/vivacom.bg/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=vivacom.bg ### Test ```sh -npm test ---vivacom.bg +npm test --- vivacom.bg ``` diff --git a/sites/vtm.be/readme.md b/sites/vtm.be/readme.md index 8f7a6d84..b069d021 100644 --- a/sites/vtm.be/readme.md +++ b/sites/vtm.be/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=vtm.be ### Test ```sh -npm test ---vtm.be +npm test --- vtm.be ``` diff --git a/sites/walesi.com.fj/readme.md b/sites/walesi.com.fj/readme.md index f1f8147e..b7b35ca2 100644 --- a/sites/walesi.com.fj/readme.md +++ b/sites/walesi.com.fj/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/walesi.com.fj/walesi.com.fj.config.j ### Test ```sh -npm test ---walesi.com.fj +npm test --- walesi.com.fj ``` diff --git a/sites/watch.sportsnet.ca/readme.md b/sites/watch.sportsnet.ca/readme.md index d7d2a383..bd90c6bc 100644 --- a/sites/watch.sportsnet.ca/readme.md +++ b/sites/watch.sportsnet.ca/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/watch.sportsnet.ca/watch.sportsnet.c ### Test ```sh -npm test ---watch.sportsnet.ca +npm test --- watch.sportsnet.ca ``` diff --git a/sites/watchyour.tv/readme.md b/sites/watchyour.tv/readme.md index c05a0a88..9a32761a 100644 --- a/sites/watchyour.tv/readme.md +++ b/sites/watchyour.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/watchyour.tv/watchyour.tv.config.js ### Test ```sh -npm test ---watchyour.tv +npm test --- watchyour.tv ``` diff --git a/sites/wavve.com/readme.md b/sites/wavve.com/readme.md index 81df44c4..e7e6a8ad 100644 --- a/sites/wavve.com/readme.md +++ b/sites/wavve.com/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/wavve.com/wavve.com.config.js --outp ### Test ```sh -npm test ---wavve.com +npm test --- wavve.com ``` diff --git a/sites/web.magentatv.de/readme.md b/sites/web.magentatv.de/readme.md index cf867893..5d0f0576 100644 --- a/sites/web.magentatv.de/readme.md +++ b/sites/web.magentatv.de/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/web.magentatv.de/web.magentatv.de.co ### Test ```sh -npm test ---web.magentatv.de +npm test --- web.magentatv.de ``` diff --git a/sites/webtv.delta.nl/readme.md b/sites/webtv.delta.nl/readme.md index 9716dc09..9ccf3e04 100644 --- a/sites/webtv.delta.nl/readme.md +++ b/sites/webtv.delta.nl/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/webtv.delta.nl/webtv.delta.nl.config ### Test ```sh -npm test ---webtv.delta.nl +npm test --- webtv.delta.nl ``` diff --git a/sites/worldfishingnetwork.com/readme.md b/sites/worldfishingnetwork.com/readme.md index 90b0c6a1..a82326cc 100644 --- a/sites/worldfishingnetwork.com/readme.md +++ b/sites/worldfishingnetwork.com/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=worldfishingnetwork.com ### Test ```sh -npm test ---worldfishingnetwork.com +npm test --- worldfishingnetwork.com ``` diff --git a/sites/www3.nhk.or.jp/readme.md b/sites/www3.nhk.or.jp/readme.md index 301a0572..3961b596 100644 --- a/sites/www3.nhk.or.jp/readme.md +++ b/sites/www3.nhk.or.jp/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=www3.nhk.or.jp ### Test ```sh -npm test ---www3.nhk.or.jp +npm test --- www3.nhk.or.jp ``` diff --git a/sites/xumo.tv/readme.md b/sites/xumo.tv/readme.md index 7ebd4588..cd656a93 100644 --- a/sites/xumo.tv/readme.md +++ b/sites/xumo.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/xumo.tv/xumo.tv.config.js --output=. ### Test ```sh -npm test ---xumo.tv +npm test --- xumo.tv ``` diff --git a/sites/zap.co.ao/readme.md b/sites/zap.co.ao/readme.md index da2b358c..2f6d31cf 100644 --- a/sites/zap.co.ao/readme.md +++ b/sites/zap.co.ao/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/zap.co.ao/zap.co.ao.config.js --outp ### Test ```sh -npm test ---zap.co.ao +npm test --- zap.co.ao ``` diff --git a/sites/ziggogo.tv/readme.md b/sites/ziggogo.tv/readme.md index 0319311e..36eecb78 100644 --- a/sites/ziggogo.tv/readme.md +++ b/sites/ziggogo.tv/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/ziggogo.tv/ziggogo.tv.config.js --ou ### Test ```sh -npm test ---ziggogo.tv +npm test --- ziggogo.tv ``` diff --git a/sites/znbc.co.zm/readme.md b/sites/znbc.co.zm/readme.md index d55b6bd1..4bb60a80 100644 --- a/sites/znbc.co.zm/readme.md +++ b/sites/znbc.co.zm/readme.md @@ -11,5 +11,5 @@ npm run grab --- --site=znbc.co.zm ### Test ```sh -npm test ---znbc.co.zm +npm test --- znbc.co.zm ``` diff --git a/sites/zuragt.mn/readme.md b/sites/zuragt.mn/readme.md index 6d24c896..9b9183dd 100644 --- a/sites/zuragt.mn/readme.md +++ b/sites/zuragt.mn/readme.md @@ -17,5 +17,5 @@ npm run channels:parse --- --config=./sites/zuragt.mn/zuragt.mn.config.js --outp ### Test ```sh -npm test ---zuragt.mn +npm test --- zuragt.mn ``` From f644583a656c5a94c1c5e3b6a25c22b1ff01ff27 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 15 Dec 2024 22:49:55 +0700 Subject: [PATCH 11/64] Update tvplus.com.tr guide. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: ```sh npm test -- tvplus.com.tr > test > run-script-os tvplus.com.tr > test:win32 > SET "TZ=Pacific/Nauru" && npx jest --runInBand tvplus.com.tr PASS sites/tvplus.com.tr/tvplus.com.tr.test.js √ can generate valid url (4 ms) √ can parse response (15 ms) √ can handle empty guide Test Suites: 1 passed, 1 total Tests: 3 passed, 3 total Snapshots: 0 total Time: 3.648 s, estimated 4 s Ran all test suites matching /tvplus.com.tr/i. ``` Grab: ```sh npm run grab -- --site=tvplus.com.tr > grab > npx tsx scripts/commands/epg/grab.ts --site=tvplus.com.tr starting... config: output: guide.xml maxConnections: 1 gzip: false site: tvplus.com.tr loading channels... found 10 channel(s) run #1: [1/20] tvplus.com.tr (tr) - 24TV.tr - Dec 15, 2024 (22 programs) [2/20] tvplus.com.tr (tr) - 24TV.tr - Dec 16, 2024 (19 programs) [3/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 16, 2024 (48 programs) [4/20] tvplus.com.tr (tr) - BabyTV.uk - Dec 15, 2024 (48 programs) [5/20] tvplus.com.tr (tr) - ASpor.tr - Dec 16, 2024 (13 programs) [6/20] tvplus.com.tr (tr) - ASpor.tr - Dec 15, 2024 (14 programs) [7/20] tvplus.com.tr (tr) - APara.tr - Dec 16, 2024 (31 programs) [8/20] tvplus.com.tr (tr) - APara.tr - Dec 15, 2024 (25 programs) [9/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 16, 2024 (32 programs) [10/20] tvplus.com.tr (tr) - AlJazeeraEnglish.qa - Dec 15, 2024 (32 programs) [11/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 16, 2024 (40 programs) [12/20] tvplus.com.tr (tr) - AlJazeera.qa - Dec 15, 2024 (41 programs) [13/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 16, 2024 (15 programs) [14/20] tvplus.com.tr (tr) - AkitTV.tr - Dec 15, 2024 (12 programs) [15/20] tvplus.com.tr (tr) - AHaber.tr - Dec 16, 2024 (27 programs) [16/20] tvplus.com.tr (tr) - AHaber.tr - Dec 15, 2024 (19 programs) [17/20] tvplus.com.tr (tr) - A2TV.tr - Dec 16, 2024 (11 programs) [18/20] tvplus.com.tr (tr) - A2TV.tr - Dec 15, 2024 (11 programs) [19/20] tvplus.com.tr (tr) - 360.tr - Dec 16, 2024 (18 programs) [20/20] tvplus.com.tr (tr) - 360.tr - Dec 15, 2024 (18 programs) saving to "guide.xml"... done in 00h 02m 17s ``` Signed-off-by: Toha --- sites/tvplus.com.tr/tvplus.com.tr.config.js | 27 +++++++++------------ sites/tvplus.com.tr/tvplus.com.tr.test.js | 17 ++++++++++--- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js index 12e039a9..391f3929 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.config.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js @@ -1,3 +1,5 @@ +const cheerio = require('cheerio') +const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -16,11 +18,14 @@ module.exports = { ttl: 24 * 60 * 60 * 1000 // 1 day } }, - url({ channel }) { - const [buildId, slug, nr] = channel.site_id.split('/') - const channelId = [slug, nr].join('--') + async url({ channel }) { + if (module.exports.buildId === undefined) { + module.exports.buildId = await module.exports.fetchBuildId() + debug('Got build id', module.exports.buildId) + } + const channelId = channel.site_id.replace('/', '--') return `https://tvplus.com.tr/_next/data/${ - buildId + module.exports.buildId }/${ channel.lang }/canli-tv/yayin-akisi/${ @@ -57,8 +62,6 @@ module.exports = { return programs }, async channels() { - const cheerio = require('cheerio') - const axios = require('axios') const channels = [] const data = await axios .get(channelsUrl) @@ -66,19 +69,15 @@ module.exports = { .catch(console.error) const $ = cheerio.load(data) - const nextData = JSON.parse($('#__NEXT_DATA__').text()) $('.channel-list-item a').toArray() .forEach(el => { const a = $(el) channels.push({ lang: 'tr', name: a.attr('title').replace(/Yayın Akışı/, '').trim(), - site_id: [ - nextData.buildId, - ...a.attr('href') - .replace(/\/canli\-tv\/yayin\-akisi\//, '') - .split('--') - ].join('/') + site_id: a.attr('href') + .replace(/\/canli\-tv\/yayin\-akisi\//, '') + .replace('--', '/') // change -- to / as it used in xml comment }) }) @@ -98,6 +97,4 @@ module.exports = { return null } } -} - } } diff --git a/sites/tvplus.com.tr/tvplus.com.tr.test.js b/sites/tvplus.com.tr/tvplus.com.tr.test.js index ec7f28dc..c0f5c13e 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.test.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.test.js @@ -1,6 +1,7 @@ const { parser, url } = require('./tvplus.com.tr.config.js') const fs = require('fs') const path = require('path') +const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -8,15 +9,25 @@ const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(customParseFormat) dayjs.extend(utc) +jest.mock('axios') + const date = dayjs.utc('2024-12-15', 'YYYY-MM-DD').startOf('d') const channel = { lang: 'tr', - site_id: 'wOhzpck_jO2kKrDfRHmHs/nick-jr/4353', + site_id: 'nick-jr/4353', xmltv_id: 'NickJr.tr' } -it('can generate valid url', () => { - expect(url({ channel })).toBe('https://tvplus.com.tr/_next/data/wOhzpck_jO2kKrDfRHmHs/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353') +axios.get.mockImplementation((url, opts) => { + if (url === 'https://tvplus.com.tr/canli-tv/yayin-akisi') { + return Promise.resolve({ + data: fs.readFileSync(path.join(__dirname, '__data__', 'build.html')).toString() + }) + } +}) + +it('can generate valid url', async () => { + expect(await url({ channel })).toBe('https://tvplus.com.tr/_next/data/kUzvz_bbQJNaShlFUkrR3/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353') }) it('can parse response', () => { From ee36284d54bfc26dfbc1a95165021de27354e4b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Thu, 19 Dec 2024 10:58:48 +0100 Subject: [PATCH 12/64] Update sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js Co-authored-by: Aleksandr Statciuk <7253922+freearhey@users.noreply.github.com> --- sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js index 643be39c..b6933c30 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js @@ -16,7 +16,8 @@ module.exports = { const start = parseStart(item) const stop = parseStop(item, start) programs.push({ - title: item?.season?.serie?.title ? item.title : item?.season?.serie?.title, + title: item.title, + subTitle: item?.season?.serie?.title, category: item.genreDetailed, description: item.synopsis, image: parseImage(item), From 865b7beca75bd89fb63c63c754d01bbb76c383f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:34:43 +0100 Subject: [PATCH 13/64] add season data --- sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js index b6933c30..8f780801 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js @@ -17,9 +17,11 @@ module.exports = { const stop = parseStop(item, start) programs.push({ title: item.title, - subTitle: item?.season?.serie?.title, + subTitle: item.season?.serie?.title, category: item.genreDetailed, description: item.synopsis, + season: item.season?.number, + episode: item.season?.episodeNumber, image: parseImage(item), start: start.toJSON(), stop: stop.toJSON() From 7096beec7d4448c3f59f06f11d1a6586a939ef75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:36:12 +0100 Subject: [PATCH 14/64] Update chaines-tv.orange.fr.test.js --- sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js index cd4dae36..9a07e69f 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js @@ -27,6 +27,9 @@ it('can parse response', () => { start: '2021-11-07T23:35:00.000Z', stop: '2021-11-08T00:20:00.000Z', title: 'Tête de liste', + subTitle: 'Esprits criminels', + season: 10, + episode: 12, description: "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.", category: 'Série Suspense', From 5431648dbfdf56edec74715e72363b1574ae4bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:36:31 +0100 Subject: [PATCH 15/64] Update chaines-tv.orange.fr.config.js --- .../chaines-tv.orange.fr.config.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js index 8f780801..8317bdce 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js @@ -20,8 +20,8 @@ module.exports = { subTitle: item.season?.serie?.title, category: item.genreDetailed, description: item.synopsis, - season: item.season?.number, - episode: item.season?.episodeNumber, + season: parseSeason(item), + episode: parseEpisode(item), image: parseImage(item), start: start.toJSON(), stop: stop.toJSON() @@ -64,6 +64,14 @@ function parseStop(item, start) { return start.add(item.duration, 's') } +function parseSeason(item) { + return item.season?.number +} + +function parseEpisode(item) { + return item.episodeNumber +} + function parseItems(content, channel) { const data = JSON.parse(content) From 60f3604ea546ba28eeb07f8dba55ac6e6d05a64e Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:09:08 +0300 Subject: [PATCH 16/64] Upgrade eslint config --- .eslintrc.json | 39 --------------------------------------- eslint.config.mjs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 35 ++++++++++++++++++++++++++++------- package.json | 3 +++ yarn.lock | 7 ++++++- 5 files changed, 84 insertions(+), 47 deletions(-) delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index c4f65cd0..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "env": { - "node": true, - "es2021": true, - "jest": true - }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/no-var-requires": "off", - "no-case-declarations": "off", - "linebreak-style": [ - "error", - "windows" - ], - "quotes": [ - "error", - "single", - { - "avoidEscape": true - } - ], - "semi": [ - "error", - "never" - ] - } -} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..f65b8c77 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,47 @@ +import typescriptEslint from "@typescript-eslint/eslint-plugin"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [ + ...compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"), + { + plugins: { + "@typescript-eslint": typescriptEslint, + }, + + languageOptions: { + globals: { + ...globals.node, + ...globals.jest, + }, + + parser: tsParser, + ecmaVersion: "latest", + sourceType: "module", + }, + + rules: { + "@typescript-eslint/no-var-requires": "off", + "no-case-declarations": "off", + "linebreak-style": ["error", "windows"], + + quotes: ["error", "single", { + avoidEscape: true, + }], + + semi: ["error", "never"], + }, + }, +]; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e3c34e6a..757079f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,8 @@ "license": "UNLICENSED", "dependencies": { "@alex_neo/jest-expect-message": "^1.0.5", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.17.0", "@freearhey/core": "^0.3.1", "@freearhey/search-js": "^0.1.1", "@ntlab/sfetch": "^1.0.0", @@ -40,6 +42,7 @@ "form-data": "^4.0.0", "fs-extra": "^10.0.1", "glob": "^7.2.0", + "globals": "^15.14.0", "iconv-lite": "^0.4.24", "inquirer": "^8.2.6", "jest": "^29.7.0", @@ -641,6 +644,14 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", @@ -4857,11 +4868,14 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/got": { @@ -9529,6 +9543,13 @@ "@babel/types": "^7.23.3", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + } } }, "@babel/types": { @@ -12496,9 +12517,9 @@ } }, "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "version": "15.14.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", + "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==" }, "got": { "version": "11.8.5", diff --git a/package.json b/package.json index 36e3bc4d..a7ad91b9 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ }, "dependencies": { "@alex_neo/jest-expect-message": "^1.0.5", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.17.0", "@freearhey/core": "^0.3.1", "@freearhey/search-js": "^0.1.1", "@ntlab/sfetch": "^1.0.0", @@ -60,6 +62,7 @@ "form-data": "^4.0.0", "fs-extra": "^10.0.1", "glob": "^7.2.0", + "globals": "^15.14.0", "iconv-lite": "^0.4.24", "inquirer": "^8.2.6", "jest": "^29.7.0", diff --git a/yarn.lock b/yarn.lock index 67c180ea..58a6adce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -379,7 +379,7 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.17.0": +"@eslint/js@^9.17.0", "@eslint/js@9.17.0": version "9.17.0" resolved "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz" integrity sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w== @@ -2736,6 +2736,11 @@ globals@^14.0.0: resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== +globals@^15.14.0: + version "15.14.0" + resolved "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz" + integrity sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig== + got@^11.8.2: version "11.8.5" resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" From 5b280dfbc839f7032f84ba21eddb32001ec9ddb3 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:18:30 +0300 Subject: [PATCH 17/64] Fixes linter issues --- scripts/commands/api/generate.ts | 102 +- scripts/commands/channels/editor.ts | 4 +- scripts/commands/channels/parse.ts | 2 +- scripts/commands/channels/validate.ts | 1 - scripts/commands/sites/update.ts | 116 +- scripts/core/date.js | 7 +- scripts/core/htmlTable.ts | 92 +- scripts/core/issueLoader.ts | 81 +- scripts/core/issueParser.ts | 68 +- scripts/core/markdown.ts | 26 +- scripts/core/queueCreator.ts | 2 +- scripts/models/index.ts | 4 +- scripts/models/issue.ts | 48 +- scripts/models/site.ts | 114 +- .../input/issues/broken_guide_down.js | 3102 ++++++++--------- .../input/issues/broken_guide_warning.js | 1948 +++++------ tests/commands/sites/update.test.ts | 72 +- 17 files changed, 2895 insertions(+), 2894 deletions(-) diff --git a/scripts/commands/api/generate.ts b/scripts/commands/api/generate.ts index 7b0f8276..43634f8c 100644 --- a/scripts/commands/api/generate.ts +++ b/scripts/commands/api/generate.ts @@ -1,51 +1,51 @@ -import { Logger, Storage, Collection } from '@freearhey/core' -import { ChannelsParser } from '../../core' -import path from 'path' -import { SITES_DIR, API_DIR } from '../../constants' -import { Channel } from 'epg-grabber' - -type OutputItem = { - channel: string | null - site: string - site_id: string - site_name: string - lang: string -} - -async function main() { - const logger = new Logger() - - logger.start('staring...') - - logger.info('loading channels...') - const sitesStorage = new Storage(SITES_DIR) - const parser = new ChannelsParser({ storage: sitesStorage }) - - let files: string[] = [] - files = await sitesStorage.list('**/*.channels.xml') - - let parsedChannels = new Collection() - for (const filepath of files) { - parsedChannels = parsedChannels.concat(await parser.parse(filepath)) - } - - logger.info(` found ${parsedChannels.count()} channel(s)`) - - const output = parsedChannels.map((channel: Channel): OutputItem => { - return { - channel: channel.xmltv_id || null, - site: channel.site || '', - site_id: channel.site_id || '', - site_name: channel.name, - lang: channel.lang || '' - } - }) - - const apiStorage = new Storage(API_DIR) - const outputFilename = 'guides.json' - await apiStorage.save('guides.json', output.toJSON()) - - logger.info(`saved to "${path.join(API_DIR, outputFilename)}"`) -} - -main() +import { Logger, Storage, Collection } from '@freearhey/core' +import { ChannelsParser } from '../../core' +import path from 'path' +import { SITES_DIR, API_DIR } from '../../constants' +import { Channel } from 'epg-grabber' + +type OutputItem = { + channel: string | null + site: string + site_id: string + site_name: string + lang: string +} + +async function main() { + const logger = new Logger() + + logger.start('staring...') + + logger.info('loading channels...') + const sitesStorage = new Storage(SITES_DIR) + const parser = new ChannelsParser({ storage: sitesStorage }) + + let files: string[] = [] + files = await sitesStorage.list('**/*.channels.xml') + + let parsedChannels = new Collection() + for (const filepath of files) { + parsedChannels = parsedChannels.concat(await parser.parse(filepath)) + } + + logger.info(` found ${parsedChannels.count()} channel(s)`) + + const output = parsedChannels.map((channel: Channel): OutputItem => { + return { + channel: channel.xmltv_id || null, + site: channel.site || '', + site_id: channel.site_id || '', + site_name: channel.name, + lang: channel.lang || '' + } + }) + + const apiStorage = new Storage(API_DIR) + const outputFilename = 'guides.json' + await apiStorage.save('guides.json', output.toJSON()) + + logger.info(`saved to "${path.join(API_DIR, outputFilename)}"`) +} + +main() diff --git a/scripts/commands/channels/editor.ts b/scripts/commands/channels/editor.ts index 33058192..0898cbff 100644 --- a/scripts/commands/channels/editor.ts +++ b/scripts/commands/channels/editor.ts @@ -43,7 +43,7 @@ async function main() { const channelsIndex = sj.createIndex(channelsContent) const buffer = new Dictionary() - for (let option of options.all()) { + for (const option of options.all()) { const channel: Channel = option.channel if (channel.xmltv_id) { if (channel.xmltv_id !== '-') { @@ -150,7 +150,7 @@ function getOptions(channelsIndex, channel: Channel) { const query = channel.name .replace(/\s(SD|TV|HD|SD\/HD|HDTV)$/i, '') .replace(/(\(|\)|,)/gi, '') - .replace(/\-/gi, ' ') + .replace(/-/gi, ' ') .replace(/\+/gi, '') const similar = channelsIndex.search(query).map(item => new ApiChannel(item)) diff --git a/scripts/commands/channels/parse.ts b/scripts/commands/channels/parse.ts index b00d2a26..71ee938a 100644 --- a/scripts/commands/channels/parse.ts +++ b/scripts/commands/channels/parse.ts @@ -26,7 +26,7 @@ async function main() { const logger = new Logger() const file = new File(options.config) const dir = file.dirname() - const config = require(path.resolve(options.config)) + const config = (await import(path.resolve(options.config))).default const outputFilepath = options.output || `${dir}/${config.site}.channels.xml` let channels = new Collection() diff --git a/scripts/commands/channels/validate.ts b/scripts/commands/channels/validate.ts index 35ab873b..e2f38429 100644 --- a/scripts/commands/channels/validate.ts +++ b/scripts/commands/channels/validate.ts @@ -47,7 +47,6 @@ async function main() { const parsedChannels = await parser.parse(filepath) - const bufferById = new Dictionary() const bufferBySiteId = new Dictionary() const errors: ValidationError[] = [] parsedChannels.forEach((channel: Channel) => { diff --git a/scripts/commands/sites/update.ts b/scripts/commands/sites/update.ts index d1f7e8a4..b9550550 100644 --- a/scripts/commands/sites/update.ts +++ b/scripts/commands/sites/update.ts @@ -1,58 +1,58 @@ -import { Logger, Storage, Collection, Dictionary } from '@freearhey/core' -import { IssueLoader, HTMLTable, Markdown } from '../../core' -import { Issue, Site } from '../../models' -import { SITES_DIR, DOT_SITES_DIR } from '../../constants' -import path from 'path' - -async function main() { - const logger = new Logger({ disabled: true }) - const loader = new IssueLoader() - const storage = new Storage(SITES_DIR) - const sites = new Collection() - - logger.info('loading list of sites') - const folders = await storage.list('*/') - - logger.info('loading issues...') - const issues = await loadIssues(loader) - - logger.info('putting the data together...') - folders.forEach((domain: string) => { - const filteredIssues = issues.filter((issue: Issue) => domain === issue.data.get('site')) - const site = new Site({ - domain, - issues: filteredIssues - }) - - sites.add(site) - }) - - logger.info('creating sites table...') - let data = new Collection() - sites.forEach((site: Site) => { - data.add([ - `${site.domain}`, - site.getStatus().emoji, - site.getIssues().all().join(', ') - ]) - }) - - const table = new HTMLTable(data.all(), [{ name: 'Site' }, { name: 'Status' }, { name: 'Notes' }]) - - const readmeStorage = new Storage(DOT_SITES_DIR) - await readmeStorage.save('_table.md', table.toString()) - - logger.info('updating sites.md...') - const configPath = path.join(DOT_SITES_DIR, 'config.json') - const sitesMarkdown = new Markdown(configPath) - sitesMarkdown.compile() -} - -main() - -async function loadIssues(loader: IssueLoader) { - const issuesWithStatusWarning = await loader.load({ labels: ['broken guide', 'status:warning'] }) - const issuesWithStatusDown = await loader.load({ labels: ['broken guide', 'status:down'] }) - - return issuesWithStatusWarning.concat(issuesWithStatusDown) -} +import { Logger, Storage, Collection } from '@freearhey/core' +import { IssueLoader, HTMLTable, Markdown } from '../../core' +import { Issue, Site } from '../../models' +import { SITES_DIR, DOT_SITES_DIR } from '../../constants' +import path from 'path' + +async function main() { + const logger = new Logger({ disabled: true }) + const loader = new IssueLoader() + const storage = new Storage(SITES_DIR) + const sites = new Collection() + + logger.info('loading list of sites') + const folders = await storage.list('*/') + + logger.info('loading issues...') + const issues = await loadIssues(loader) + + logger.info('putting the data together...') + folders.forEach((domain: string) => { + const filteredIssues = issues.filter((issue: Issue) => domain === issue.data.get('site')) + const site = new Site({ + domain, + issues: filteredIssues + }) + + sites.add(site) + }) + + logger.info('creating sites table...') + const data = new Collection() + sites.forEach((site: Site) => { + data.add([ + `${site.domain}`, + site.getStatus().emoji, + site.getIssues().all().join(', ') + ]) + }) + + const table = new HTMLTable(data.all(), [{ name: 'Site' }, { name: 'Status' }, { name: 'Notes' }]) + + const readmeStorage = new Storage(DOT_SITES_DIR) + await readmeStorage.save('_table.md', table.toString()) + + logger.info('updating sites.md...') + const configPath = path.join(DOT_SITES_DIR, 'config.json') + const sitesMarkdown = new Markdown(configPath) + sitesMarkdown.compile() +} + +main() + +async function loadIssues(loader: IssueLoader) { + const issuesWithStatusWarning = await loader.load({ labels: ['broken guide', 'status:warning'] }) + const issuesWithStatusDown = await loader.load({ labels: ['broken guide', 'status:down'] }) + + return issuesWithStatusWarning.concat(issuesWithStatusDown) +} diff --git a/scripts/core/date.js b/scripts/core/date.js index 5515a1c4..08c4d938 100644 --- a/scripts/core/date.js +++ b/scripts/core/date.js @@ -1,5 +1,6 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') +import dayjs from 'dayjs' +import utc from 'dayjs/plugin/utc' + dayjs.extend(utc) const date = {} @@ -10,4 +11,4 @@ date.getUTC = function (d = null) { return dayjs.utc().startOf('d') } -module.exports = date +export default date diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts index 1caa85fa..9b4c63cf 100644 --- a/scripts/core/htmlTable.ts +++ b/scripts/core/htmlTable.ts @@ -1,46 +1,46 @@ -type Column = { - name: string - nowrap?: boolean - align?: string -} - -type DataItem = string[] - -export class HTMLTable { - data: DataItem[] - columns: Column[] - - constructor(data: DataItem[], columns: Column[]) { - this.data = data - this.columns = columns - } - - toString() { - let output = '\n' - - output += ' \n ' - for (const column of this.columns) { - output += `` - } - output += '\n \n' - - output += ' \n' - for (const item of this.data) { - output += ' ' - let i = 0 - for (const prop in item) { - const column = this.columns[i] - const nowrap = column.nowrap ? ' nowrap' : '' - const align = column.align ? ` align="${column.align}"` : '' - output += `${item[prop]}` - i++ - } - output += '\n' - } - output += ' \n' - - output += '
${column.name}
' - - return output - } -} +type Column = { + name: string + nowrap?: boolean + align?: string +} + +type DataItem = string[] + +export class HTMLTable { + data: DataItem[] + columns: Column[] + + constructor(data: DataItem[], columns: Column[]) { + this.data = data + this.columns = columns + } + + toString() { + let output = '\n' + + output += ' \n ' + for (const column of this.columns) { + output += `` + } + output += '\n \n' + + output += ' \n' + for (const item of this.data) { + output += ' ' + let i = 0 + for (const prop in item) { + const column = this.columns[i] + const nowrap = column.nowrap ? ' nowrap' : '' + const align = column.align ? ` align="${column.align}"` : '' + output += `${item[prop]}` + i++ + } + output += '\n' + } + output += ' \n' + + output += '
${column.name}
' + + return output + } +} diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts index 28697e58..cbdd0fc0 100644 --- a/scripts/core/issueLoader.ts +++ b/scripts/core/issueLoader.ts @@ -1,40 +1,41 @@ -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 { IssueParser } from './' -import { TESTING, OWNER, REPO } from '../constants' - -const CustomOctokit = Octokit.plugin(paginateRest, restEndpointMethods) -const octokit = new CustomOctokit() - -export class IssueLoader { - async load({ labels }: { labels: string[] | string }) { - labels = Array.isArray(labels) ? labels.join(',') : labels - let issues: object[] = [] - if (TESTING) { - switch (labels) { - case 'broken guide,status:warning': - issues = require('../../tests/__data__/input/issues/broken_guide_warning.js') - break - case 'broken guide,status:down': - issues = require('../../tests/__data__/input/issues/broken_guide_down.js') - break - } - } else { - issues = await octokit.paginate(octokit.rest.issues.listForRepo, { - owner: OWNER, - repo: REPO, - per_page: 100, - labels, - headers: { - 'X-GitHub-Api-Version': '2022-11-28' - } - }) - } - - const parser = new IssueParser() - - return new Collection(issues).map(parser.parse) - } -} +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 { IssueParser } from './' +import { TESTING, OWNER, REPO } from '../constants' + +const CustomOctokit = Octokit.plugin(paginateRest, restEndpointMethods) +const octokit = new CustomOctokit() + +export class IssueLoader { + async load({ labels }: { labels: string[] | string }) { + labels = Array.isArray(labels) ? labels.join(',') : labels + let issues: object[] = [] + if (TESTING) { + switch (labels) { + case 'broken guide,status:warning': + issues = (await import('../../tests/__data__/input/issues/broken_guide_warning.js')) + .default + break + case 'broken guide,status:down': + issues = (await import('../../tests/__data__/input/issues/broken_guide_down.js')).default + break + } + } else { + issues = await octokit.paginate(octokit.rest.issues.listForRepo, { + owner: OWNER, + repo: REPO, + per_page: 100, + labels, + headers: { + 'X-GitHub-Api-Version': '2022-11-28' + } + }) + } + + const parser = new IssueParser() + + return new Collection(issues).map(parser.parse) + } +} diff --git a/scripts/core/issueParser.ts b/scripts/core/issueParser.ts index 2fe2ddd8..e4626514 100644 --- a/scripts/core/issueParser.ts +++ b/scripts/core/issueParser.ts @@ -1,34 +1,34 @@ -import { Dictionary } from '@freearhey/core' -import { Issue } from '../models' - -const FIELDS = new Dictionary({ - Site: 'site' -}) - -export class IssueParser { - parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue { - const fields = issue.body.split('###') - - const data = new Dictionary() - fields.forEach((field: string) => { - let parsed = field.split(/\r?\n/).filter(Boolean) - let _label = parsed.shift() - _label = _label ? _label.trim() : '' - let _value = parsed.join('\r\n') - _value = _value ? _value.trim() : '' - - if (!_label || !_value) return data - - const id: string = FIELDS.get(_label) - const value: string = _value === '_No response_' || _value === 'None' ? '' : _value - - if (!id) return - - data.set(id, value) - }) - - const labels = issue.labels.map(label => label.name) - - return new Issue({ number: issue.number, labels, data }) - } -} +import { Dictionary } from '@freearhey/core' +import { Issue } from '../models' + +const FIELDS = new Dictionary({ + Site: 'site' +}) + +export class IssueParser { + parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue { + const fields = issue.body.split('###') + + const data = new Dictionary() + fields.forEach((field: string) => { + const parsed = field.split(/\r?\n/).filter(Boolean) + let _label = parsed.shift() + _label = _label ? _label.trim() : '' + let _value = parsed.join('\r\n') + _value = _value ? _value.trim() : '' + + if (!_label || !_value) return data + + const id: string = FIELDS.get(_label) + const value: string = _value === '_No response_' || _value === 'None' ? '' : _value + + if (!id) return + + data.set(id, value) + }) + + const labels = issue.labels.map(label => label.name) + + return new Issue({ number: issue.number, labels, data }) + } +} diff --git a/scripts/core/markdown.ts b/scripts/core/markdown.ts index b43b5608..4efaddb0 100644 --- a/scripts/core/markdown.ts +++ b/scripts/core/markdown.ts @@ -1,13 +1,13 @@ -import markdownInclude from 'markdown-include' - -export class Markdown { - filepath: string - - constructor(filepath: string) { - this.filepath = filepath - } - - compile() { - markdownInclude.compileFiles(this.filepath) - } -} +import markdownInclude from 'markdown-include' + +export class Markdown { + filepath: string + + constructor(filepath: string) { + this.filepath = filepath + } + + compile() { + markdownInclude.compileFiles(this.filepath) + } +} diff --git a/scripts/core/queueCreator.ts b/scripts/core/queueCreator.ts index 8cc9fcb3..2816f57f 100644 --- a/scripts/core/queueCreator.ts +++ b/scripts/core/queueCreator.ts @@ -1,7 +1,7 @@ import { Storage, Collection, DateTime, Logger } from '@freearhey/core' import { ChannelsParser, ConfigLoader, ApiChannel, Queue } from './' import { SITES_DIR, DATA_DIR } from '../constants' -import { Channel, SiteConfig } from 'epg-grabber' +import { SiteConfig } from 'epg-grabber' import path from 'path' import { GrabOptions } from '../commands/epg/grab' diff --git a/scripts/models/index.ts b/scripts/models/index.ts index 1065611d..f8188a40 100644 --- a/scripts/models/index.ts +++ b/scripts/models/index.ts @@ -1,2 +1,2 @@ -export * from './issue' -export * from './site' +export * from './issue' +export * from './site' diff --git a/scripts/models/issue.ts b/scripts/models/issue.ts index 7eb241e5..d9653a4f 100644 --- a/scripts/models/issue.ts +++ b/scripts/models/issue.ts @@ -1,24 +1,24 @@ -import { Dictionary } from '@freearhey/core' -import { OWNER, REPO } from '../constants' - -type IssueProps = { - number: number - labels: string[] - data: Dictionary -} - -export class Issue { - number: number - labels: string[] - data: Dictionary - - constructor({ number, labels, data }: IssueProps) { - this.number = number - this.labels = labels - this.data = data - } - - getURL() { - return `https://github.com/${OWNER}/${REPO}/issues/${this.number}` - } -} +import { Dictionary } from '@freearhey/core' +import { OWNER, REPO } from '../constants' + +type IssueProps = { + number: number + labels: string[] + data: Dictionary +} + +export class Issue { + number: number + labels: string[] + data: Dictionary + + constructor({ number, labels, data }: IssueProps) { + this.number = number + this.labels = labels + this.data = data + } + + getURL() { + return `https://github.com/${OWNER}/${REPO}/issues/${this.number}` + } +} diff --git a/scripts/models/site.ts b/scripts/models/site.ts index 1e7dcadd..4fd5b33a 100644 --- a/scripts/models/site.ts +++ b/scripts/models/site.ts @@ -1,57 +1,57 @@ -import { Collection } from '@freearhey/core' -import { Issue } from './' - -enum StatusCode { - DOWN = 'down', - WARNING = 'warning', - OK = 'ok' -} - -type Status = { - code: StatusCode - emoji: string -} - -type SiteProps = { - domain: string - issues: Collection -} - -export class Site { - domain: string - issues: Collection - - constructor({ domain, issues }: SiteProps) { - this.domain = domain - this.issues = issues - } - - getStatus(): Status { - const issuesWithStatusDown = this.issues.filter((issue: Issue) => - issue.labels.find(label => label === 'status:down') - ) - if (issuesWithStatusDown.notEmpty()) - return { - code: StatusCode.DOWN, - emoji: '🔴' - } - - const issuesWithStatusWarning = this.issues.filter((issue: Issue) => - issue.labels.find(label => label === 'status:warning') - ) - if (issuesWithStatusWarning.notEmpty()) - return { - code: StatusCode.WARNING, - emoji: '🟡' - } - - return { - code: StatusCode.OK, - emoji: '🟢' - } - } - - getIssues(): Collection { - return this.issues.map((issue: Issue) => issue.getURL()) - } -} +import { Collection } from '@freearhey/core' +import { Issue } from './' + +enum StatusCode { + DOWN = 'down', + WARNING = 'warning', + OK = 'ok' +} + +type Status = { + code: StatusCode + emoji: string +} + +type SiteProps = { + domain: string + issues: Collection +} + +export class Site { + domain: string + issues: Collection + + constructor({ domain, issues }: SiteProps) { + this.domain = domain + this.issues = issues + } + + getStatus(): Status { + const issuesWithStatusDown = this.issues.filter((issue: Issue) => + issue.labels.find(label => label === 'status:down') + ) + if (issuesWithStatusDown.notEmpty()) + return { + code: StatusCode.DOWN, + emoji: '🔴' + } + + const issuesWithStatusWarning = this.issues.filter((issue: Issue) => + issue.labels.find(label => label === 'status:warning') + ) + if (issuesWithStatusWarning.notEmpty()) + return { + code: StatusCode.WARNING, + emoji: '🟡' + } + + return { + code: StatusCode.OK, + emoji: '🟢' + } + } + + getIssues(): Collection { + return this.issues.map((issue: Issue) => issue.getURL()) + } +} diff --git a/tests/__data__/input/issues/broken_guide_down.js b/tests/__data__/input/issues/broken_guide_down.js index 331bf671..99872ab5 100644 --- a/tests/__data__/input/issues/broken_guide_down.js +++ b/tests/__data__/input/issues/broken_guide_down.js @@ -1,1551 +1,1551 @@ -module.exports = [ - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2547', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/events', - html_url: 'https://github.com/iptv-org/epg/issues/2547', - id: 2760418979, - node_id: 'I_kwDOFLVvtM6kiKaj', - number: 2547, - title: 'digiturk.com.tr', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-12-27T05:33:47Z', - updated_at: '2024-12-28T20:37:53Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ndigiturk.com.tr\n\n### Description\n\n```sh\r\nnpm run grab --- --site=digiturk.com.tr\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=digiturk.com.tr\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: digiturk.com.tr\r\nloading channels...\r\n found 139 channel(s)\r\nrun #1:\r\n [1/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/278] digiturk.com.tr (tr) - Yaban.tr - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/reactions', - total_count: 1, - '+1': 1, - '-1': 0, - laugh: 0, - hooray: 0, - confused: 0, - heart: 0, - rocket: 0, - eyes: 0 - }, - timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2542', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/events', - html_url: 'https://github.com/iptv-org/epg/issues/2542', - id: 2759639980, - node_id: 'I_kwDOFLVvtM6kfMOs', - number: 2542, - title: 'tvguide.com not working', - user: { - login: 'SiWafer', - id: 10903014, - node_id: 'MDQ6VXNlcjEwOTAzMDE0', - avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/SiWafer', - html_url: 'https://github.com/SiWafer', - followers_url: 'https://api.github.com/users/SiWafer/followers', - following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', - gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', - starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', - organizations_url: 'https://api.github.com/users/SiWafer/orgs', - repos_url: 'https://api.github.com/users/SiWafer/repos', - events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', - received_events_url: 'https://api.github.com/users/SiWafer/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-26T11:11:24Z', - updated_at: '2024-12-27T05:28:55Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\ntvguide.com\n\n### Description\n\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=tvguide.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tvguide.com\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tvguide.com\r\nloading channels...\r\n found 39 channel(s)\r\nrun #1:\r\n [1/78] tvguide.com (en) - AEEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/78] tvguide.com (en) - AEEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/78] tvguide.com (en) - AMCEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/78] tvguide.com (en) - AMCEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [5/78] tvguide.com (en) - BravoEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [6/78] tvguide.com (en) - BravoEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [7/78] tvguide.com (en) - BBCAmericaEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [8/78] tvguide.com (en) - CNBC.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [9/78] tvguide.com (en) - CNBC.us - Dec 26, 2024 (0 programs)\r\n...\r\n...\r\n...\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/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/epg/issues/2542/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2541', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/events', - html_url: 'https://github.com/iptv-org/epg/issues/2541', - id: 2758749907, - node_id: 'I_kwDOFLVvtM6kby7T', - number: 2541, - title: 'elcinema.com grab error 403', - user: { - login: 'xercessss', - id: 189765257, - node_id: 'U_kgDOC0-WiQ', - avatar_url: 'https://avatars.githubusercontent.com/u/189765257?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/xercessss', - html_url: 'https://github.com/xercessss', - followers_url: 'https://api.github.com/users/xercessss/followers', - following_url: 'https://api.github.com/users/xercessss/following{/other_user}', - gists_url: 'https://api.github.com/users/xercessss/gists{/gist_id}', - starred_url: 'https://api.github.com/users/xercessss/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/xercessss/subscriptions', - organizations_url: 'https://api.github.com/users/xercessss/orgs', - repos_url: 'https://api.github.com/users/xercessss/repos', - events_url: 'https://api.github.com/users/xercessss/events{/privacy}', - received_events_url: 'https://api.github.com/users/xercessss/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-25T11:34:16Z', - updated_at: '2024-12-27T05:28:07Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nelcinema.com\n\n### Description\n\ngrabbing elcinema.com epg return error 403 for both ar and en language:\r\nERR: Request failed with status code 403\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/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/epg/issues/2541/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2509', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/events', - html_url: 'https://github.com/iptv-org/epg/issues/2509', - id: 2740938968, - node_id: 'I_kwDOFLVvtM6jX2jY', - number: 2509, - title: 'ssl problem maxtv.hrvatskitelekom.hr', - user: { - login: 'uploadkom', - id: 130712472, - node_id: 'U_kgDOB8qDmA', - avatar_url: 'https://avatars.githubusercontent.com/u/130712472?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/uploadkom', - html_url: 'https://github.com/uploadkom', - followers_url: 'https://api.github.com/users/uploadkom/followers', - following_url: 'https://api.github.com/users/uploadkom/following{/other_user}', - gists_url: 'https://api.github.com/users/uploadkom/gists{/gist_id}', - starred_url: 'https://api.github.com/users/uploadkom/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/uploadkom/subscriptions', - organizations_url: 'https://api.github.com/users/uploadkom/orgs', - repos_url: 'https://api.github.com/users/uploadkom/repos', - events_url: 'https://api.github.com/users/uploadkom/events{/privacy}', - received_events_url: 'https://api.github.com/users/uploadkom/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 3, - created_at: '2024-12-15T22:21:22Z', - updated_at: '2024-12-27T05:26:26Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nmaxtv.hrvatskitelekom.hr\n\n### Description\n\nssl problem', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/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/epg/issues/2509/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2498', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/events', - html_url: 'https://github.com/iptv-org/epg/issues/2498', - id: 2728188494, - node_id: 'I_kwDOFLVvtM6inNpO', - number: 2498, - title: 'movistarplus.es', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-09T20:26:07Z', - updated_at: '2024-12-27T05:23:48Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nmovistarplus.es\n\n### Description\n\n```sh\r\nnpm run grab -- --site=movistarplus.es\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=movistarplus.es\r\n\r\n(node:22362) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:\r\n--import \'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("file%3A///Users/Arhey/Code/iptv-org/epg/node_modules/tsx/dist/loader.mjs", pathToFileURL("./"));\'\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\n(node:22362) UnsupportedWarning: `globalPreload` has been removed; use `initialize` instead.\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: movistarplus.es\r\nloading channels...\r\n(node:22362) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.\r\n found 186 channel(s)\r\nrun #1:\r\n [1/372] movistarplus.es (es) - ANTV - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/372] movistarplus.es (es) - ANTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/372] movistarplus.es (es) - ARAGTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/372] movistarplus.es (es) - CANSUR - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/372] movistarplus.es (es) - DAZNL2 - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/372] movistarplus.es (es) - MLIGS - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [7/372] movistarplus.es (es) - AMC.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [8/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [9/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [10/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [11/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [12/372] movistarplus.es (es) - LaResistencia.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [13/372] movistarplus.es (es) - LaResistencia.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/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/epg/issues/2498/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2445', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/events', - html_url: 'https://github.com/iptv-org/epg/issues/2445', - id: 2567652015, - node_id: 'I_kwDOFLVvtM6ZC0Kv', - number: 2445, - title: 'EPG from dishtv.in stopped with error code 404', - user: { - login: 'dheer99', - id: 20639130, - node_id: 'MDQ6VXNlcjIwNjM5MTMw', - avatar_url: 'https://avatars.githubusercontent.com/u/20639130?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/dheer99', - html_url: 'https://github.com/dheer99', - followers_url: 'https://api.github.com/users/dheer99/followers', - following_url: 'https://api.github.com/users/dheer99/following{/other_user}', - gists_url: 'https://api.github.com/users/dheer99/gists{/gist_id}', - starred_url: 'https://api.github.com/users/dheer99/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/dheer99/subscriptions', - organizations_url: 'https://api.github.com/users/dheer99/orgs', - repos_url: 'https://api.github.com/users/dheer99/repos', - events_url: 'https://api.github.com/users/dheer99/events{/privacy}', - received_events_url: 'https://api.github.com/users/dheer99/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-10-05T04:30:52Z', - updated_at: '2024-12-27T05:20:11Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\ndishtv.in\n\n### Description\n\nEPG from dishtv.in stopped with error code 404\r\n\r\n [91/98] dishtv.in (en) - StarPlus.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [92/98] dishtv.in (en) - SET.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [93/98] dishtv.in (en) - ZeeCinema.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [94/98] dishtv.in (en) - SonySportsTen5.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [95/98] dishtv.in (en) - StarSports1.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [96/98] dishtv.in (en) - SET.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [97/98] dishtv.in (en) - SonySportsTen3.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [98/98] dishtv.in (en) - Colors.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 03s\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/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/epg/issues/2445/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2339', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/events', - html_url: 'https://github.com/iptv-org/epg/issues/2339', - id: 2172864415, - node_id: 'I_kwDOFLVvtM6Bg0ef', - number: 2339, - title: - 'directv.com.ar and directv.com.uy not working ERR: Unexpected token \'<\', " grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kan.org.il --output=kan.org.il.xml\r\n\r\nstarting...\r\nconfig:\r\n output: kan.org.il.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kan.org.il\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] kan.org.il (ar) - Makan33.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/6] kan.org.il (ar) - Makan33.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/6] kan.org.il (he) - KanEducational.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/6] kan.org.il (he) - KanEducational.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/6] kan.org.il (he) - Kan11.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/6] kan.org.il (he) - Kan11.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 01s\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2273/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/epg/issues/2273/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2270', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/events', - html_url: 'https://github.com/iptv-org/epg/issues/2270', - id: 2022018570, - node_id: 'I_kwDOFLVvtM54hY4K', - number: 2270, - title: 'vivacom.bg is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-12-02T12:16:22Z', - updated_at: '2024-12-27T05:00:36Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nvivacom.bg\n\n### Description\n\n```sh\r\nnpm run grab -- --site=vivacom.bg\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=vivacom.bg\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: vivacom.bg\r\nloading channels...\r\n found 154 channel(s)\r\nrun #1:\r\n [1/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 2, 2023 (0 programs)\r\n [2/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 3, 2023 (0 programs)\r\n [3/308] vivacom.bg (bg) - 78TV.bg - Dec 3, 2023 (0 programs)\r\n [4/308] vivacom.bg (bg) - AlfaTV.bg - Dec 3, 2023 (0 programs)\r\n [5/308] vivacom.bg (bg) - AXNEurope.gr - Dec 3, 2023 (0 programs)\r\n [6/308] vivacom.bg (bg) - BNT3.bg - Dec 3, 2023 (0 programs)\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/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/epg/issues/2270/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2264', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/events', - html_url: 'https://github.com/iptv-org/epg/issues/2264', - id: 2019407629, - node_id: 'I_kwDOFLVvtM54XbcN', - number: 2264, - title: 'tva.tv is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-30T20:00:18Z', - updated_at: '2024-12-27T05:00:24Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ntva.tv\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tva.tv\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tva.tv\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tva.tv\r\nloading channels...\r\n found 28 channel(s)\r\nrun #1:\r\n [1/56] tva.tv (fa) - DocTV.ir - Nov 30, 2023 (0 programs)\r\n ERR: Connection timeout\r\n [2/56] tva.tv (fa) - DocTV.ir - Dec 1, 2023 (0 programs)\r\n ERR: Connection timeout\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/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/epg/issues/2264/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2263', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/events', - html_url: 'https://github.com/iptv-org/epg/issues/2263', - id: 2019376043, - node_id: 'I_kwDOFLVvtM54XTur', - number: 2263, - title: 'tv.yettel.hu is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-30T19:38:28Z', - updated_at: '2024-12-27T04:59:14Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ntv.yettel.hu\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tv.yettel.hu\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tv.yettel.hu\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tv.yettel.hu\r\nloading channels...\r\n found 74 channel(s)\r\nrun #1:\r\n [1/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Nov 30, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n [2/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Dec 1, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/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/epg/issues/2263/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2257', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/events', - html_url: 'https://github.com/iptv-org/epg/issues/2257', - id: 2011054011, - node_id: 'I_kwDOFLVvtM533j-7', - number: 2257, - title: 'rtb.gov.bn is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-26T14:02:13Z', - updated_at: '2024-12-27T04:59:29Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nrtb.gov.bn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rtb.gov.bn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rtb.gov.bn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rtb.gov.bn\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 26, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [2/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [3/6] rtb.gov.bn (ms) - RTBPerdana.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n```\r\n\r\nThere is no link to the guide on the website at the moment either: https://www.rtb.gov.bn/SitePages/Programme%20Guide.aspx', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/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/epg/issues/2257/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2255', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/events', - html_url: 'https://github.com/iptv-org/epg/issues/2255', - id: 2011043202, - node_id: 'I_kwDOFLVvtM533hWC', - number: 2255, - title: 'rev.bs is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2023-11-26T13:31:22Z', - updated_at: '2024-12-27T22:02:28Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nrev.bs\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rev.bs\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rev.bs\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rev.bs\r\nloading channels...\r\n found 179 channel(s)\r\nrun #1:\r\n [1/358] rev.bs (en) - 3ABNEnglish.us - Nov 26, 2023 (0 programs)\r\n [2/358] rev.bs (en) - 3ABNEnglish.us - Nov 27, 2023 (0 programs)\r\n [3/358] rev.bs (en) - AEEast.us - Nov 27, 2023 (0 programs)\r\n [4/358] rev.bs (en) - AMCEast.us - Nov 27, 2023 (0 programs)\r\n```\r\n---\r\n\r\n```json\r\n{\r\n\t"status": "OK",\r\n\t"data": {\r\n\t\t"schedule": [],\r\n\t\t"dateTime": {\r\n\t\t\t"date": "2023-11-27",\r\n\t\t\t"page": 0\r\n\t\t},\r\n\t\t"runtimes": [\r\n\t\t\t{\r\n\t\t\t\t"Rev class loaded": 1700899490.604637\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"TVGuide Class Loaded": 1700899490.638891\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Validated form": 1700899490.640116\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Pulled schedules": 1700899490.642099\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n}\r\n```\r\n\r\nhttps://www.rev.bs/wp-content/uploads/tv-guide/2023-11-27_0.json\r\n\r\n---\r\n\r\nimage\r\n\r\nhttps://www.rev.bs/tv-guide-404/', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/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/epg/issues/2255/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2241', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/events', - html_url: 'https://github.com/iptv-org/epg/issues/2241', - id: 2002096969, - node_id: 'I_kwDOFLVvtM53VZNJ', - number: 2241, - title: 'm.tv.sms.cz is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 4, - created_at: '2023-11-20T12:28:47Z', - updated_at: '2024-12-27T04:58:41Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nm.tv.sms.cz\n\n### Description\n\n```sh\r\nnpm run grab -- --site=m.tv.sms.cz\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=m.tv.sms.cz\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: m.tv.sms.cz\r\nloading channels...\r\n found 525 channel(s)\r\nrun #1:\r\n [1/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 20, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [2/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [3/1050] m.tv.sms.cz (cs) - AMC.cz - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n```\r\n\r\nhttps://check-host.net/check-report/135d7e05kb9d', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/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/epg/issues/2241/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2240', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/events', - html_url: 'https://github.com/iptv-org/epg/issues/2240', - id: 2001847449, - node_id: 'I_kwDOFLVvtM53UcSZ', - number: 2240, - title: 'kplus.vn is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-20T10:19:23Z', - updated_at: '2024-12-27T04:57:49Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nkplus.vn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=kplus.vn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kplus.vn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kplus.vn\r\nloading channels...\r\n found 26 channel(s)\r\nrun #1:\r\n [1/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 20, 2023 (0 programs)\r\n [2/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 21, 2023 (0 programs)\r\n [3/52] kplus.vn (vi) - AXN.vn - Nov 21, 2023 (0 programs)\r\n [4/52] kplus.vn (vi) - DiscoveryChannelSoutheastAsia.sg - Nov 21, 2023 (0 programs)\r\n```\r\n\r\nThe site also currently does not display the guide:\r\nimage\r\nhttps://www.kplus.vn/highlights/broadcast-schedule', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/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/epg/issues/2240/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2239', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/events', - html_url: 'https://github.com/iptv-org/epg/issues/2239', - id: 2000457187, - node_id: 'I_kwDOFLVvtM53PI3j', - number: 2239, - title: 'comteco.com.bo is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 3, - created_at: '2023-11-18T15:03:48Z', - updated_at: '2024-12-27T21:25:41Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ncomteco.com.bo\n\n### Description\n\n```sh\r\nnpm run grab -- --site=comteco.com.bo\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=comteco.com.bo\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: comteco.com.bo\r\nloading channels...\r\n found 72 channel(s)\r\nrun #1:\r\n [1/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 18, 2023 (0 programs)\r\n [2/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 19, 2023 (0 programs)\r\n [3/144] comteco.com.bo (es) - AEPanregional.us - Nov 19, 2023 (0 programs)\r\n [4/144] comteco.com.bo (es) - AnimalPlanetLatinAmerica.us - Nov 19, 2023 (0 programs)\r\n [5/144] comteco.com.bo (es) - BoliviaTV72.bo - Nov 19, 2023 (0 programs)\r\n```\r\n\r\nhttps://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/ABYA%20YALA\r\nimage', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/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/epg/issues/2239/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2237', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/events', - html_url: 'https://github.com/iptv-org/epg/issues/2237', - id: 2000349577, - node_id: 'I_kwDOFLVvtM53OumJ', - number: 2237, - title: 'canalplus-haiti.com is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-18T09:46:29Z', - updated_at: '2024-12-27T04:57:02Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ncanalplus-haiti.com\n\n### Description\n\n```sh\r\nnpm run grab -- --site=canalplus-haiti.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=canalplus-haiti.com\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: canalplus-haiti.com\r\nloading channels...\r\n found 111 channel(s)\r\nrun #1:\r\n [1/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n```\r\n\r\nhttps://check-host.net/check-report/134fc56bk333', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/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/epg/issues/2237/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2173', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/events', - html_url: 'https://github.com/iptv-org/epg/issues/2173', - id: 1903824500, - node_id: 'I_kwDOFLVvtM5xeg50', - number: 2173, - title: 'hd-plus.de - 0 programs on all channels', - user: { - login: 'x011', - id: 4313821, - node_id: 'MDQ6VXNlcjQzMTM4MjE=', - avatar_url: 'https://avatars.githubusercontent.com/u/4313821?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/x011', - html_url: 'https://github.com/x011', - followers_url: 'https://api.github.com/users/x011/followers', - following_url: 'https://api.github.com/users/x011/following{/other_user}', - gists_url: 'https://api.github.com/users/x011/gists{/gist_id}', - starred_url: 'https://api.github.com/users/x011/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/x011/subscriptions', - organizations_url: 'https://api.github.com/users/x011/orgs', - repos_url: 'https://api.github.com/users/x011/repos', - events_url: 'https://api.github.com/users/x011/events{/privacy}', - received_events_url: 'https://api.github.com/users/x011/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2023-09-19T22:45:56Z', - updated_at: '2024-12-27T04:54:11Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\nhd-plus.de\r\n\r\n### Description\r\n\r\nAll channels on hd-plus.de have 0 programs:\r\n```\r\n[1/60] hd-plus.de - 123tv.de - Sep 19, 2023 (0 programs)\r\n[2/60] hd-plus.de - 123tv.de - Sep 20, 2023 (0 programs)\r\n[3/60] hd-plus.de - ZDF.de - Sep 20, 2023 (0 programs)\r\n[4/60] hd-plus.de - ZDF.de - Sep 19, 2023 (0 programs)\r\n...\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/reactions', - total_count: 6, - '+1': 6, - '-1': 0, - laugh: 0, - hooray: 0, - confused: 0, - heart: 0, - rocket: 0, - eyes: 0 - }, - timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/timeline', - performed_via_github_app: null, - state_reason: null - } -] +module.exports = [ + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2547', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/events', + html_url: 'https://github.com/iptv-org/epg/issues/2547', + id: 2760418979, + node_id: 'I_kwDOFLVvtM6kiKaj', + number: 2547, + title: 'digiturk.com.tr', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-12-27T05:33:47Z', + updated_at: '2024-12-28T20:37:53Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ndigiturk.com.tr\n\n### Description\n\n```sh\r\nnpm run grab --- --site=digiturk.com.tr\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=digiturk.com.tr\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: digiturk.com.tr\r\nloading channels...\r\n found 139 channel(s)\r\nrun #1:\r\n [1/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/278] digiturk.com.tr (tr) - Yaban.tr - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/reactions', + total_count: 1, + '+1': 1, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2542', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/events', + html_url: 'https://github.com/iptv-org/epg/issues/2542', + id: 2759639980, + node_id: 'I_kwDOFLVvtM6kfMOs', + number: 2542, + title: 'tvguide.com not working', + user: { + login: 'SiWafer', + id: 10903014, + node_id: 'MDQ6VXNlcjEwOTAzMDE0', + avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/SiWafer', + html_url: 'https://github.com/SiWafer', + followers_url: 'https://api.github.com/users/SiWafer/followers', + following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', + gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', + starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', + organizations_url: 'https://api.github.com/users/SiWafer/orgs', + repos_url: 'https://api.github.com/users/SiWafer/repos', + events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', + received_events_url: 'https://api.github.com/users/SiWafer/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-26T11:11:24Z', + updated_at: '2024-12-27T05:28:55Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\ntvguide.com\n\n### Description\n\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=tvguide.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tvguide.com\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tvguide.com\r\nloading channels...\r\n found 39 channel(s)\r\nrun #1:\r\n [1/78] tvguide.com (en) - AEEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/78] tvguide.com (en) - AEEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/78] tvguide.com (en) - AMCEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/78] tvguide.com (en) - AMCEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [5/78] tvguide.com (en) - BravoEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [6/78] tvguide.com (en) - BravoEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [7/78] tvguide.com (en) - BBCAmericaEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [8/78] tvguide.com (en) - CNBC.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [9/78] tvguide.com (en) - CNBC.us - Dec 26, 2024 (0 programs)\r\n...\r\n...\r\n...\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/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/epg/issues/2542/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2541', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/events', + html_url: 'https://github.com/iptv-org/epg/issues/2541', + id: 2758749907, + node_id: 'I_kwDOFLVvtM6kby7T', + number: 2541, + title: 'elcinema.com grab error 403', + user: { + login: 'xercessss', + id: 189765257, + node_id: 'U_kgDOC0-WiQ', + avatar_url: 'https://avatars.githubusercontent.com/u/189765257?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/xercessss', + html_url: 'https://github.com/xercessss', + followers_url: 'https://api.github.com/users/xercessss/followers', + following_url: 'https://api.github.com/users/xercessss/following{/other_user}', + gists_url: 'https://api.github.com/users/xercessss/gists{/gist_id}', + starred_url: 'https://api.github.com/users/xercessss/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/xercessss/subscriptions', + organizations_url: 'https://api.github.com/users/xercessss/orgs', + repos_url: 'https://api.github.com/users/xercessss/repos', + events_url: 'https://api.github.com/users/xercessss/events{/privacy}', + received_events_url: 'https://api.github.com/users/xercessss/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-25T11:34:16Z', + updated_at: '2024-12-27T05:28:07Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nelcinema.com\n\n### Description\n\ngrabbing elcinema.com epg return error 403 for both ar and en language:\r\nERR: Request failed with status code 403\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/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/epg/issues/2541/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2509', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/events', + html_url: 'https://github.com/iptv-org/epg/issues/2509', + id: 2740938968, + node_id: 'I_kwDOFLVvtM6jX2jY', + number: 2509, + title: 'ssl problem maxtv.hrvatskitelekom.hr', + user: { + login: 'uploadkom', + id: 130712472, + node_id: 'U_kgDOB8qDmA', + avatar_url: 'https://avatars.githubusercontent.com/u/130712472?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/uploadkom', + html_url: 'https://github.com/uploadkom', + followers_url: 'https://api.github.com/users/uploadkom/followers', + following_url: 'https://api.github.com/users/uploadkom/following{/other_user}', + gists_url: 'https://api.github.com/users/uploadkom/gists{/gist_id}', + starred_url: 'https://api.github.com/users/uploadkom/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/uploadkom/subscriptions', + organizations_url: 'https://api.github.com/users/uploadkom/orgs', + repos_url: 'https://api.github.com/users/uploadkom/repos', + events_url: 'https://api.github.com/users/uploadkom/events{/privacy}', + received_events_url: 'https://api.github.com/users/uploadkom/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 3, + created_at: '2024-12-15T22:21:22Z', + updated_at: '2024-12-27T05:26:26Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nmaxtv.hrvatskitelekom.hr\n\n### Description\n\nssl problem', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/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/epg/issues/2509/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2498', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/events', + html_url: 'https://github.com/iptv-org/epg/issues/2498', + id: 2728188494, + node_id: 'I_kwDOFLVvtM6inNpO', + number: 2498, + title: 'movistarplus.es', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-09T20:26:07Z', + updated_at: '2024-12-27T05:23:48Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nmovistarplus.es\n\n### Description\n\n```sh\r\nnpm run grab -- --site=movistarplus.es\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=movistarplus.es\r\n\r\n(node:22362) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:\r\n--import \'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("file%3A///Users/Arhey/Code/iptv-org/epg/node_modules/tsx/dist/loader.mjs", pathToFileURL("./"));\'\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\n(node:22362) UnsupportedWarning: `globalPreload` has been removed; use `initialize` instead.\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: movistarplus.es\r\nloading channels...\r\n(node:22362) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.\r\n found 186 channel(s)\r\nrun #1:\r\n [1/372] movistarplus.es (es) - ANTV - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/372] movistarplus.es (es) - ANTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/372] movistarplus.es (es) - ARAGTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/372] movistarplus.es (es) - CANSUR - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/372] movistarplus.es (es) - DAZNL2 - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/372] movistarplus.es (es) - MLIGS - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [7/372] movistarplus.es (es) - AMC.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [8/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [9/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [10/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [11/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [12/372] movistarplus.es (es) - LaResistencia.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [13/372] movistarplus.es (es) - LaResistencia.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/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/epg/issues/2498/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2445', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/events', + html_url: 'https://github.com/iptv-org/epg/issues/2445', + id: 2567652015, + node_id: 'I_kwDOFLVvtM6ZC0Kv', + number: 2445, + title: 'EPG from dishtv.in stopped with error code 404', + user: { + login: 'dheer99', + id: 20639130, + node_id: 'MDQ6VXNlcjIwNjM5MTMw', + avatar_url: 'https://avatars.githubusercontent.com/u/20639130?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/dheer99', + html_url: 'https://github.com/dheer99', + followers_url: 'https://api.github.com/users/dheer99/followers', + following_url: 'https://api.github.com/users/dheer99/following{/other_user}', + gists_url: 'https://api.github.com/users/dheer99/gists{/gist_id}', + starred_url: 'https://api.github.com/users/dheer99/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/dheer99/subscriptions', + organizations_url: 'https://api.github.com/users/dheer99/orgs', + repos_url: 'https://api.github.com/users/dheer99/repos', + events_url: 'https://api.github.com/users/dheer99/events{/privacy}', + received_events_url: 'https://api.github.com/users/dheer99/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-10-05T04:30:52Z', + updated_at: '2024-12-27T05:20:11Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\ndishtv.in\n\n### Description\n\nEPG from dishtv.in stopped with error code 404\r\n\r\n [91/98] dishtv.in (en) - StarPlus.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [92/98] dishtv.in (en) - SET.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [93/98] dishtv.in (en) - ZeeCinema.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [94/98] dishtv.in (en) - SonySportsTen5.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [95/98] dishtv.in (en) - StarSports1.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [96/98] dishtv.in (en) - SET.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [97/98] dishtv.in (en) - SonySportsTen3.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [98/98] dishtv.in (en) - Colors.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 03s\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/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/epg/issues/2445/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2339', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/events', + html_url: 'https://github.com/iptv-org/epg/issues/2339', + id: 2172864415, + node_id: 'I_kwDOFLVvtM6Bg0ef', + number: 2339, + title: + 'directv.com.ar and directv.com.uy not working ERR: Unexpected token \'<\', " grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kan.org.il --output=kan.org.il.xml\r\n\r\nstarting...\r\nconfig:\r\n output: kan.org.il.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kan.org.il\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] kan.org.il (ar) - Makan33.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/6] kan.org.il (ar) - Makan33.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/6] kan.org.il (he) - KanEducational.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/6] kan.org.il (he) - KanEducational.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/6] kan.org.il (he) - Kan11.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/6] kan.org.il (he) - Kan11.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 01s\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2273/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/epg/issues/2273/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2270', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/events', + html_url: 'https://github.com/iptv-org/epg/issues/2270', + id: 2022018570, + node_id: 'I_kwDOFLVvtM54hY4K', + number: 2270, + title: 'vivacom.bg is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-12-02T12:16:22Z', + updated_at: '2024-12-27T05:00:36Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nvivacom.bg\n\n### Description\n\n```sh\r\nnpm run grab -- --site=vivacom.bg\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=vivacom.bg\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: vivacom.bg\r\nloading channels...\r\n found 154 channel(s)\r\nrun #1:\r\n [1/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 2, 2023 (0 programs)\r\n [2/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 3, 2023 (0 programs)\r\n [3/308] vivacom.bg (bg) - 78TV.bg - Dec 3, 2023 (0 programs)\r\n [4/308] vivacom.bg (bg) - AlfaTV.bg - Dec 3, 2023 (0 programs)\r\n [5/308] vivacom.bg (bg) - AXNEurope.gr - Dec 3, 2023 (0 programs)\r\n [6/308] vivacom.bg (bg) - BNT3.bg - Dec 3, 2023 (0 programs)\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/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/epg/issues/2270/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2264', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/events', + html_url: 'https://github.com/iptv-org/epg/issues/2264', + id: 2019407629, + node_id: 'I_kwDOFLVvtM54XbcN', + number: 2264, + title: 'tva.tv is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-30T20:00:18Z', + updated_at: '2024-12-27T05:00:24Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ntva.tv\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tva.tv\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tva.tv\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tva.tv\r\nloading channels...\r\n found 28 channel(s)\r\nrun #1:\r\n [1/56] tva.tv (fa) - DocTV.ir - Nov 30, 2023 (0 programs)\r\n ERR: Connection timeout\r\n [2/56] tva.tv (fa) - DocTV.ir - Dec 1, 2023 (0 programs)\r\n ERR: Connection timeout\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/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/epg/issues/2264/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2263', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/events', + html_url: 'https://github.com/iptv-org/epg/issues/2263', + id: 2019376043, + node_id: 'I_kwDOFLVvtM54XTur', + number: 2263, + title: 'tv.yettel.hu is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-30T19:38:28Z', + updated_at: '2024-12-27T04:59:14Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ntv.yettel.hu\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tv.yettel.hu\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tv.yettel.hu\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tv.yettel.hu\r\nloading channels...\r\n found 74 channel(s)\r\nrun #1:\r\n [1/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Nov 30, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n [2/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Dec 1, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/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/epg/issues/2263/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2257', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/events', + html_url: 'https://github.com/iptv-org/epg/issues/2257', + id: 2011054011, + node_id: 'I_kwDOFLVvtM533j-7', + number: 2257, + title: 'rtb.gov.bn is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-26T14:02:13Z', + updated_at: '2024-12-27T04:59:29Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nrtb.gov.bn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rtb.gov.bn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rtb.gov.bn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rtb.gov.bn\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 26, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [2/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [3/6] rtb.gov.bn (ms) - RTBPerdana.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n```\r\n\r\nThere is no link to the guide on the website at the moment either: https://www.rtb.gov.bn/SitePages/Programme%20Guide.aspx', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/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/epg/issues/2257/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2255', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/events', + html_url: 'https://github.com/iptv-org/epg/issues/2255', + id: 2011043202, + node_id: 'I_kwDOFLVvtM533hWC', + number: 2255, + title: 'rev.bs is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-11-26T13:31:22Z', + updated_at: '2024-12-27T22:02:28Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nrev.bs\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rev.bs\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rev.bs\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rev.bs\r\nloading channels...\r\n found 179 channel(s)\r\nrun #1:\r\n [1/358] rev.bs (en) - 3ABNEnglish.us - Nov 26, 2023 (0 programs)\r\n [2/358] rev.bs (en) - 3ABNEnglish.us - Nov 27, 2023 (0 programs)\r\n [3/358] rev.bs (en) - AEEast.us - Nov 27, 2023 (0 programs)\r\n [4/358] rev.bs (en) - AMCEast.us - Nov 27, 2023 (0 programs)\r\n```\r\n---\r\n\r\n```json\r\n{\r\n\t"status": "OK",\r\n\t"data": {\r\n\t\t"schedule": [],\r\n\t\t"dateTime": {\r\n\t\t\t"date": "2023-11-27",\r\n\t\t\t"page": 0\r\n\t\t},\r\n\t\t"runtimes": [\r\n\t\t\t{\r\n\t\t\t\t"Rev class loaded": 1700899490.604637\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"TVGuide Class Loaded": 1700899490.638891\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Validated form": 1700899490.640116\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Pulled schedules": 1700899490.642099\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n}\r\n```\r\n\r\nhttps://www.rev.bs/wp-content/uploads/tv-guide/2023-11-27_0.json\r\n\r\n---\r\n\r\nimage\r\n\r\nhttps://www.rev.bs/tv-guide-404/', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/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/epg/issues/2255/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2241', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/events', + html_url: 'https://github.com/iptv-org/epg/issues/2241', + id: 2002096969, + node_id: 'I_kwDOFLVvtM53VZNJ', + number: 2241, + title: 'm.tv.sms.cz is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 4, + created_at: '2023-11-20T12:28:47Z', + updated_at: '2024-12-27T04:58:41Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nm.tv.sms.cz\n\n### Description\n\n```sh\r\nnpm run grab -- --site=m.tv.sms.cz\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=m.tv.sms.cz\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: m.tv.sms.cz\r\nloading channels...\r\n found 525 channel(s)\r\nrun #1:\r\n [1/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 20, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [2/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [3/1050] m.tv.sms.cz (cs) - AMC.cz - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n```\r\n\r\nhttps://check-host.net/check-report/135d7e05kb9d', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/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/epg/issues/2241/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2240', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/events', + html_url: 'https://github.com/iptv-org/epg/issues/2240', + id: 2001847449, + node_id: 'I_kwDOFLVvtM53UcSZ', + number: 2240, + title: 'kplus.vn is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-20T10:19:23Z', + updated_at: '2024-12-27T04:57:49Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nkplus.vn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=kplus.vn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kplus.vn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kplus.vn\r\nloading channels...\r\n found 26 channel(s)\r\nrun #1:\r\n [1/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 20, 2023 (0 programs)\r\n [2/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 21, 2023 (0 programs)\r\n [3/52] kplus.vn (vi) - AXN.vn - Nov 21, 2023 (0 programs)\r\n [4/52] kplus.vn (vi) - DiscoveryChannelSoutheastAsia.sg - Nov 21, 2023 (0 programs)\r\n```\r\n\r\nThe site also currently does not display the guide:\r\nimage\r\nhttps://www.kplus.vn/highlights/broadcast-schedule', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/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/epg/issues/2240/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2239', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/events', + html_url: 'https://github.com/iptv-org/epg/issues/2239', + id: 2000457187, + node_id: 'I_kwDOFLVvtM53PI3j', + number: 2239, + title: 'comteco.com.bo is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 3, + created_at: '2023-11-18T15:03:48Z', + updated_at: '2024-12-27T21:25:41Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ncomteco.com.bo\n\n### Description\n\n```sh\r\nnpm run grab -- --site=comteco.com.bo\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=comteco.com.bo\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: comteco.com.bo\r\nloading channels...\r\n found 72 channel(s)\r\nrun #1:\r\n [1/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 18, 2023 (0 programs)\r\n [2/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 19, 2023 (0 programs)\r\n [3/144] comteco.com.bo (es) - AEPanregional.us - Nov 19, 2023 (0 programs)\r\n [4/144] comteco.com.bo (es) - AnimalPlanetLatinAmerica.us - Nov 19, 2023 (0 programs)\r\n [5/144] comteco.com.bo (es) - BoliviaTV72.bo - Nov 19, 2023 (0 programs)\r\n```\r\n\r\nhttps://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/ABYA%20YALA\r\nimage', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/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/epg/issues/2239/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2237', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/events', + html_url: 'https://github.com/iptv-org/epg/issues/2237', + id: 2000349577, + node_id: 'I_kwDOFLVvtM53OumJ', + number: 2237, + title: 'canalplus-haiti.com is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-18T09:46:29Z', + updated_at: '2024-12-27T04:57:02Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ncanalplus-haiti.com\n\n### Description\n\n```sh\r\nnpm run grab -- --site=canalplus-haiti.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=canalplus-haiti.com\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: canalplus-haiti.com\r\nloading channels...\r\n found 111 channel(s)\r\nrun #1:\r\n [1/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n```\r\n\r\nhttps://check-host.net/check-report/134fc56bk333', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/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/epg/issues/2237/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2173', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/events', + html_url: 'https://github.com/iptv-org/epg/issues/2173', + id: 1903824500, + node_id: 'I_kwDOFLVvtM5xeg50', + number: 2173, + title: 'hd-plus.de - 0 programs on all channels', + user: { + login: 'x011', + id: 4313821, + node_id: 'MDQ6VXNlcjQzMTM4MjE=', + avatar_url: 'https://avatars.githubusercontent.com/u/4313821?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/x011', + html_url: 'https://github.com/x011', + followers_url: 'https://api.github.com/users/x011/followers', + following_url: 'https://api.github.com/users/x011/following{/other_user}', + gists_url: 'https://api.github.com/users/x011/gists{/gist_id}', + starred_url: 'https://api.github.com/users/x011/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/x011/subscriptions', + organizations_url: 'https://api.github.com/users/x011/orgs', + repos_url: 'https://api.github.com/users/x011/repos', + events_url: 'https://api.github.com/users/x011/events{/privacy}', + received_events_url: 'https://api.github.com/users/x011/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-19T22:45:56Z', + updated_at: '2024-12-27T04:54:11Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\nhd-plus.de\r\n\r\n### Description\r\n\r\nAll channels on hd-plus.de have 0 programs:\r\n```\r\n[1/60] hd-plus.de - 123tv.de - Sep 19, 2023 (0 programs)\r\n[2/60] hd-plus.de - 123tv.de - Sep 20, 2023 (0 programs)\r\n[3/60] hd-plus.de - ZDF.de - Sep 20, 2023 (0 programs)\r\n[4/60] hd-plus.de - ZDF.de - Sep 19, 2023 (0 programs)\r\n...\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/reactions', + total_count: 6, + '+1': 6, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/timeline', + performed_via_github_app: null, + state_reason: null + } +] diff --git a/tests/__data__/input/issues/broken_guide_warning.js b/tests/__data__/input/issues/broken_guide_warning.js index e7f3bcfa..6680da90 100644 --- a/tests/__data__/input/issues/broken_guide_warning.js +++ b/tests/__data__/input/issues/broken_guide_warning.js @@ -1,974 +1,974 @@ -module.exports = [ - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2543', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/events', - html_url: 'https://github.com/iptv-org/epg/issues/2543', - id: 2759693796, - node_id: 'I_kwDOFLVvtM6kfZXk', - number: 2543, - title: 'flixed.io is downloding old programming', - user: { - login: 'SiWafer', - id: 10903014, - node_id: 'MDQ6VXNlcjEwOTAzMDE0', - avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/SiWafer', - html_url: 'https://github.com/SiWafer', - followers_url: 'https://api.github.com/users/SiWafer/followers', - following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', - gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', - starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', - organizations_url: 'https://api.github.com/users/SiWafer/orgs', - repos_url: 'https://api.github.com/users/SiWafer/repos', - events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', - received_events_url: 'https://api.github.com/users/SiWafer/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-26T12:09:43Z', - updated_at: '2024-12-27T05:29:58Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Describe your issue\r\n\r\nJust ran and updated, and seems the output is loading old programming and it also is not complete\r\n\r\nExample is Bravo channel\r\n\r\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=flixed.io --maxConnections=10 -o "flixed.xml"\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=flixed.io --maxConnections=10 -o flixed.xml\r\n\r\nstarting...\r\nconfig:\r\n output: flixed.xml\r\n maxConnections: 10\r\n gzip: false\r\n site: flixed.io\r\nloading channels...\r\n found 94 channel(s)\r\nrun #1:\r\n [1/94] flixed.io (en) - BravoEast.us - Dec 26, 2024 (2 programs)\r\n [2/94] flixed.io (en) - ComedyCentralEast.us - Dec 26, 2024 (5 programs)\r\n [3/94] flixed.io (en) - ACCNetwork.us - Dec 26, 2024 (26 programs)\r\n [4/94] flixed.io (en) - CNN.us - Dec 26, 2024 (25 programs)\r\n [5/94] flixed.io (en) - BloombergTV.us - Dec 26, 2024 (21 programs)\r\n [6/94] flixed.io (en) - AEEast.us - Dec 26, 2024 (6 programs)\r\n [7/94] flixed.io (en) - CNBC.us - Dec 26, 2024 (3 programs)\r\n [8/94] flixed.io (en) - CinemaxEast.us - Dec 26, 2024 (14 programs)\r\n [9/94] flixed.io (en) - AMCEast.us - Dec 26, 2024 (19 programs)\r\n [10/94] flixed.io (en) - BigTenNetwork.us - Dec 26, 2024 (3 programs)\r\n [11/94] flixed.io (en) - FoxWest.us - Dec 26, 2024 (8 programs)\r\n [12/94] flixed.io (en) - FreeformEast.us - Dec 26, 2024 (2 programs)\r\n [13/94] flixed.io (en) - FoxSports2.us - Dec 26, 2024 (2 programs)\r\n [14/94] flixed.io (en) - FoodNetworkEast.us - Dec 26, 2024 (3 programs)\r\n...\r\n...\r\n...\r\n\r\n```\r\nSnip from xml file out\r\n![image](https://github.com/user-attachments/assets/5ed6d7eb-df59-4951-9b2c-5214e24d24ac)\r\n\r\nThe date is September 26, 2024, 01:00:00 for Bravo\r\n\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/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/epg/issues/2543/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2516', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/events', - html_url: 'https://github.com/iptv-org/epg/issues/2516', - id: 2745387354, - node_id: 'I_kwDOFLVvtM6jo0la', - number: 2516, - title: 'Duplicate programmes with sky.com grab', - user: { - login: 'misar1', - id: 69795879, - node_id: 'MDQ6VXNlcjY5Nzk1ODc5', - avatar_url: 'https://avatars.githubusercontent.com/u/69795879?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/misar1', - html_url: 'https://github.com/misar1', - followers_url: 'https://api.github.com/users/misar1/followers', - following_url: 'https://api.github.com/users/misar1/following{/other_user}', - gists_url: 'https://api.github.com/users/misar1/gists{/gist_id}', - starred_url: 'https://api.github.com/users/misar1/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/misar1/subscriptions', - organizations_url: 'https://api.github.com/users/misar1/orgs', - repos_url: 'https://api.github.com/users/misar1/repos', - events_url: 'https://api.github.com/users/misar1/events{/privacy}', - received_events_url: 'https://api.github.com/users/misar1/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-12-17T16:19:36Z', - updated_at: '2024-12-27T05:27:44Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nsky.com\n\n### Description\n\n\r\nI changed to the recently updated sky.com script a couple of days ago (using a completely new install as in the readme) and have found an anomaly. This does not occur with an identical grab using my previous installation. The grabs are for about 60 UK FTA channels which I can list if it would be helpful.\r\n\r\nA number of programmes have two identical blocks in the XML, including their start and finish times. This occurs only from around approximately 22:00 each day and up to about midnight GMT. During this period most channels are affected and it is consistent between successive grabs. In case of a timing issue I tested delays of 100, 1000, 3000 and 5000 msec but the XML was unchanged.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/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/epg/issues/2516/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2501', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/events', - html_url: 'https://github.com/iptv-org/epg/issues/2501', - id: 2738899005, - node_id: 'I_kwDOFLVvtM6jQEg9', - number: 2501, - title: 'Sky.com', - user: { - login: 'Chris230291', - id: 5328818, - node_id: 'MDQ6VXNlcjUzMjg4MTg=', - avatar_url: 'https://avatars.githubusercontent.com/u/5328818?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/Chris230291', - html_url: 'https://github.com/Chris230291', - followers_url: 'https://api.github.com/users/Chris230291/followers', - following_url: 'https://api.github.com/users/Chris230291/following{/other_user}', - gists_url: 'https://api.github.com/users/Chris230291/gists{/gist_id}', - starred_url: 'https://api.github.com/users/Chris230291/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/Chris230291/subscriptions', - organizations_url: 'https://api.github.com/users/Chris230291/orgs', - repos_url: 'https://api.github.com/users/Chris230291/repos', - events_url: 'https://api.github.com/users/Chris230291/events{/privacy}', - received_events_url: 'https://api.github.com/users/Chris230291/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-12-13T17:45:02Z', - updated_at: '2024-12-27T05:25:49Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nsky.com\n\n### Description\n\n```\r\n Viaplay 1 HD\r\n Viaplay 2 HD\r\n```\r\n\r\nThese should be "Premier Sports 1 HD" and "Premier Sports 2 HD".\r\nAlso, the UK and ROI have different schedules for these 2 channels.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/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/epg/issues/2501/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2446', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/events', - html_url: 'https://github.com/iptv-org/epg/issues/2446', - id: 2568624116, - node_id: 'I_kwDOFLVvtM6ZGhf0', - number: 2446, - title: 'Eleven channels returning 0 programs on meo.pt', - user: { - login: 'jonatasgz', - id: 78122211, - node_id: 'MDQ6VXNlcjc4MTIyMjEx', - avatar_url: 'https://avatars.githubusercontent.com/u/78122211?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/jonatasgz', - html_url: 'https://github.com/jonatasgz', - followers_url: 'https://api.github.com/users/jonatasgz/followers', - following_url: 'https://api.github.com/users/jonatasgz/following{/other_user}', - gists_url: 'https://api.github.com/users/jonatasgz/gists{/gist_id}', - starred_url: 'https://api.github.com/users/jonatasgz/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/jonatasgz/subscriptions', - organizations_url: 'https://api.github.com/users/jonatasgz/orgs', - repos_url: 'https://api.github.com/users/jonatasgz/repos', - events_url: 'https://api.github.com/users/jonatasgz/events{/privacy}', - received_events_url: 'https://api.github.com/users/jonatasgz/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-10-06T12:00:48Z', - updated_at: '2024-12-27T05:23:16Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nmeo.pt\n\n### Description\n\nEleven (DAZN) channels return 0 programs.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/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/epg/issues/2446/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2400', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/events', - html_url: 'https://github.com/iptv-org/epg/issues/2400', - id: 2370209498, - node_id: 'I_kwDOFLVvtM6NRoba', - number: 2400, - title: 'tvgids.nl', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-06-24T13:05:05Z', - updated_at: '2024-12-27T05:19:25Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: "### Site\n\ntvgids.nl\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvgids.nl \r\n\r\n> test\r\n> run-script-os tvgids.nl\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvgids.nl\r\n\r\n FAIL sites/tvgids.nl/tvgids.nl.test.js\r\n ✓ can generate valid url (29 ms)\r\n ✕ can generate valid url for today (4 ms)\r\n ✓ can parse response (307 ms)\r\n ✓ can handle empty guide (3 ms)\r\n\r\n ● can generate valid url for today\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: \"https://www.tvgids.nl/gids/npo1\"\r\n Received: \"https://www.tvgids.nl/gids/25-06-2024/npo1\"\r\n\r\n 21 | const today = dayjs().startOf('d')\r\n 22 |\r\n > 23 | expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/npo1')\r\n | ^\r\n 24 | })\r\n 25 |\r\n 26 | it('can parse response', () => {\r\n\r\n at Object. (sites/tvgids.nl/tvgids.nl.test.js:23:41)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.52 s\r\nRan all test suites matching /tvgids.nl/i.\r\n```", - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/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/epg/issues/2400/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2399', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/events', - html_url: 'https://github.com/iptv-org/epg/issues/2399', - id: 2370207356, - node_id: 'I_kwDOFLVvtM6NRn58', - number: 2399, - title: 'tvprofil.com', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-06-24T13:04:08Z', - updated_at: '2024-12-27T05:18:50Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ntvprofil.com\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvprofil.com\r\n\r\n> test\r\n> run-script-os tvprofil.com\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvprofil.com\r\n\r\n FAIL sites/tvprofil.com/tvprofil.com.test.js\r\n ✕ can generate valid url (14 ms)\r\n ✓ can generate valid request headers (1 ms)\r\n ✓ can parse response (76 ms)\r\n ✓ can handle empty guide (2 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933"\r\n Received: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b49=819461"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/tvprofil.com/tvprofil.com.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.307 s\r\nRan all test suites matching /tvprofil.com/i.\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/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/epg/issues/2399/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2396', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/events', - html_url: 'https://github.com/iptv-org/epg/issues/2396', - id: 2370189473, - node_id: 'I_kwDOFLVvtM6NRjih', - number: 2396, - title: 'iltalehti.fi', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-06-24T12:56:45Z', - updated_at: '2024-12-27T05:18:16Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\niltalehti.fi\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- iltalehti.fi \r\n\r\n> test\r\n> run-script-os iltalehti.fi\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand iltalehti.fi\r\n\r\n FAIL sites/iltalehti.fi/iltalehti.fi.test.js\r\n ✕ can generate valid url (10 ms)\r\n ✓ can parse response (28 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n Received: "https://telkku.com/api/channel-groups/default_builtin_channelgroupdefault_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/iltalehti.fi/iltalehti.fi.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 3.193 s\r\nRan all test suites matching /iltalehti.fi/i.\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/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/epg/issues/2396/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2395', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/events', - html_url: 'https://github.com/iptv-org/epg/issues/2395', - id: 2370186157, - node_id: 'I_kwDOFLVvtM6NRiut', - number: 2395, - title: 'chaines-tv.orange.fr', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-06-24T12:55:21Z', - updated_at: '2024-12-27T05:17:25Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\r\n\r\nchaines-tv.orange.fr\r\n\r\n### Description\r\n\r\nTest failed:\r\n\r\n```sh\r\nnpm test -- chaines-tv.orange.fr\r\n\r\n> test\r\n> run-script-os chaines-tv.orange.fr\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand chaines-tv.orange.fr\r\n\r\n FAIL sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js\r\n ✓ can generate valid url (5 ms)\r\n ✕ can parse response (12 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can parse response\r\n\r\n expect(received).toMatchObject(expected)\r\n\r\n - Expected - 1\r\n + Received + 1\r\n\r\n @@ -3,8 +3,8 @@\r\n "category": "Série Suspense",\r\n "description": "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.",\r\n "icon": "https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg",\r\n "start": "2021-11-07T23:35:00.000Z",\r\n "stop": "2021-11-08T00:20:00.000Z",\r\n - "title": "Tête de liste",\r\n + "title": "Esprits criminels",\r\n },\r\n ]\r\n\r\n 23 | it(\'can parse response\', () => {\r\n 24 | const result = parser({ date, channel, content })\r\n > 25 | expect(result).toMatchObject([\r\n | ^\r\n 26 | {\r\n 27 | start: \'2021-11-07T23:35:00.000Z\',\r\n 28 | stop: \'2021-11-08T00:20:00.000Z\',\r\n\r\n at Object. (sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js:25:18)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 4.003 s\r\nRan all test suites matching /chaines-tv.orange.fr/i.\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/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/epg/issues/2395/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2304', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/events', - html_url: 'https://github.com/iptv-org/epg/issues/2304', - id: 2064638324, - node_id: 'I_kwDOFLVvtM57D-F0', - number: 2304, - title: 'digiturk.com.tr Missing Channel Identifications', - user: { - login: 'UzunMuhalefet', - id: 80906858, - node_id: 'MDQ6VXNlcjgwOTA2ODU4', - avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/UzunMuhalefet', - html_url: 'https://github.com/UzunMuhalefet', - followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', - following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', - gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', - starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', - organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', - repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', - events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', - received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-01-03T20:57:58Z', - updated_at: '2024-12-27T05:32:37Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\ndigiturk.com.tr\r\n\r\n### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nKANAL 24 HD\r\nTARIH TV HD\r\nSÖZCÜ TV HD\r\n```\r\n\r\nLet me clarify the cases:\r\n- SZC changed its name to Sözcü TV\r\n- 24 TV often called as Kanal (Channel) 24\r\n- Tarih TV is straightforward.\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/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/epg/issues/2304/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2303', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/events', - html_url: 'https://github.com/iptv-org/epg/issues/2303', - id: 2064633657, - node_id: 'I_kwDOFLVvtM57D885', - number: 2303, - title: 'dsmart.com.tr Channel Identifications', - user: { - login: 'UzunMuhalefet', - id: 80906858, - node_id: 'MDQ6VXNlcjgwOTA2ODU4', - avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/UzunMuhalefet', - html_url: 'https://github.com/UzunMuhalefet', - followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', - following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', - gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', - starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', - organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', - repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', - events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', - received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-01-03T20:53:34Z', - updated_at: '2024-12-27T05:44:16Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nNR1\r\nNR1 Türk\r\nTRT EBA TV İlkokul\r\nTRT EBA TV Ortaokul\r\nTRT EBA TV Lise\r\nÇifçi TV\r\nKanal 16\r\nFlash Haber\r\nYeni Kocaeli TV\r\nATV Turkiye SD\r\nTRT EBA TV İlkokul SD\r\nTRT EBA TV Ortaokul SD\r\nTRT EBA TV Lise SD\r\nTarih Tv\r\nSZC\r\nTRT 3 Spor\r\n``` \r\n\r\nLet me clarify the cases: \r\n\r\n- NR1 stands for Number One\r\n- Cifci TV - Çiftçi TV - misspelling\r\n- The number 16 is spelled as onaltı (on -> 10, altı->6, on6 -> 16) in Turkish so on6 - Kanal 16\r\n- Flash TV changed its name to Flash Haber TV\r\n- SZC changed its name to Sözcü TV\r\n- TRT 3 is a strange channel that usually streams the same content as TRT Spor but when there is a Turkish parliament event it switches to that event. So, the channel is both called TRT 3 and TRT 3 Spor.\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/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/epg/issues/2303/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2272', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/events', - html_url: 'https://github.com/iptv-org/epg/issues/2272', - id: 2022135766, - node_id: 'I_kwDOFLVvtM54h1fW', - number: 2272, - title: 'Film titles with numbers only in the title (as in "1900" or "1917") don\'t show up', - user: { - login: 'GlamoramaAttack', - id: 116585465, - node_id: 'U_kgDOBvLz-Q', - avatar_url: 'https://avatars.githubusercontent.com/u/116585465?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/GlamoramaAttack', - html_url: 'https://github.com/GlamoramaAttack', - followers_url: 'https://api.github.com/users/GlamoramaAttack/followers', - following_url: 'https://api.github.com/users/GlamoramaAttack/following{/other_user}', - gists_url: 'https://api.github.com/users/GlamoramaAttack/gists{/gist_id}', - starred_url: 'https://api.github.com/users/GlamoramaAttack/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/GlamoramaAttack/subscriptions', - organizations_url: 'https://api.github.com/users/GlamoramaAttack/orgs', - repos_url: 'https://api.github.com/users/GlamoramaAttack/repos', - events_url: 'https://api.github.com/users/GlamoramaAttack/events{/privacy}', - received_events_url: 'https://api.github.com/users/GlamoramaAttack/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2023-12-02T17:29:50Z', - updated_at: '2024-12-27T05:02:05Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\ntvpassport.com\r\n\r\n### Describe your issue\r\n\r\nFilm titles with numbers only in the title -as in "1900" or "1917"- don\'t show up at all.\r\n\r\nSorry, I don\'t understand anything about how to write a script or fix it but I see there is notable difference in the **guide.xml** file - the examples are excerpts from tvpassport.com. This isn\'t a new bug I think, it\'s just that I thought for a long time it\'s a Kodi problem before looking into the guide.xml file...\r\n\r\n```\r\nchannel="Showtime2East.us">The Caine Mutiny Court-MartialA \r\nchannel="Showtime2East.us">Two British soldiers receive seemingly impossible orders \r\nchannel="Showtime2East.us">There Will Be BloodDaniel \r\n```\r\nor:\r\n\r\n```\r\nchannel="MGMPlusEast.us">A Fistful of DynamiteA thief \r\nchannel="MGMPlusEast.us">The son (Robert De Niro) of a landowner and the son \r\nchannel="MGMPlusEast.us">Indecent ProposalA Las Vegas \r\n```\r\n\r\nFor some reason "title lang" gets replaced by "desc lang" and the film title is nowhere displayed.\r\n\r\nOn Kodi it looks like this for the films and you can also see it\'s not a problem if the film title includes more than numbers (see "88 Minutes" or "Resistance: 1942"). But titles as "1900", "1917" or "1408" (Horror with John Cusack) appear blank.\r\n\r\n![NoTitleWithNumbers](https://github.com/iptv-org/epg/assets/116585465/155f98f8-8529-4c42-af3c-def1edcf5651)\r\n\r\nI\'m not sure whether the problem also exists with other sources than tvpassport.com because I use only two other (German language) EPG sources that have currently no film titles with numbers only. But I assume it\'s a bug if it\'s not reduced to tvpassport.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/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/epg/issues/2272/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2176', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/events', - html_url: 'https://github.com/iptv-org/epg/issues/2176', - id: 1915947653, - node_id: 'I_kwDOFLVvtM5yMwqF', - number: 2176, - title: 'tvtv', - user: { - login: 'jvdillon', - id: 1137078, - node_id: 'MDQ6VXNlcjExMzcwNzg=', - avatar_url: 'https://avatars.githubusercontent.com/u/1137078?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/jvdillon', - html_url: 'https://github.com/jvdillon', - followers_url: 'https://api.github.com/users/jvdillon/followers', - following_url: 'https://api.github.com/users/jvdillon/following{/other_user}', - gists_url: 'https://api.github.com/users/jvdillon/gists{/gist_id}', - starred_url: 'https://api.github.com/users/jvdillon/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/jvdillon/subscriptions', - organizations_url: 'https://api.github.com/users/jvdillon/orgs', - repos_url: 'https://api.github.com/users/jvdillon/repos', - events_url: 'https://api.github.com/users/jvdillon/events{/privacy}', - received_events_url: 'https://api.github.com/users/jvdillon/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 6, - created_at: '2023-09-27T16:34:00Z', - updated_at: '2024-12-27T04:55:00Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\ntvtv.us\r\n\r\n### Description\r\n\r\nStarts getting error 429 after several 100 scrapes. I tried setting the delay to 1000ms, 1500ms, and 2000ms but keep seeing the issue.\r\n\r\nIt almost appears to happen after a sequence of 0 program scrapes. I wonder if the delay is not happening when nothing is downloaded which causes tvtv.us to throttle which triggers 0 programs downloaded. (Ie a feedback loop)', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/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/epg/issues/2176/timeline', - performed_via_github_app: null, - state_reason: null - } -] +module.exports = [ + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2543', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/events', + html_url: 'https://github.com/iptv-org/epg/issues/2543', + id: 2759693796, + node_id: 'I_kwDOFLVvtM6kfZXk', + number: 2543, + title: 'flixed.io is downloding old programming', + user: { + login: 'SiWafer', + id: 10903014, + node_id: 'MDQ6VXNlcjEwOTAzMDE0', + avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/SiWafer', + html_url: 'https://github.com/SiWafer', + followers_url: 'https://api.github.com/users/SiWafer/followers', + following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', + gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', + starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', + organizations_url: 'https://api.github.com/users/SiWafer/orgs', + repos_url: 'https://api.github.com/users/SiWafer/repos', + events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', + received_events_url: 'https://api.github.com/users/SiWafer/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-26T12:09:43Z', + updated_at: '2024-12-27T05:29:58Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Describe your issue\r\n\r\nJust ran and updated, and seems the output is loading old programming and it also is not complete\r\n\r\nExample is Bravo channel\r\n\r\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=flixed.io --maxConnections=10 -o "flixed.xml"\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=flixed.io --maxConnections=10 -o flixed.xml\r\n\r\nstarting...\r\nconfig:\r\n output: flixed.xml\r\n maxConnections: 10\r\n gzip: false\r\n site: flixed.io\r\nloading channels...\r\n found 94 channel(s)\r\nrun #1:\r\n [1/94] flixed.io (en) - BravoEast.us - Dec 26, 2024 (2 programs)\r\n [2/94] flixed.io (en) - ComedyCentralEast.us - Dec 26, 2024 (5 programs)\r\n [3/94] flixed.io (en) - ACCNetwork.us - Dec 26, 2024 (26 programs)\r\n [4/94] flixed.io (en) - CNN.us - Dec 26, 2024 (25 programs)\r\n [5/94] flixed.io (en) - BloombergTV.us - Dec 26, 2024 (21 programs)\r\n [6/94] flixed.io (en) - AEEast.us - Dec 26, 2024 (6 programs)\r\n [7/94] flixed.io (en) - CNBC.us - Dec 26, 2024 (3 programs)\r\n [8/94] flixed.io (en) - CinemaxEast.us - Dec 26, 2024 (14 programs)\r\n [9/94] flixed.io (en) - AMCEast.us - Dec 26, 2024 (19 programs)\r\n [10/94] flixed.io (en) - BigTenNetwork.us - Dec 26, 2024 (3 programs)\r\n [11/94] flixed.io (en) - FoxWest.us - Dec 26, 2024 (8 programs)\r\n [12/94] flixed.io (en) - FreeformEast.us - Dec 26, 2024 (2 programs)\r\n [13/94] flixed.io (en) - FoxSports2.us - Dec 26, 2024 (2 programs)\r\n [14/94] flixed.io (en) - FoodNetworkEast.us - Dec 26, 2024 (3 programs)\r\n...\r\n...\r\n...\r\n\r\n```\r\nSnip from xml file out\r\n![image](https://github.com/user-attachments/assets/5ed6d7eb-df59-4951-9b2c-5214e24d24ac)\r\n\r\nThe date is September 26, 2024, 01:00:00 for Bravo\r\n\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/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/epg/issues/2543/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2516', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/events', + html_url: 'https://github.com/iptv-org/epg/issues/2516', + id: 2745387354, + node_id: 'I_kwDOFLVvtM6jo0la', + number: 2516, + title: 'Duplicate programmes with sky.com grab', + user: { + login: 'misar1', + id: 69795879, + node_id: 'MDQ6VXNlcjY5Nzk1ODc5', + avatar_url: 'https://avatars.githubusercontent.com/u/69795879?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/misar1', + html_url: 'https://github.com/misar1', + followers_url: 'https://api.github.com/users/misar1/followers', + following_url: 'https://api.github.com/users/misar1/following{/other_user}', + gists_url: 'https://api.github.com/users/misar1/gists{/gist_id}', + starred_url: 'https://api.github.com/users/misar1/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/misar1/subscriptions', + organizations_url: 'https://api.github.com/users/misar1/orgs', + repos_url: 'https://api.github.com/users/misar1/repos', + events_url: 'https://api.github.com/users/misar1/events{/privacy}', + received_events_url: 'https://api.github.com/users/misar1/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-12-17T16:19:36Z', + updated_at: '2024-12-27T05:27:44Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nsky.com\n\n### Description\n\n\r\nI changed to the recently updated sky.com script a couple of days ago (using a completely new install as in the readme) and have found an anomaly. This does not occur with an identical grab using my previous installation. The grabs are for about 60 UK FTA channels which I can list if it would be helpful.\r\n\r\nA number of programmes have two identical blocks in the XML, including their start and finish times. This occurs only from around approximately 22:00 each day and up to about midnight GMT. During this period most channels are affected and it is consistent between successive grabs. In case of a timing issue I tested delays of 100, 1000, 3000 and 5000 msec but the XML was unchanged.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/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/epg/issues/2516/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2501', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/events', + html_url: 'https://github.com/iptv-org/epg/issues/2501', + id: 2738899005, + node_id: 'I_kwDOFLVvtM6jQEg9', + number: 2501, + title: 'Sky.com', + user: { + login: 'Chris230291', + id: 5328818, + node_id: 'MDQ6VXNlcjUzMjg4MTg=', + avatar_url: 'https://avatars.githubusercontent.com/u/5328818?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/Chris230291', + html_url: 'https://github.com/Chris230291', + followers_url: 'https://api.github.com/users/Chris230291/followers', + following_url: 'https://api.github.com/users/Chris230291/following{/other_user}', + gists_url: 'https://api.github.com/users/Chris230291/gists{/gist_id}', + starred_url: 'https://api.github.com/users/Chris230291/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/Chris230291/subscriptions', + organizations_url: 'https://api.github.com/users/Chris230291/orgs', + repos_url: 'https://api.github.com/users/Chris230291/repos', + events_url: 'https://api.github.com/users/Chris230291/events{/privacy}', + received_events_url: 'https://api.github.com/users/Chris230291/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-12-13T17:45:02Z', + updated_at: '2024-12-27T05:25:49Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nsky.com\n\n### Description\n\n```\r\n Viaplay 1 HD\r\n Viaplay 2 HD\r\n```\r\n\r\nThese should be "Premier Sports 1 HD" and "Premier Sports 2 HD".\r\nAlso, the UK and ROI have different schedules for these 2 channels.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/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/epg/issues/2501/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2446', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/events', + html_url: 'https://github.com/iptv-org/epg/issues/2446', + id: 2568624116, + node_id: 'I_kwDOFLVvtM6ZGhf0', + number: 2446, + title: 'Eleven channels returning 0 programs on meo.pt', + user: { + login: 'jonatasgz', + id: 78122211, + node_id: 'MDQ6VXNlcjc4MTIyMjEx', + avatar_url: 'https://avatars.githubusercontent.com/u/78122211?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/jonatasgz', + html_url: 'https://github.com/jonatasgz', + followers_url: 'https://api.github.com/users/jonatasgz/followers', + following_url: 'https://api.github.com/users/jonatasgz/following{/other_user}', + gists_url: 'https://api.github.com/users/jonatasgz/gists{/gist_id}', + starred_url: 'https://api.github.com/users/jonatasgz/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/jonatasgz/subscriptions', + organizations_url: 'https://api.github.com/users/jonatasgz/orgs', + repos_url: 'https://api.github.com/users/jonatasgz/repos', + events_url: 'https://api.github.com/users/jonatasgz/events{/privacy}', + received_events_url: 'https://api.github.com/users/jonatasgz/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-10-06T12:00:48Z', + updated_at: '2024-12-27T05:23:16Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nmeo.pt\n\n### Description\n\nEleven (DAZN) channels return 0 programs.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/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/epg/issues/2446/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2400', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/events', + html_url: 'https://github.com/iptv-org/epg/issues/2400', + id: 2370209498, + node_id: 'I_kwDOFLVvtM6NRoba', + number: 2400, + title: 'tvgids.nl', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-06-24T13:05:05Z', + updated_at: '2024-12-27T05:19:25Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: "### Site\n\ntvgids.nl\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvgids.nl \r\n\r\n> test\r\n> run-script-os tvgids.nl\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvgids.nl\r\n\r\n FAIL sites/tvgids.nl/tvgids.nl.test.js\r\n ✓ can generate valid url (29 ms)\r\n ✕ can generate valid url for today (4 ms)\r\n ✓ can parse response (307 ms)\r\n ✓ can handle empty guide (3 ms)\r\n\r\n ● can generate valid url for today\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: \"https://www.tvgids.nl/gids/npo1\"\r\n Received: \"https://www.tvgids.nl/gids/25-06-2024/npo1\"\r\n\r\n 21 | const today = dayjs().startOf('d')\r\n 22 |\r\n > 23 | expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/npo1')\r\n | ^\r\n 24 | })\r\n 25 |\r\n 26 | it('can parse response', () => {\r\n\r\n at Object. (sites/tvgids.nl/tvgids.nl.test.js:23:41)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.52 s\r\nRan all test suites matching /tvgids.nl/i.\r\n```", + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/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/epg/issues/2400/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2399', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/events', + html_url: 'https://github.com/iptv-org/epg/issues/2399', + id: 2370207356, + node_id: 'I_kwDOFLVvtM6NRn58', + number: 2399, + title: 'tvprofil.com', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-06-24T13:04:08Z', + updated_at: '2024-12-27T05:18:50Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ntvprofil.com\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvprofil.com\r\n\r\n> test\r\n> run-script-os tvprofil.com\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvprofil.com\r\n\r\n FAIL sites/tvprofil.com/tvprofil.com.test.js\r\n ✕ can generate valid url (14 ms)\r\n ✓ can generate valid request headers (1 ms)\r\n ✓ can parse response (76 ms)\r\n ✓ can handle empty guide (2 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933"\r\n Received: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b49=819461"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/tvprofil.com/tvprofil.com.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.307 s\r\nRan all test suites matching /tvprofil.com/i.\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/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/epg/issues/2399/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2396', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/events', + html_url: 'https://github.com/iptv-org/epg/issues/2396', + id: 2370189473, + node_id: 'I_kwDOFLVvtM6NRjih', + number: 2396, + title: 'iltalehti.fi', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-06-24T12:56:45Z', + updated_at: '2024-12-27T05:18:16Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\niltalehti.fi\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- iltalehti.fi \r\n\r\n> test\r\n> run-script-os iltalehti.fi\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand iltalehti.fi\r\n\r\n FAIL sites/iltalehti.fi/iltalehti.fi.test.js\r\n ✕ can generate valid url (10 ms)\r\n ✓ can parse response (28 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n Received: "https://telkku.com/api/channel-groups/default_builtin_channelgroupdefault_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/iltalehti.fi/iltalehti.fi.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 3.193 s\r\nRan all test suites matching /iltalehti.fi/i.\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/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/epg/issues/2396/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2395', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/events', + html_url: 'https://github.com/iptv-org/epg/issues/2395', + id: 2370186157, + node_id: 'I_kwDOFLVvtM6NRiut', + number: 2395, + title: 'chaines-tv.orange.fr', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-06-24T12:55:21Z', + updated_at: '2024-12-27T05:17:25Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\r\n\r\nchaines-tv.orange.fr\r\n\r\n### Description\r\n\r\nTest failed:\r\n\r\n```sh\r\nnpm test -- chaines-tv.orange.fr\r\n\r\n> test\r\n> run-script-os chaines-tv.orange.fr\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand chaines-tv.orange.fr\r\n\r\n FAIL sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js\r\n ✓ can generate valid url (5 ms)\r\n ✕ can parse response (12 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can parse response\r\n\r\n expect(received).toMatchObject(expected)\r\n\r\n - Expected - 1\r\n + Received + 1\r\n\r\n @@ -3,8 +3,8 @@\r\n "category": "Série Suspense",\r\n "description": "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.",\r\n "icon": "https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg",\r\n "start": "2021-11-07T23:35:00.000Z",\r\n "stop": "2021-11-08T00:20:00.000Z",\r\n - "title": "Tête de liste",\r\n + "title": "Esprits criminels",\r\n },\r\n ]\r\n\r\n 23 | it(\'can parse response\', () => {\r\n 24 | const result = parser({ date, channel, content })\r\n > 25 | expect(result).toMatchObject([\r\n | ^\r\n 26 | {\r\n 27 | start: \'2021-11-07T23:35:00.000Z\',\r\n 28 | stop: \'2021-11-08T00:20:00.000Z\',\r\n\r\n at Object. (sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js:25:18)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 4.003 s\r\nRan all test suites matching /chaines-tv.orange.fr/i.\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/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/epg/issues/2395/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2304', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/events', + html_url: 'https://github.com/iptv-org/epg/issues/2304', + id: 2064638324, + node_id: 'I_kwDOFLVvtM57D-F0', + number: 2304, + title: 'digiturk.com.tr Missing Channel Identifications', + user: { + login: 'UzunMuhalefet', + id: 80906858, + node_id: 'MDQ6VXNlcjgwOTA2ODU4', + avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/UzunMuhalefet', + html_url: 'https://github.com/UzunMuhalefet', + followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', + following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', + gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', + starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', + organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', + repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', + events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', + received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-01-03T20:57:58Z', + updated_at: '2024-12-27T05:32:37Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\ndigiturk.com.tr\r\n\r\n### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nKANAL 24 HD\r\nTARIH TV HD\r\nSÖZCÜ TV HD\r\n```\r\n\r\nLet me clarify the cases:\r\n- SZC changed its name to Sözcü TV\r\n- 24 TV often called as Kanal (Channel) 24\r\n- Tarih TV is straightforward.\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/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/epg/issues/2304/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2303', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/events', + html_url: 'https://github.com/iptv-org/epg/issues/2303', + id: 2064633657, + node_id: 'I_kwDOFLVvtM57D885', + number: 2303, + title: 'dsmart.com.tr Channel Identifications', + user: { + login: 'UzunMuhalefet', + id: 80906858, + node_id: 'MDQ6VXNlcjgwOTA2ODU4', + avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/UzunMuhalefet', + html_url: 'https://github.com/UzunMuhalefet', + followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', + following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', + gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', + starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', + organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', + repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', + events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', + received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-01-03T20:53:34Z', + updated_at: '2024-12-27T05:44:16Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nNR1\r\nNR1 Türk\r\nTRT EBA TV İlkokul\r\nTRT EBA TV Ortaokul\r\nTRT EBA TV Lise\r\nÇifçi TV\r\nKanal 16\r\nFlash Haber\r\nYeni Kocaeli TV\r\nATV Turkiye SD\r\nTRT EBA TV İlkokul SD\r\nTRT EBA TV Ortaokul SD\r\nTRT EBA TV Lise SD\r\nTarih Tv\r\nSZC\r\nTRT 3 Spor\r\n``` \r\n\r\nLet me clarify the cases: \r\n\r\n- NR1 stands for Number One\r\n- Cifci TV - Çiftçi TV - misspelling\r\n- The number 16 is spelled as onaltı (on -> 10, altı->6, on6 -> 16) in Turkish so on6 - Kanal 16\r\n- Flash TV changed its name to Flash Haber TV\r\n- SZC changed its name to Sözcü TV\r\n- TRT 3 is a strange channel that usually streams the same content as TRT Spor but when there is a Turkish parliament event it switches to that event. So, the channel is both called TRT 3 and TRT 3 Spor.\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/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/epg/issues/2303/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2272', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/events', + html_url: 'https://github.com/iptv-org/epg/issues/2272', + id: 2022135766, + node_id: 'I_kwDOFLVvtM54h1fW', + number: 2272, + title: 'Film titles with numbers only in the title (as in "1900" or "1917") don\'t show up', + user: { + login: 'GlamoramaAttack', + id: 116585465, + node_id: 'U_kgDOBvLz-Q', + avatar_url: 'https://avatars.githubusercontent.com/u/116585465?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/GlamoramaAttack', + html_url: 'https://github.com/GlamoramaAttack', + followers_url: 'https://api.github.com/users/GlamoramaAttack/followers', + following_url: 'https://api.github.com/users/GlamoramaAttack/following{/other_user}', + gists_url: 'https://api.github.com/users/GlamoramaAttack/gists{/gist_id}', + starred_url: 'https://api.github.com/users/GlamoramaAttack/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/GlamoramaAttack/subscriptions', + organizations_url: 'https://api.github.com/users/GlamoramaAttack/orgs', + repos_url: 'https://api.github.com/users/GlamoramaAttack/repos', + events_url: 'https://api.github.com/users/GlamoramaAttack/events{/privacy}', + received_events_url: 'https://api.github.com/users/GlamoramaAttack/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-12-02T17:29:50Z', + updated_at: '2024-12-27T05:02:05Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\ntvpassport.com\r\n\r\n### Describe your issue\r\n\r\nFilm titles with numbers only in the title -as in "1900" or "1917"- don\'t show up at all.\r\n\r\nSorry, I don\'t understand anything about how to write a script or fix it but I see there is notable difference in the **guide.xml** file - the examples are excerpts from tvpassport.com. This isn\'t a new bug I think, it\'s just that I thought for a long time it\'s a Kodi problem before looking into the guide.xml file...\r\n\r\n```\r\nchannel="Showtime2East.us">The Caine Mutiny Court-MartialA \r\nchannel="Showtime2East.us">Two British soldiers receive seemingly impossible orders \r\nchannel="Showtime2East.us">There Will Be BloodDaniel \r\n```\r\nor:\r\n\r\n```\r\nchannel="MGMPlusEast.us">A Fistful of DynamiteA thief \r\nchannel="MGMPlusEast.us">The son (Robert De Niro) of a landowner and the son \r\nchannel="MGMPlusEast.us">Indecent ProposalA Las Vegas \r\n```\r\n\r\nFor some reason "title lang" gets replaced by "desc lang" and the film title is nowhere displayed.\r\n\r\nOn Kodi it looks like this for the films and you can also see it\'s not a problem if the film title includes more than numbers (see "88 Minutes" or "Resistance: 1942"). But titles as "1900", "1917" or "1408" (Horror with John Cusack) appear blank.\r\n\r\n![NoTitleWithNumbers](https://github.com/iptv-org/epg/assets/116585465/155f98f8-8529-4c42-af3c-def1edcf5651)\r\n\r\nI\'m not sure whether the problem also exists with other sources than tvpassport.com because I use only two other (German language) EPG sources that have currently no film titles with numbers only. But I assume it\'s a bug if it\'s not reduced to tvpassport.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/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/epg/issues/2272/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2176', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/events', + html_url: 'https://github.com/iptv-org/epg/issues/2176', + id: 1915947653, + node_id: 'I_kwDOFLVvtM5yMwqF', + number: 2176, + title: 'tvtv', + user: { + login: 'jvdillon', + id: 1137078, + node_id: 'MDQ6VXNlcjExMzcwNzg=', + avatar_url: 'https://avatars.githubusercontent.com/u/1137078?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/jvdillon', + html_url: 'https://github.com/jvdillon', + followers_url: 'https://api.github.com/users/jvdillon/followers', + following_url: 'https://api.github.com/users/jvdillon/following{/other_user}', + gists_url: 'https://api.github.com/users/jvdillon/gists{/gist_id}', + starred_url: 'https://api.github.com/users/jvdillon/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/jvdillon/subscriptions', + organizations_url: 'https://api.github.com/users/jvdillon/orgs', + repos_url: 'https://api.github.com/users/jvdillon/repos', + events_url: 'https://api.github.com/users/jvdillon/events{/privacy}', + received_events_url: 'https://api.github.com/users/jvdillon/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 6, + created_at: '2023-09-27T16:34:00Z', + updated_at: '2024-12-27T04:55:00Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\ntvtv.us\r\n\r\n### Description\r\n\r\nStarts getting error 429 after several 100 scrapes. I tried setting the delay to 1000ms, 1500ms, and 2000ms but keep seeing the issue.\r\n\r\nIt almost appears to happen after a sequence of 0 program scrapes. I wonder if the delay is not happening when nothing is downloaded which causes tvtv.us to throttle which triggers 0 programs downloaded. (Ie a feedback loop)', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/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/epg/issues/2176/timeline', + performed_via_github_app: null, + state_reason: null + } +] diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index e38414d3..31f49cd2 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -1,36 +1,36 @@ -import { execSync } from 'child_process' -import fs from 'fs-extra' -import path from 'path' - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/output/.sites') - fs.copyFileSync( - 'tests/__data__/input/.sites/config.json', - 'tests/__data__/output/.sites/config.json' - ) - fs.copyFileSync( - 'tests/__data__/input/.sites/template.md', - 'tests/__data__/output/.sites/template.md' - ) -}) - -it('can update SITES.md', () => { - const stdout = execSync('DOT_SITES_DIR=tests/__data__/output/.sites npm run sites:update', { - encoding: 'utf8' - }) - - expect(content('tests/__data__/output/sites.md')).toEqual( - content('tests/__data__/expected/_sites.md') - ) - - expect(true).toBe(true) -}) - -function content(filepath: string) { - const data = fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) - - return JSON.stringify(data) -} +import { execSync } from 'child_process' +import fs from 'fs-extra' +import path from 'path' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.mkdirSync('tests/__data__/output/.sites') + fs.copyFileSync( + 'tests/__data__/input/.sites/config.json', + 'tests/__data__/output/.sites/config.json' + ) + fs.copyFileSync( + 'tests/__data__/input/.sites/template.md', + 'tests/__data__/output/.sites/template.md' + ) +}) + +it('can update SITES.md', () => { + execSync('DOT_SITES_DIR=tests/__data__/output/.sites npm run sites:update', { + encoding: 'utf8' + }) + + expect(content('tests/__data__/output/sites.md')).toEqual( + content('tests/__data__/expected/_sites.md') + ) + + expect(true).toBe(true) +}) + +function content(filepath: string) { + const data = fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) + + return JSON.stringify(data) +} From 1aeaf49dc2cdd4ec25b73da0c1073df1b6ff77e7 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:24:04 +0300 Subject: [PATCH 18/64] Update broken_guide_down.js --- tests/__data__/input/issues/broken_guide_down.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/__data__/input/issues/broken_guide_down.js b/tests/__data__/input/issues/broken_guide_down.js index 99872ab5..9f069689 100644 --- a/tests/__data__/input/issues/broken_guide_down.js +++ b/tests/__data__/input/issues/broken_guide_down.js @@ -1,4 +1,4 @@ -module.exports = [ +export default [ { url: 'https://api.github.com/repos/iptv-org/epg/issues/2547', repository_url: 'https://api.github.com/repos/iptv-org/epg', From 7322f9eb616bd5a4db83077620bf8f969ca91949 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:24:07 +0300 Subject: [PATCH 19/64] Update broken_guide_warning.js --- tests/__data__/input/issues/broken_guide_warning.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/__data__/input/issues/broken_guide_warning.js b/tests/__data__/input/issues/broken_guide_warning.js index 6680da90..d8828b90 100644 --- a/tests/__data__/input/issues/broken_guide_warning.js +++ b/tests/__data__/input/issues/broken_guide_warning.js @@ -1,4 +1,4 @@ -module.exports = [ +export default [ { url: 'https://api.github.com/repos/iptv-org/epg/issues/2543', repository_url: 'https://api.github.com/repos/iptv-org/epg', From a5b8fa12ae1409021e50f11c19ee5aac136d08f5 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:40:47 +0300 Subject: [PATCH 20/64] Update tests/__data__ --- tests/__data__/expected/_sites.md | 197 ------------------ .../sites-update/sites/iltalehti.fi/readme.md | 1 + .../sites/indihometv.com/readme.md | 1 + .../sites-update/sites/kan.org.il/readme.md | 1 + 4 files changed, 3 insertions(+), 197 deletions(-) create mode 100644 tests/__data__/input/sites-update/sites/iltalehti.fi/readme.md create mode 100644 tests/__data__/input/sites-update/sites/indihometv.com/readme.md create mode 100644 tests/__data__/input/sites-update/sites/kan.org.il/readme.md diff --git a/tests/__data__/expected/_sites.md b/tests/__data__/expected/_sites.md index ede49778..efdb8b33 100644 --- a/tests/__data__/expected/_sites.md +++ b/tests/__data__/expected/_sites.md @@ -6,205 +6,8 @@ SiteStatusNotes - 9tv.co.il🟢 - abc.net.au🟢 - allente.dk🟢 - allente.fi🟢 - allente.no🟢 - allente.se🟢 - andorradifusio.ad🟢 - anteltv.com.uy🟢 - arianaafgtv.com🟢 - arianatelevision.com🟢 - arirang.com🟢 - artonline.tv🟢 - awilime.com🟢 - bein.com🟢 - beinsports.com🟢 - berrymedia.co.kr🟢 - cablego.com.pe🟢 - cableplus.com.uy🟢 - canalplus-haiti.com🔴https://github.com/iptv-org/epg/issues/2237 - canalplus.com🟢 - cgates.lt🟢 - chada.ma🟢 - chaines-tv.orange.fr🟡https://github.com/iptv-org/epg/issues/2395 - clickthecity.com🟢 - comteco.com.bo🔴https://github.com/iptv-org/epg/issues/2239 - content.astro.com.my🟢 - cosmote.gr🟢 - cubmu.com🟢 - dens.tv🟢 - digiturk.com.tr🔴https://github.com/iptv-org/epg/issues/2304, https://github.com/iptv-org/epg/issues/2547 - directv.com🔴https://github.com/iptv-org/epg/issues/2284 - directv.com.ar🔴https://github.com/iptv-org/epg/issues/2339 - directv.com.uy🟢 - dishtv.in🔴https://github.com/iptv-org/epg/issues/2445 - dsmart.com.tr🟢 - dstv.com🟢 - elcinema.com🔴https://github.com/iptv-org/epg/issues/2541 - ena.skylifetv.co.kr🟢 - energeek.cl🟢 - entertainment.ie🟢 - firstmedia.com🟢 - flixed.io🟢 - foxsports.com.au🟢 - foxtel.com.au🟢 - frikanalen.no🟢 - gatotv.com🟢 - getafteritmedia.com🟢 - guida.tv🟢 - guidatv.sky.it🟢 - hd-plus.de🔴https://github.com/iptv-org/epg/issues/2173 - horizon.tv🟢 - hoy.tv🟢 - i.mjh.nz🟢 - i24news.tv🟢 iltalehti.fi🟡https://github.com/iptv-org/epg/issues/2396 indihometv.com🟢 - ionplustv.com🟢 - ipko.tv🟢 kan.org.il🔴https://github.com/iptv-org/epg/issues/2273 - knr.gl🟢 - kplus.vn🔴https://github.com/iptv-org/epg/issues/2240 - kvf.fo🟢 - m.tv.sms.cz🔴https://github.com/iptv-org/epg/issues/2241 - m.tving.com🟢 - magticom.ge🟢 - mako.co.il🟢 - maxtv.hrvatskitelekom.hr🔴https://github.com/iptv-org/epg/issues/2509 - maxtvgo.mk🟢 - mediagenie.co.kr🟢 - mediaklikk.hu🟢 - mediasetinfinity.mediaset.it🟢 - melita.com🟢 - meo.pt🟡https://github.com/iptv-org/epg/issues/2446 - meuguia.tv🟢 - mewatch.sg🟢 - mi.tv🟢 - mncvision.id🟢 - moji.id🟢 - mon-programme-tv.be🟢 - movistarplus.es🔴https://github.com/iptv-org/epg/issues/2498 - mtel.ba🟢 - mts.rs🟢 - mujtvprogram.cz🟢 - musor.tv🟢 - mysky.com.ph🟢 - mytelly.co.uk🟢 - mytvsuper.com🟢 - neo.io🟢 - nhkworldpremium.com🟢 - nhl.com🟢 - nostv.pt🟢 - novacyprus.com🟢 - novasports.gr🟢 - nowplayer.now.com🟢 - nuevosiglo.com.uy🟢 - nzxmltv.com🟢 - ontvtonight.com🟢 - osn.com🟢 - pbsguam.org🟢 - pickx.be🟢 - player.ee.co.uk🟢 - playtv.unifi.com.my🟢 - plex.tv🟢 - programacion-tv.elpais.com🟢 - programacion.tcc.com.uy🟢 - programetv.ro🟢 - programme-tv.net🟢 - programme-tv.vini.pf🟢 - programme.tvb.com🟢 - programtv.onet.pl🟢 - raiplay.it🟢 - reportv.com.ar🟢 - rev.bs🔴https://github.com/iptv-org/epg/issues/2255 - rotana.net🟢 - rtb.gov.bn🔴https://github.com/iptv-org/epg/issues/2257 - rthk.hk🟢 - rtmklik.rtm.gov.my🟢 - rtp.pt🟢 - ruv.is🟢 - s.mxtv.jp🟢 - sat.tv🟢 - shahid.mbc.net🟢 - siba.com.co🟢 - singtel.com🟢 - sjonvarp.is🟢 - sky.co.nz🟢 - sky.com🟡https://github.com/iptv-org/epg/issues/2516, https://github.com/iptv-org/epg/issues/2501 - sky.de🟢 - skylife.co.kr🟢 - skyperfectv.co.jp🟢 - snrt.ma🟢 - sporttv.pt🟢 - starhubtvplus.com🟢 - startimestv.com🟢 - streamingtvguides.com🟢 - superguidatv.it🟢 - taiwanplus.com🟢 - tapdmv.com🟢 - telenet.tv🟢 - teliatv.ee🟢 - telkussa.fi🟢 - telsu.fi🟢 - tivu.tv🟢 - toonamiaftermath.com🟢 - turksatkablo.com.tr🟢 - tv-programme.telecablesat.fr🟢 - tv.blue.ch🟢 - tv.cctv.com🟢 - tv.dir.bg🟢 - tv.lv🟢 - tv.magenta.at🟢 - tv.mail.ru🟢 - tv.movistar.com.pe🟢 - tv.nu🟢 - tv.post.lu🟢 - tv.trueid.net🟢 - tv.yandex.ru🟢 - tv.yettel.hu🔴https://github.com/iptv-org/epg/issues/2263 - tv24.co.uk🟢 - tv24.se🟢 - tv2go.t-2.net🟢 - tva.tv🔴https://github.com/iptv-org/epg/issues/2264 - tvarenasport.com🟢 - tvarenasport.hr🟢 - tvcesoir.fr🟢 - tvcubana.icrt.cu🟢 - tvgids.nl🟡https://github.com/iptv-org/epg/issues/2400 - tvguide.com🔴https://github.com/iptv-org/epg/issues/2542 - tvguide.myjcom.jp🟢 - tvhebdo.com🟢 - tvheute.at🟢 - tvim.tv🟢 - tvireland.ie🟢 - tvmi.mt🟢 - tvmusor.hu🟢 - tvpassport.com🟡https://github.com/iptv-org/epg/issues/2272 - tvplus.com.tr🟢 - tvprofil.com🟡https://github.com/iptv-org/epg/issues/2399 - tvtv.us🟡https://github.com/iptv-org/epg/issues/2176 - v3.myafn.dodmedia.osd.mil🟢 - vidio.com🟢 - virginmediatelevision.ie🟢 - virgintvgo.virginmedia.com🟢 - visionplus.id🟢 - vivacom.bg🔴https://github.com/iptv-org/epg/issues/2270 - vtm.be🟢 - walesi.com.fj🟢 - watch.sportsnet.ca🟢 - watchyour.tv🟢 - wavve.com🟢 - web.magentatv.de🟢 - webtv.delta.nl🟢 - winplay.co🟢 - worldfishingnetwork.com🟢 - www3.nhk.or.jp🟢 - xumo.tv🟢 - zap.co.ao🟢 - ziggogo.tv🟢 - znbc.co.zm🟢 - zuragt.mn🟢 diff --git a/tests/__data__/input/sites-update/sites/iltalehti.fi/readme.md b/tests/__data__/input/sites-update/sites/iltalehti.fi/readme.md new file mode 100644 index 00000000..144ed147 --- /dev/null +++ b/tests/__data__/input/sites-update/sites/iltalehti.fi/readme.md @@ -0,0 +1 @@ +# litalehti.fi diff --git a/tests/__data__/input/sites-update/sites/indihometv.com/readme.md b/tests/__data__/input/sites-update/sites/indihometv.com/readme.md new file mode 100644 index 00000000..83b8c5c1 --- /dev/null +++ b/tests/__data__/input/sites-update/sites/indihometv.com/readme.md @@ -0,0 +1 @@ +# indihometv.com diff --git a/tests/__data__/input/sites-update/sites/kan.org.il/readme.md b/tests/__data__/input/sites-update/sites/kan.org.il/readme.md new file mode 100644 index 00000000..8c5b49ea --- /dev/null +++ b/tests/__data__/input/sites-update/sites/kan.org.il/readme.md @@ -0,0 +1 @@ +# kan.org.il From a37973f10e79499951f6414299655edcfa91a8bc Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:41:03 +0300 Subject: [PATCH 21/64] Update update.test.ts --- tests/commands/sites/update.test.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index e38414d3..40e18b77 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -16,9 +16,12 @@ beforeEach(() => { }) it('can update SITES.md', () => { - const stdout = execSync('DOT_SITES_DIR=tests/__data__/output/.sites npm run sites:update', { - encoding: 'utf8' - }) + execSync( + 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites npm run sites:update', + { + encoding: 'utf8' + } + ) expect(content('tests/__data__/output/sites.md')).toEqual( content('tests/__data__/expected/_sites.md') From 3db2e6a950424b8b80268bd7bb6fe0d17448651f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:48:16 +0300 Subject: [PATCH 22/64] Update update.test.ts --- tests/commands/sites/update.test.ts | 78 ++++++++++++++--------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index 40e18b77..2ecbea5e 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -1,39 +1,39 @@ -import { execSync } from 'child_process' -import fs from 'fs-extra' -import path from 'path' - -beforeEach(() => { - fs.emptyDirSync('tests/__data__/output') - fs.mkdirSync('tests/__data__/output/.sites') - fs.copyFileSync( - 'tests/__data__/input/.sites/config.json', - 'tests/__data__/output/.sites/config.json' - ) - fs.copyFileSync( - 'tests/__data__/input/.sites/template.md', - 'tests/__data__/output/.sites/template.md' - ) -}) - -it('can update SITES.md', () => { - execSync( - 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites npm run sites:update', - { - encoding: 'utf8' - } - ) - - expect(content('tests/__data__/output/sites.md')).toEqual( - content('tests/__data__/expected/_sites.md') - ) - - expect(true).toBe(true) -}) - -function content(filepath: string) { - const data = fs.readFileSync(path.resolve(filepath), { - encoding: 'utf8' - }) - - return JSON.stringify(data) -} +import { execSync } from 'child_process' +import fs from 'fs-extra' +import path from 'path' + +beforeEach(() => { + fs.emptyDirSync('tests/__data__/output') + fs.mkdirSync('tests/__data__/output/.sites') + fs.copyFileSync( + 'tests/__data__/input/.sites/config.json', + 'tests/__data__/output/.sites/config.json' + ) + fs.copyFileSync( + 'tests/__data__/input/.sites/template.md', + 'tests/__data__/output/.sites/template.md' + ) +}) + +it('can update SITES.md', () => { + execSync( + 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites npm run sites:update', + { + encoding: 'utf8' + } + ) + + expect(content('tests/__data__/output/sites.md')).toEqual( + content('tests/__data__/expected/_sites.md') + ) + + expect(true).toBe(true) +}) + +function content(filepath: string) { + const data = fs.readFileSync(path.resolve(filepath), { + encoding: 'utf8' + }) + + return JSON.stringify(data) +} From 7840829424d333710a1bdf7aefbbe0f19d34fa49 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:53:08 +0300 Subject: [PATCH 23/64] Delete broken_guide_down.js --- .../input/issues/broken_guide_down.js | 1551 ----------------- 1 file changed, 1551 deletions(-) delete mode 100644 tests/__data__/input/issues/broken_guide_down.js diff --git a/tests/__data__/input/issues/broken_guide_down.js b/tests/__data__/input/issues/broken_guide_down.js deleted file mode 100644 index 9f069689..00000000 --- a/tests/__data__/input/issues/broken_guide_down.js +++ /dev/null @@ -1,1551 +0,0 @@ -export default [ - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2547', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/events', - html_url: 'https://github.com/iptv-org/epg/issues/2547', - id: 2760418979, - node_id: 'I_kwDOFLVvtM6kiKaj', - number: 2547, - title: 'digiturk.com.tr', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-12-27T05:33:47Z', - updated_at: '2024-12-28T20:37:53Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ndigiturk.com.tr\n\n### Description\n\n```sh\r\nnpm run grab --- --site=digiturk.com.tr\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=digiturk.com.tr\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: digiturk.com.tr\r\nloading channels...\r\n found 139 channel(s)\r\nrun #1:\r\n [1/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/278] digiturk.com.tr (tr) - Yaban.tr - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/reactions', - total_count: 1, - '+1': 1, - '-1': 0, - laugh: 0, - hooray: 0, - confused: 0, - heart: 0, - rocket: 0, - eyes: 0 - }, - timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2542', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/events', - html_url: 'https://github.com/iptv-org/epg/issues/2542', - id: 2759639980, - node_id: 'I_kwDOFLVvtM6kfMOs', - number: 2542, - title: 'tvguide.com not working', - user: { - login: 'SiWafer', - id: 10903014, - node_id: 'MDQ6VXNlcjEwOTAzMDE0', - avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/SiWafer', - html_url: 'https://github.com/SiWafer', - followers_url: 'https://api.github.com/users/SiWafer/followers', - following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', - gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', - starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', - organizations_url: 'https://api.github.com/users/SiWafer/orgs', - repos_url: 'https://api.github.com/users/SiWafer/repos', - events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', - received_events_url: 'https://api.github.com/users/SiWafer/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-26T11:11:24Z', - updated_at: '2024-12-27T05:28:55Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\ntvguide.com\n\n### Description\n\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=tvguide.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tvguide.com\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tvguide.com\r\nloading channels...\r\n found 39 channel(s)\r\nrun #1:\r\n [1/78] tvguide.com (en) - AEEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/78] tvguide.com (en) - AEEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/78] tvguide.com (en) - AMCEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/78] tvguide.com (en) - AMCEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [5/78] tvguide.com (en) - BravoEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [6/78] tvguide.com (en) - BravoEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [7/78] tvguide.com (en) - BBCAmericaEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [8/78] tvguide.com (en) - CNBC.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [9/78] tvguide.com (en) - CNBC.us - Dec 26, 2024 (0 programs)\r\n...\r\n...\r\n...\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/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/epg/issues/2542/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2541', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/events', - html_url: 'https://github.com/iptv-org/epg/issues/2541', - id: 2758749907, - node_id: 'I_kwDOFLVvtM6kby7T', - number: 2541, - title: 'elcinema.com grab error 403', - user: { - login: 'xercessss', - id: 189765257, - node_id: 'U_kgDOC0-WiQ', - avatar_url: 'https://avatars.githubusercontent.com/u/189765257?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/xercessss', - html_url: 'https://github.com/xercessss', - followers_url: 'https://api.github.com/users/xercessss/followers', - following_url: 'https://api.github.com/users/xercessss/following{/other_user}', - gists_url: 'https://api.github.com/users/xercessss/gists{/gist_id}', - starred_url: 'https://api.github.com/users/xercessss/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/xercessss/subscriptions', - organizations_url: 'https://api.github.com/users/xercessss/orgs', - repos_url: 'https://api.github.com/users/xercessss/repos', - events_url: 'https://api.github.com/users/xercessss/events{/privacy}', - received_events_url: 'https://api.github.com/users/xercessss/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-25T11:34:16Z', - updated_at: '2024-12-27T05:28:07Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nelcinema.com\n\n### Description\n\ngrabbing elcinema.com epg return error 403 for both ar and en language:\r\nERR: Request failed with status code 403\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/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/epg/issues/2541/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2509', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/events', - html_url: 'https://github.com/iptv-org/epg/issues/2509', - id: 2740938968, - node_id: 'I_kwDOFLVvtM6jX2jY', - number: 2509, - title: 'ssl problem maxtv.hrvatskitelekom.hr', - user: { - login: 'uploadkom', - id: 130712472, - node_id: 'U_kgDOB8qDmA', - avatar_url: 'https://avatars.githubusercontent.com/u/130712472?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/uploadkom', - html_url: 'https://github.com/uploadkom', - followers_url: 'https://api.github.com/users/uploadkom/followers', - following_url: 'https://api.github.com/users/uploadkom/following{/other_user}', - gists_url: 'https://api.github.com/users/uploadkom/gists{/gist_id}', - starred_url: 'https://api.github.com/users/uploadkom/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/uploadkom/subscriptions', - organizations_url: 'https://api.github.com/users/uploadkom/orgs', - repos_url: 'https://api.github.com/users/uploadkom/repos', - events_url: 'https://api.github.com/users/uploadkom/events{/privacy}', - received_events_url: 'https://api.github.com/users/uploadkom/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 3, - created_at: '2024-12-15T22:21:22Z', - updated_at: '2024-12-27T05:26:26Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nmaxtv.hrvatskitelekom.hr\n\n### Description\n\nssl problem', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/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/epg/issues/2509/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2498', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/events', - html_url: 'https://github.com/iptv-org/epg/issues/2498', - id: 2728188494, - node_id: 'I_kwDOFLVvtM6inNpO', - number: 2498, - title: 'movistarplus.es', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-09T20:26:07Z', - updated_at: '2024-12-27T05:23:48Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nmovistarplus.es\n\n### Description\n\n```sh\r\nnpm run grab -- --site=movistarplus.es\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=movistarplus.es\r\n\r\n(node:22362) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:\r\n--import \'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("file%3A///Users/Arhey/Code/iptv-org/epg/node_modules/tsx/dist/loader.mjs", pathToFileURL("./"));\'\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\n(node:22362) UnsupportedWarning: `globalPreload` has been removed; use `initialize` instead.\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: movistarplus.es\r\nloading channels...\r\n(node:22362) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.\r\n found 186 channel(s)\r\nrun #1:\r\n [1/372] movistarplus.es (es) - ANTV - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/372] movistarplus.es (es) - ANTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/372] movistarplus.es (es) - ARAGTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/372] movistarplus.es (es) - CANSUR - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/372] movistarplus.es (es) - DAZNL2 - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/372] movistarplus.es (es) - MLIGS - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [7/372] movistarplus.es (es) - AMC.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [8/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [9/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [10/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [11/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [12/372] movistarplus.es (es) - LaResistencia.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [13/372] movistarplus.es (es) - LaResistencia.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/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/epg/issues/2498/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2445', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/events', - html_url: 'https://github.com/iptv-org/epg/issues/2445', - id: 2567652015, - node_id: 'I_kwDOFLVvtM6ZC0Kv', - number: 2445, - title: 'EPG from dishtv.in stopped with error code 404', - user: { - login: 'dheer99', - id: 20639130, - node_id: 'MDQ6VXNlcjIwNjM5MTMw', - avatar_url: 'https://avatars.githubusercontent.com/u/20639130?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/dheer99', - html_url: 'https://github.com/dheer99', - followers_url: 'https://api.github.com/users/dheer99/followers', - following_url: 'https://api.github.com/users/dheer99/following{/other_user}', - gists_url: 'https://api.github.com/users/dheer99/gists{/gist_id}', - starred_url: 'https://api.github.com/users/dheer99/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/dheer99/subscriptions', - organizations_url: 'https://api.github.com/users/dheer99/orgs', - repos_url: 'https://api.github.com/users/dheer99/repos', - events_url: 'https://api.github.com/users/dheer99/events{/privacy}', - received_events_url: 'https://api.github.com/users/dheer99/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-10-05T04:30:52Z', - updated_at: '2024-12-27T05:20:11Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\ndishtv.in\n\n### Description\n\nEPG from dishtv.in stopped with error code 404\r\n\r\n [91/98] dishtv.in (en) - StarPlus.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [92/98] dishtv.in (en) - SET.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [93/98] dishtv.in (en) - ZeeCinema.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [94/98] dishtv.in (en) - SonySportsTen5.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [95/98] dishtv.in (en) - StarSports1.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [96/98] dishtv.in (en) - SET.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [97/98] dishtv.in (en) - SonySportsTen3.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [98/98] dishtv.in (en) - Colors.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 03s\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/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/epg/issues/2445/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2339', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/events', - html_url: 'https://github.com/iptv-org/epg/issues/2339', - id: 2172864415, - node_id: 'I_kwDOFLVvtM6Bg0ef', - number: 2339, - title: - 'directv.com.ar and directv.com.uy not working ERR: Unexpected token \'<\', " grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kan.org.il --output=kan.org.il.xml\r\n\r\nstarting...\r\nconfig:\r\n output: kan.org.il.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kan.org.il\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] kan.org.il (ar) - Makan33.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/6] kan.org.il (ar) - Makan33.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/6] kan.org.il (he) - KanEducational.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/6] kan.org.il (he) - KanEducational.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/6] kan.org.il (he) - Kan11.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/6] kan.org.il (he) - Kan11.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 01s\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2273/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/epg/issues/2273/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2270', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/events', - html_url: 'https://github.com/iptv-org/epg/issues/2270', - id: 2022018570, - node_id: 'I_kwDOFLVvtM54hY4K', - number: 2270, - title: 'vivacom.bg is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-12-02T12:16:22Z', - updated_at: '2024-12-27T05:00:36Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nvivacom.bg\n\n### Description\n\n```sh\r\nnpm run grab -- --site=vivacom.bg\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=vivacom.bg\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: vivacom.bg\r\nloading channels...\r\n found 154 channel(s)\r\nrun #1:\r\n [1/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 2, 2023 (0 programs)\r\n [2/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 3, 2023 (0 programs)\r\n [3/308] vivacom.bg (bg) - 78TV.bg - Dec 3, 2023 (0 programs)\r\n [4/308] vivacom.bg (bg) - AlfaTV.bg - Dec 3, 2023 (0 programs)\r\n [5/308] vivacom.bg (bg) - AXNEurope.gr - Dec 3, 2023 (0 programs)\r\n [6/308] vivacom.bg (bg) - BNT3.bg - Dec 3, 2023 (0 programs)\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/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/epg/issues/2270/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2264', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/events', - html_url: 'https://github.com/iptv-org/epg/issues/2264', - id: 2019407629, - node_id: 'I_kwDOFLVvtM54XbcN', - number: 2264, - title: 'tva.tv is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-30T20:00:18Z', - updated_at: '2024-12-27T05:00:24Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ntva.tv\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tva.tv\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tva.tv\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tva.tv\r\nloading channels...\r\n found 28 channel(s)\r\nrun #1:\r\n [1/56] tva.tv (fa) - DocTV.ir - Nov 30, 2023 (0 programs)\r\n ERR: Connection timeout\r\n [2/56] tva.tv (fa) - DocTV.ir - Dec 1, 2023 (0 programs)\r\n ERR: Connection timeout\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/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/epg/issues/2264/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2263', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/events', - html_url: 'https://github.com/iptv-org/epg/issues/2263', - id: 2019376043, - node_id: 'I_kwDOFLVvtM54XTur', - number: 2263, - title: 'tv.yettel.hu is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-30T19:38:28Z', - updated_at: '2024-12-27T04:59:14Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ntv.yettel.hu\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tv.yettel.hu\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tv.yettel.hu\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tv.yettel.hu\r\nloading channels...\r\n found 74 channel(s)\r\nrun #1:\r\n [1/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Nov 30, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n [2/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Dec 1, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/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/epg/issues/2263/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2257', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/events', - html_url: 'https://github.com/iptv-org/epg/issues/2257', - id: 2011054011, - node_id: 'I_kwDOFLVvtM533j-7', - number: 2257, - title: 'rtb.gov.bn is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-26T14:02:13Z', - updated_at: '2024-12-27T04:59:29Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nrtb.gov.bn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rtb.gov.bn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rtb.gov.bn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rtb.gov.bn\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 26, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [2/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [3/6] rtb.gov.bn (ms) - RTBPerdana.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n```\r\n\r\nThere is no link to the guide on the website at the moment either: https://www.rtb.gov.bn/SitePages/Programme%20Guide.aspx', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/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/epg/issues/2257/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2255', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/events', - html_url: 'https://github.com/iptv-org/epg/issues/2255', - id: 2011043202, - node_id: 'I_kwDOFLVvtM533hWC', - number: 2255, - title: 'rev.bs is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2023-11-26T13:31:22Z', - updated_at: '2024-12-27T22:02:28Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nrev.bs\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rev.bs\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rev.bs\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rev.bs\r\nloading channels...\r\n found 179 channel(s)\r\nrun #1:\r\n [1/358] rev.bs (en) - 3ABNEnglish.us - Nov 26, 2023 (0 programs)\r\n [2/358] rev.bs (en) - 3ABNEnglish.us - Nov 27, 2023 (0 programs)\r\n [3/358] rev.bs (en) - AEEast.us - Nov 27, 2023 (0 programs)\r\n [4/358] rev.bs (en) - AMCEast.us - Nov 27, 2023 (0 programs)\r\n```\r\n---\r\n\r\n```json\r\n{\r\n\t"status": "OK",\r\n\t"data": {\r\n\t\t"schedule": [],\r\n\t\t"dateTime": {\r\n\t\t\t"date": "2023-11-27",\r\n\t\t\t"page": 0\r\n\t\t},\r\n\t\t"runtimes": [\r\n\t\t\t{\r\n\t\t\t\t"Rev class loaded": 1700899490.604637\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"TVGuide Class Loaded": 1700899490.638891\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Validated form": 1700899490.640116\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Pulled schedules": 1700899490.642099\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n}\r\n```\r\n\r\nhttps://www.rev.bs/wp-content/uploads/tv-guide/2023-11-27_0.json\r\n\r\n---\r\n\r\nimage\r\n\r\nhttps://www.rev.bs/tv-guide-404/', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/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/epg/issues/2255/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2241', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/events', - html_url: 'https://github.com/iptv-org/epg/issues/2241', - id: 2002096969, - node_id: 'I_kwDOFLVvtM53VZNJ', - number: 2241, - title: 'm.tv.sms.cz is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 4, - created_at: '2023-11-20T12:28:47Z', - updated_at: '2024-12-27T04:58:41Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nm.tv.sms.cz\n\n### Description\n\n```sh\r\nnpm run grab -- --site=m.tv.sms.cz\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=m.tv.sms.cz\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: m.tv.sms.cz\r\nloading channels...\r\n found 525 channel(s)\r\nrun #1:\r\n [1/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 20, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [2/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [3/1050] m.tv.sms.cz (cs) - AMC.cz - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n```\r\n\r\nhttps://check-host.net/check-report/135d7e05kb9d', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/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/epg/issues/2241/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2240', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/events', - html_url: 'https://github.com/iptv-org/epg/issues/2240', - id: 2001847449, - node_id: 'I_kwDOFLVvtM53UcSZ', - number: 2240, - title: 'kplus.vn is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-20T10:19:23Z', - updated_at: '2024-12-27T04:57:49Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\nkplus.vn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=kplus.vn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kplus.vn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kplus.vn\r\nloading channels...\r\n found 26 channel(s)\r\nrun #1:\r\n [1/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 20, 2023 (0 programs)\r\n [2/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 21, 2023 (0 programs)\r\n [3/52] kplus.vn (vi) - AXN.vn - Nov 21, 2023 (0 programs)\r\n [4/52] kplus.vn (vi) - DiscoveryChannelSoutheastAsia.sg - Nov 21, 2023 (0 programs)\r\n```\r\n\r\nThe site also currently does not display the guide:\r\nimage\r\nhttps://www.kplus.vn/highlights/broadcast-schedule', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/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/epg/issues/2240/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2239', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/events', - html_url: 'https://github.com/iptv-org/epg/issues/2239', - id: 2000457187, - node_id: 'I_kwDOFLVvtM53PI3j', - number: 2239, - title: 'comteco.com.bo is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 3, - created_at: '2023-11-18T15:03:48Z', - updated_at: '2024-12-27T21:25:41Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ncomteco.com.bo\n\n### Description\n\n```sh\r\nnpm run grab -- --site=comteco.com.bo\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=comteco.com.bo\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: comteco.com.bo\r\nloading channels...\r\n found 72 channel(s)\r\nrun #1:\r\n [1/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 18, 2023 (0 programs)\r\n [2/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 19, 2023 (0 programs)\r\n [3/144] comteco.com.bo (es) - AEPanregional.us - Nov 19, 2023 (0 programs)\r\n [4/144] comteco.com.bo (es) - AnimalPlanetLatinAmerica.us - Nov 19, 2023 (0 programs)\r\n [5/144] comteco.com.bo (es) - BoliviaTV72.bo - Nov 19, 2023 (0 programs)\r\n```\r\n\r\nhttps://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/ABYA%20YALA\r\nimage', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/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/epg/issues/2239/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2237', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/events', - html_url: 'https://github.com/iptv-org/epg/issues/2237', - id: 2000349577, - node_id: 'I_kwDOFLVvtM53OumJ', - number: 2237, - title: 'canalplus-haiti.com is broken', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2023-11-18T09:46:29Z', - updated_at: '2024-12-27T04:57:02Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ncanalplus-haiti.com\n\n### Description\n\n```sh\r\nnpm run grab -- --site=canalplus-haiti.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=canalplus-haiti.com\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: canalplus-haiti.com\r\nloading channels...\r\n found 111 channel(s)\r\nrun #1:\r\n [1/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n```\r\n\r\nhttps://check-host.net/check-report/134fc56bk333', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/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/epg/issues/2237/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2173', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/events', - html_url: 'https://github.com/iptv-org/epg/issues/2173', - id: 1903824500, - node_id: 'I_kwDOFLVvtM5xeg50', - number: 2173, - title: 'hd-plus.de - 0 programs on all channels', - user: { - login: 'x011', - id: 4313821, - node_id: 'MDQ6VXNlcjQzMTM4MjE=', - avatar_url: 'https://avatars.githubusercontent.com/u/4313821?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/x011', - html_url: 'https://github.com/x011', - followers_url: 'https://api.github.com/users/x011/followers', - following_url: 'https://api.github.com/users/x011/following{/other_user}', - gists_url: 'https://api.github.com/users/x011/gists{/gist_id}', - starred_url: 'https://api.github.com/users/x011/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/x011/subscriptions', - organizations_url: 'https://api.github.com/users/x011/orgs', - repos_url: 'https://api.github.com/users/x011/repos', - events_url: 'https://api.github.com/users/x011/events{/privacy}', - received_events_url: 'https://api.github.com/users/x011/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710795, - node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', - name: 'status:down', - color: 'df3a4a', - default: false, - description: "The guide doesn't work" - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2023-09-19T22:45:56Z', - updated_at: '2024-12-27T04:54:11Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\nhd-plus.de\r\n\r\n### Description\r\n\r\nAll channels on hd-plus.de have 0 programs:\r\n```\r\n[1/60] hd-plus.de - 123tv.de - Sep 19, 2023 (0 programs)\r\n[2/60] hd-plus.de - 123tv.de - Sep 20, 2023 (0 programs)\r\n[3/60] hd-plus.de - ZDF.de - Sep 20, 2023 (0 programs)\r\n[4/60] hd-plus.de - ZDF.de - Sep 19, 2023 (0 programs)\r\n...\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/reactions', - total_count: 6, - '+1': 6, - '-1': 0, - laugh: 0, - hooray: 0, - confused: 0, - heart: 0, - rocket: 0, - eyes: 0 - }, - timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/timeline', - performed_via_github_app: null, - state_reason: null - } -] From 65c1447785d79fa5af2d7ced2d30525e96304a6c Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:53:10 +0300 Subject: [PATCH 24/64] Create broken_guide_down.mjs --- .../input/issues/broken_guide_down.mjs | 1551 +++++++++++++++++ 1 file changed, 1551 insertions(+) create mode 100644 tests/__data__/input/issues/broken_guide_down.mjs diff --git a/tests/__data__/input/issues/broken_guide_down.mjs b/tests/__data__/input/issues/broken_guide_down.mjs new file mode 100644 index 00000000..9f069689 --- /dev/null +++ b/tests/__data__/input/issues/broken_guide_down.mjs @@ -0,0 +1,1551 @@ +export default [ + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2547', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/events', + html_url: 'https://github.com/iptv-org/epg/issues/2547', + id: 2760418979, + node_id: 'I_kwDOFLVvtM6kiKaj', + number: 2547, + title: 'digiturk.com.tr', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-12-27T05:33:47Z', + updated_at: '2024-12-28T20:37:53Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ndigiturk.com.tr\n\n### Description\n\n```sh\r\nnpm run grab --- --site=digiturk.com.tr\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=digiturk.com.tr\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: digiturk.com.tr\r\nloading channels...\r\n found 139 channel(s)\r\nrun #1:\r\n [1/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/278] digiturk.com.tr (en) - AlJazeeraEnglish.qa - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/278] digiturk.com.tr (tr) - Yaban.tr - Dec 28, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/reactions', + total_count: 1, + '+1': 1, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2547/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2542', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/events', + html_url: 'https://github.com/iptv-org/epg/issues/2542', + id: 2759639980, + node_id: 'I_kwDOFLVvtM6kfMOs', + number: 2542, + title: 'tvguide.com not working', + user: { + login: 'SiWafer', + id: 10903014, + node_id: 'MDQ6VXNlcjEwOTAzMDE0', + avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/SiWafer', + html_url: 'https://github.com/SiWafer', + followers_url: 'https://api.github.com/users/SiWafer/followers', + following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', + gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', + starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', + organizations_url: 'https://api.github.com/users/SiWafer/orgs', + repos_url: 'https://api.github.com/users/SiWafer/repos', + events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', + received_events_url: 'https://api.github.com/users/SiWafer/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-26T11:11:24Z', + updated_at: '2024-12-27T05:28:55Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\ntvguide.com\n\n### Description\n\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=tvguide.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tvguide.com\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tvguide.com\r\nloading channels...\r\n found 39 channel(s)\r\nrun #1:\r\n [1/78] tvguide.com (en) - AEEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/78] tvguide.com (en) - AEEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/78] tvguide.com (en) - AMCEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/78] tvguide.com (en) - AMCEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [5/78] tvguide.com (en) - BravoEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [6/78] tvguide.com (en) - BravoEast.us - Dec 26, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [7/78] tvguide.com (en) - BBCAmericaEast.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [8/78] tvguide.com (en) - CNBC.us - Dec 27, 2024 (0 programs)\r\n ERR: Request failed with status code 403\r\n [9/78] tvguide.com (en) - CNBC.us - Dec 26, 2024 (0 programs)\r\n...\r\n...\r\n...\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2542/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/epg/issues/2542/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2541', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/events', + html_url: 'https://github.com/iptv-org/epg/issues/2541', + id: 2758749907, + node_id: 'I_kwDOFLVvtM6kby7T', + number: 2541, + title: 'elcinema.com grab error 403', + user: { + login: 'xercessss', + id: 189765257, + node_id: 'U_kgDOC0-WiQ', + avatar_url: 'https://avatars.githubusercontent.com/u/189765257?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/xercessss', + html_url: 'https://github.com/xercessss', + followers_url: 'https://api.github.com/users/xercessss/followers', + following_url: 'https://api.github.com/users/xercessss/following{/other_user}', + gists_url: 'https://api.github.com/users/xercessss/gists{/gist_id}', + starred_url: 'https://api.github.com/users/xercessss/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/xercessss/subscriptions', + organizations_url: 'https://api.github.com/users/xercessss/orgs', + repos_url: 'https://api.github.com/users/xercessss/repos', + events_url: 'https://api.github.com/users/xercessss/events{/privacy}', + received_events_url: 'https://api.github.com/users/xercessss/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-25T11:34:16Z', + updated_at: '2024-12-27T05:28:07Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nelcinema.com\n\n### Description\n\ngrabbing elcinema.com epg return error 403 for both ar and en language:\r\nERR: Request failed with status code 403\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2541/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/epg/issues/2541/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2509', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/events', + html_url: 'https://github.com/iptv-org/epg/issues/2509', + id: 2740938968, + node_id: 'I_kwDOFLVvtM6jX2jY', + number: 2509, + title: 'ssl problem maxtv.hrvatskitelekom.hr', + user: { + login: 'uploadkom', + id: 130712472, + node_id: 'U_kgDOB8qDmA', + avatar_url: 'https://avatars.githubusercontent.com/u/130712472?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/uploadkom', + html_url: 'https://github.com/uploadkom', + followers_url: 'https://api.github.com/users/uploadkom/followers', + following_url: 'https://api.github.com/users/uploadkom/following{/other_user}', + gists_url: 'https://api.github.com/users/uploadkom/gists{/gist_id}', + starred_url: 'https://api.github.com/users/uploadkom/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/uploadkom/subscriptions', + organizations_url: 'https://api.github.com/users/uploadkom/orgs', + repos_url: 'https://api.github.com/users/uploadkom/repos', + events_url: 'https://api.github.com/users/uploadkom/events{/privacy}', + received_events_url: 'https://api.github.com/users/uploadkom/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 3, + created_at: '2024-12-15T22:21:22Z', + updated_at: '2024-12-27T05:26:26Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nmaxtv.hrvatskitelekom.hr\n\n### Description\n\nssl problem', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2509/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/epg/issues/2509/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2498', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/events', + html_url: 'https://github.com/iptv-org/epg/issues/2498', + id: 2728188494, + node_id: 'I_kwDOFLVvtM6inNpO', + number: 2498, + title: 'movistarplus.es', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-09T20:26:07Z', + updated_at: '2024-12-27T05:23:48Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nmovistarplus.es\n\n### Description\n\n```sh\r\nnpm run grab -- --site=movistarplus.es\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=movistarplus.es\r\n\r\n(node:22362) ExperimentalWarning: `--experimental-loader` may be removed in the future; instead use `register()`:\r\n--import \'data:text/javascript,import { register } from "node:module"; import { pathToFileURL } from "node:url"; register("file%3A///Users/Arhey/Code/iptv-org/epg/node_modules/tsx/dist/loader.mjs", pathToFileURL("./"));\'\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\n(node:22362) UnsupportedWarning: `globalPreload` has been removed; use `initialize` instead.\r\n(Use `node --trace-warnings ...` to show where the warning was created)\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: movistarplus.es\r\nloading channels...\r\n(node:22362) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.\r\n found 186 channel(s)\r\nrun #1:\r\n [1/372] movistarplus.es (es) - ANTV - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/372] movistarplus.es (es) - ANTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/372] movistarplus.es (es) - ARAGTV - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/372] movistarplus.es (es) - CANSUR - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/372] movistarplus.es (es) - DAZNL2 - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/372] movistarplus.es (es) - MLIGS - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [7/372] movistarplus.es (es) - AMC.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [8/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [9/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [10/372] movistarplus.es (es) - LasEstrellasEuropa.mx - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [11/372] movistarplus.es (es) - ComediaporMovistarPlusPlus.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [12/372] movistarplus.es (es) - LaResistencia.es - Dec 10, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [13/372] movistarplus.es (es) - LaResistencia.es - Dec 9, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2498/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/epg/issues/2498/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2445', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/events', + html_url: 'https://github.com/iptv-org/epg/issues/2445', + id: 2567652015, + node_id: 'I_kwDOFLVvtM6ZC0Kv', + number: 2445, + title: 'EPG from dishtv.in stopped with error code 404', + user: { + login: 'dheer99', + id: 20639130, + node_id: 'MDQ6VXNlcjIwNjM5MTMw', + avatar_url: 'https://avatars.githubusercontent.com/u/20639130?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/dheer99', + html_url: 'https://github.com/dheer99', + followers_url: 'https://api.github.com/users/dheer99/followers', + following_url: 'https://api.github.com/users/dheer99/following{/other_user}', + gists_url: 'https://api.github.com/users/dheer99/gists{/gist_id}', + starred_url: 'https://api.github.com/users/dheer99/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/dheer99/subscriptions', + organizations_url: 'https://api.github.com/users/dheer99/orgs', + repos_url: 'https://api.github.com/users/dheer99/repos', + events_url: 'https://api.github.com/users/dheer99/events{/privacy}', + received_events_url: 'https://api.github.com/users/dheer99/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-10-05T04:30:52Z', + updated_at: '2024-12-27T05:20:11Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\ndishtv.in\n\n### Description\n\nEPG from dishtv.in stopped with error code 404\r\n\r\n [91/98] dishtv.in (en) - StarPlus.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [92/98] dishtv.in (en) - SET.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [93/98] dishtv.in (en) - ZeeCinema.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [94/98] dishtv.in (en) - SonySportsTen5.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [95/98] dishtv.in (en) - StarSports1.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [96/98] dishtv.in (en) - SET.in - Oct 5, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [97/98] dishtv.in (en) - SonySportsTen3.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n [98/98] dishtv.in (en) - Colors.in - Oct 6, 2024 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 03s\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2445/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/epg/issues/2445/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2339', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2339/events', + html_url: 'https://github.com/iptv-org/epg/issues/2339', + id: 2172864415, + node_id: 'I_kwDOFLVvtM6Bg0ef', + number: 2339, + title: + 'directv.com.ar and directv.com.uy not working ERR: Unexpected token \'<\', " grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kan.org.il --output=kan.org.il.xml\r\n\r\nstarting...\r\nconfig:\r\n output: kan.org.il.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kan.org.il\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] kan.org.il (ar) - Makan33.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [2/6] kan.org.il (ar) - Makan33.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [3/6] kan.org.il (he) - KanEducational.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [4/6] kan.org.il (he) - KanEducational.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [5/6] kan.org.il (he) - Kan11.il - Dec 3, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n [6/6] kan.org.il (he) - Kan11.il - Dec 2, 2023 (0 programs)\r\n ERR: Request failed with status code 404\r\n done in 00h 00m 01s\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2273/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/epg/issues/2273/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2270', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/events', + html_url: 'https://github.com/iptv-org/epg/issues/2270', + id: 2022018570, + node_id: 'I_kwDOFLVvtM54hY4K', + number: 2270, + title: 'vivacom.bg is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-12-02T12:16:22Z', + updated_at: '2024-12-27T05:00:36Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nvivacom.bg\n\n### Description\n\n```sh\r\nnpm run grab -- --site=vivacom.bg\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=vivacom.bg\r\n\r\nstarting...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: vivacom.bg\r\nloading channels...\r\n found 154 channel(s)\r\nrun #1:\r\n [1/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 2, 2023 (0 programs)\r\n [2/308] vivacom.bg (bg) - 24Kitchen.bg - Dec 3, 2023 (0 programs)\r\n [3/308] vivacom.bg (bg) - 78TV.bg - Dec 3, 2023 (0 programs)\r\n [4/308] vivacom.bg (bg) - AlfaTV.bg - Dec 3, 2023 (0 programs)\r\n [5/308] vivacom.bg (bg) - AXNEurope.gr - Dec 3, 2023 (0 programs)\r\n [6/308] vivacom.bg (bg) - BNT3.bg - Dec 3, 2023 (0 programs)\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2270/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/epg/issues/2270/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2264', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/events', + html_url: 'https://github.com/iptv-org/epg/issues/2264', + id: 2019407629, + node_id: 'I_kwDOFLVvtM54XbcN', + number: 2264, + title: 'tva.tv is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-30T20:00:18Z', + updated_at: '2024-12-27T05:00:24Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ntva.tv\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tva.tv\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tva.tv\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tva.tv\r\nloading channels...\r\n found 28 channel(s)\r\nrun #1:\r\n [1/56] tva.tv (fa) - DocTV.ir - Nov 30, 2023 (0 programs)\r\n ERR: Connection timeout\r\n [2/56] tva.tv (fa) - DocTV.ir - Dec 1, 2023 (0 programs)\r\n ERR: Connection timeout\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2264/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/epg/issues/2264/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2263', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/events', + html_url: 'https://github.com/iptv-org/epg/issues/2263', + id: 2019376043, + node_id: 'I_kwDOFLVvtM54XTur', + number: 2263, + title: 'tv.yettel.hu is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-30T19:38:28Z', + updated_at: '2024-12-27T04:59:14Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ntv.yettel.hu\n\n### Description\n\n```sh\r\nnpm run grab -- --site=tv.yettel.hu\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=tv.yettel.hu\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: tv.yettel.hu\r\nloading channels...\r\n found 74 channel(s)\r\nrun #1:\r\n [1/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Nov 30, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n [2/148] tv.yettel.hu (en) - BBCNewsEurope.uk - Dec 1, 2023 (0 programs)\r\n ERR: Client network socket disconnected before secure TLS connection was established\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2263/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/epg/issues/2263/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2257', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/events', + html_url: 'https://github.com/iptv-org/epg/issues/2257', + id: 2011054011, + node_id: 'I_kwDOFLVvtM533j-7', + number: 2257, + title: 'rtb.gov.bn is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-26T14:02:13Z', + updated_at: '2024-12-27T04:59:29Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nrtb.gov.bn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rtb.gov.bn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rtb.gov.bn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rtb.gov.bn\r\nloading channels...\r\n found 3 channel(s)\r\nrun #1:\r\n [1/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 26, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [2/6] rtb.gov.bn (ms) - RTBAneka.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n [3/6] rtb.gov.bn (ms) - RTBPerdana.bn - Nov 27, 2023 (0 programs)\r\n ERR: read ECONNRESET\r\n```\r\n\r\nThere is no link to the guide on the website at the moment either: https://www.rtb.gov.bn/SitePages/Programme%20Guide.aspx', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2257/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/epg/issues/2257/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2255', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/events', + html_url: 'https://github.com/iptv-org/epg/issues/2255', + id: 2011043202, + node_id: 'I_kwDOFLVvtM533hWC', + number: 2255, + title: 'rev.bs is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-11-26T13:31:22Z', + updated_at: '2024-12-27T22:02:28Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nrev.bs\n\n### Description\n\n```sh\r\nnpm run grab -- --site=rev.bs\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=rev.bs\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: rev.bs\r\nloading channels...\r\n found 179 channel(s)\r\nrun #1:\r\n [1/358] rev.bs (en) - 3ABNEnglish.us - Nov 26, 2023 (0 programs)\r\n [2/358] rev.bs (en) - 3ABNEnglish.us - Nov 27, 2023 (0 programs)\r\n [3/358] rev.bs (en) - AEEast.us - Nov 27, 2023 (0 programs)\r\n [4/358] rev.bs (en) - AMCEast.us - Nov 27, 2023 (0 programs)\r\n```\r\n---\r\n\r\n```json\r\n{\r\n\t"status": "OK",\r\n\t"data": {\r\n\t\t"schedule": [],\r\n\t\t"dateTime": {\r\n\t\t\t"date": "2023-11-27",\r\n\t\t\t"page": 0\r\n\t\t},\r\n\t\t"runtimes": [\r\n\t\t\t{\r\n\t\t\t\t"Rev class loaded": 1700899490.604637\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"TVGuide Class Loaded": 1700899490.638891\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Validated form": 1700899490.640116\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t"Pulled schedules": 1700899490.642099\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n}\r\n```\r\n\r\nhttps://www.rev.bs/wp-content/uploads/tv-guide/2023-11-27_0.json\r\n\r\n---\r\n\r\nimage\r\n\r\nhttps://www.rev.bs/tv-guide-404/', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2255/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/epg/issues/2255/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2241', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/events', + html_url: 'https://github.com/iptv-org/epg/issues/2241', + id: 2002096969, + node_id: 'I_kwDOFLVvtM53VZNJ', + number: 2241, + title: 'm.tv.sms.cz is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 4, + created_at: '2023-11-20T12:28:47Z', + updated_at: '2024-12-27T04:58:41Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nm.tv.sms.cz\n\n### Description\n\n```sh\r\nnpm run grab -- --site=m.tv.sms.cz\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=m.tv.sms.cz\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: m.tv.sms.cz\r\nloading channels...\r\n found 525 channel(s)\r\nrun #1:\r\n [1/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 20, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [2/1050] m.tv.sms.cz (bs) - BNTV.ba - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n\r\n [3/1050] m.tv.sms.cz (cs) - AMC.cz - Nov 21, 2023 (0 programs)\r\n ERR: write EPROTO C04D101B01000000:error:0A000172:SSL routines:tls12_check_peer_sigalg:wrong signature type:ssl/t1_lib.c:1594:\r\n```\r\n\r\nhttps://check-host.net/check-report/135d7e05kb9d', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2241/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/epg/issues/2241/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2240', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/events', + html_url: 'https://github.com/iptv-org/epg/issues/2240', + id: 2001847449, + node_id: 'I_kwDOFLVvtM53UcSZ', + number: 2240, + title: 'kplus.vn is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-20T10:19:23Z', + updated_at: '2024-12-27T04:57:49Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\nkplus.vn\n\n### Description\n\n```sh\r\nnpm run grab -- --site=kplus.vn\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=kplus.vn\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: kplus.vn\r\nloading channels...\r\n found 26 channel(s)\r\nrun #1:\r\n [1/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 20, 2023 (0 programs)\r\n [2/52] kplus.vn (vi) - AsianFoodNetwork.sg - Nov 21, 2023 (0 programs)\r\n [3/52] kplus.vn (vi) - AXN.vn - Nov 21, 2023 (0 programs)\r\n [4/52] kplus.vn (vi) - DiscoveryChannelSoutheastAsia.sg - Nov 21, 2023 (0 programs)\r\n```\r\n\r\nThe site also currently does not display the guide:\r\nimage\r\nhttps://www.kplus.vn/highlights/broadcast-schedule', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2240/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/epg/issues/2240/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2239', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/events', + html_url: 'https://github.com/iptv-org/epg/issues/2239', + id: 2000457187, + node_id: 'I_kwDOFLVvtM53PI3j', + number: 2239, + title: 'comteco.com.bo is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 3, + created_at: '2023-11-18T15:03:48Z', + updated_at: '2024-12-27T21:25:41Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ncomteco.com.bo\n\n### Description\n\n```sh\r\nnpm run grab -- --site=comteco.com.bo\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=comteco.com.bo\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: comteco.com.bo\r\nloading channels...\r\n found 72 channel(s)\r\nrun #1:\r\n [1/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 18, 2023 (0 programs)\r\n [2/144] comteco.com.bo (es) - AbyaYalaTV.bo - Nov 19, 2023 (0 programs)\r\n [3/144] comteco.com.bo (es) - AEPanregional.us - Nov 19, 2023 (0 programs)\r\n [4/144] comteco.com.bo (es) - AnimalPlanetLatinAmerica.us - Nov 19, 2023 (0 programs)\r\n [5/144] comteco.com.bo (es) - BoliviaTV72.bo - Nov 19, 2023 (0 programs)\r\n```\r\n\r\nhttps://comteco.com.bo/pages/canales-y-programacion-tv/paquete-oro/ABYA%20YALA\r\nimage', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2239/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/epg/issues/2239/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2237', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/events', + html_url: 'https://github.com/iptv-org/epg/issues/2237', + id: 2000349577, + node_id: 'I_kwDOFLVvtM53OumJ', + number: 2237, + title: 'canalplus-haiti.com is broken', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2023-11-18T09:46:29Z', + updated_at: '2024-12-27T04:57:02Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ncanalplus-haiti.com\n\n### Description\n\n```sh\r\nnpm run grab -- --site=canalplus-haiti.com\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=canalplus-haiti.com\r\n\r\nstaring...\r\nconfig:\r\n output: guide.xml\r\n maxConnections: 1\r\n gzip: false\r\n site: canalplus-haiti.com\r\nloading channels...\r\n found 111 channel(s)\r\nrun #1:\r\n [1/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [2/222] canalplus-haiti.com (fr) - 13emeRue.fr - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [3/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 19, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n [4/222] canalplus-haiti.com (fr) - ZoukTV.mq - Nov 18, 2023 (0 programs)\r\n ERR: Request failed with status code 403\r\n```\r\n\r\nhttps://check-host.net/check-report/134fc56bk333', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2237/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/epg/issues/2237/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2173', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/events', + html_url: 'https://github.com/iptv-org/epg/issues/2173', + id: 1903824500, + node_id: 'I_kwDOFLVvtM5xeg50', + number: 2173, + title: 'hd-plus.de - 0 programs on all channels', + user: { + login: 'x011', + id: 4313821, + node_id: 'MDQ6VXNlcjQzMTM4MjE=', + avatar_url: 'https://avatars.githubusercontent.com/u/4313821?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/x011', + html_url: 'https://github.com/x011', + followers_url: 'https://api.github.com/users/x011/followers', + following_url: 'https://api.github.com/users/x011/following{/other_user}', + gists_url: 'https://api.github.com/users/x011/gists{/gist_id}', + starred_url: 'https://api.github.com/users/x011/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/x011/subscriptions', + organizations_url: 'https://api.github.com/users/x011/orgs', + repos_url: 'https://api.github.com/users/x011/repos', + events_url: 'https://api.github.com/users/x011/events{/privacy}', + received_events_url: 'https://api.github.com/users/x011/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710795, + node_id: 'LA_kwDOFLVvtM8AAAAB2NOPiw', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:down', + name: 'status:down', + color: 'df3a4a', + default: false, + description: "The guide doesn't work" + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2023-09-19T22:45:56Z', + updated_at: '2024-12-27T04:54:11Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\nhd-plus.de\r\n\r\n### Description\r\n\r\nAll channels on hd-plus.de have 0 programs:\r\n```\r\n[1/60] hd-plus.de - 123tv.de - Sep 19, 2023 (0 programs)\r\n[2/60] hd-plus.de - 123tv.de - Sep 20, 2023 (0 programs)\r\n[3/60] hd-plus.de - ZDF.de - Sep 20, 2023 (0 programs)\r\n[4/60] hd-plus.de - ZDF.de - Sep 19, 2023 (0 programs)\r\n...\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/reactions', + total_count: 6, + '+1': 6, + '-1': 0, + laugh: 0, + hooray: 0, + confused: 0, + heart: 0, + rocket: 0, + eyes: 0 + }, + timeline_url: 'https://api.github.com/repos/iptv-org/epg/issues/2173/timeline', + performed_via_github_app: null, + state_reason: null + } +] From c9f730bac4c6238a14285e3263e8245eaaf11568 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:53:13 +0300 Subject: [PATCH 25/64] Delete broken_guide_warning.js --- .../input/issues/broken_guide_warning.js | 974 ------------------ 1 file changed, 974 deletions(-) delete mode 100644 tests/__data__/input/issues/broken_guide_warning.js diff --git a/tests/__data__/input/issues/broken_guide_warning.js b/tests/__data__/input/issues/broken_guide_warning.js deleted file mode 100644 index d8828b90..00000000 --- a/tests/__data__/input/issues/broken_guide_warning.js +++ /dev/null @@ -1,974 +0,0 @@ -export default [ - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2543', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/events', - html_url: 'https://github.com/iptv-org/epg/issues/2543', - id: 2759693796, - node_id: 'I_kwDOFLVvtM6kfZXk', - number: 2543, - title: 'flixed.io is downloding old programming', - user: { - login: 'SiWafer', - id: 10903014, - node_id: 'MDQ6VXNlcjEwOTAzMDE0', - avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/SiWafer', - html_url: 'https://github.com/SiWafer', - followers_url: 'https://api.github.com/users/SiWafer/followers', - following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', - gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', - starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', - organizations_url: 'https://api.github.com/users/SiWafer/orgs', - repos_url: 'https://api.github.com/users/SiWafer/repos', - events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', - received_events_url: 'https://api.github.com/users/SiWafer/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-12-26T12:09:43Z', - updated_at: '2024-12-27T05:29:58Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Describe your issue\r\n\r\nJust ran and updated, and seems the output is loading old programming and it also is not complete\r\n\r\nExample is Bravo channel\r\n\r\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=flixed.io --maxConnections=10 -o "flixed.xml"\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=flixed.io --maxConnections=10 -o flixed.xml\r\n\r\nstarting...\r\nconfig:\r\n output: flixed.xml\r\n maxConnections: 10\r\n gzip: false\r\n site: flixed.io\r\nloading channels...\r\n found 94 channel(s)\r\nrun #1:\r\n [1/94] flixed.io (en) - BravoEast.us - Dec 26, 2024 (2 programs)\r\n [2/94] flixed.io (en) - ComedyCentralEast.us - Dec 26, 2024 (5 programs)\r\n [3/94] flixed.io (en) - ACCNetwork.us - Dec 26, 2024 (26 programs)\r\n [4/94] flixed.io (en) - CNN.us - Dec 26, 2024 (25 programs)\r\n [5/94] flixed.io (en) - BloombergTV.us - Dec 26, 2024 (21 programs)\r\n [6/94] flixed.io (en) - AEEast.us - Dec 26, 2024 (6 programs)\r\n [7/94] flixed.io (en) - CNBC.us - Dec 26, 2024 (3 programs)\r\n [8/94] flixed.io (en) - CinemaxEast.us - Dec 26, 2024 (14 programs)\r\n [9/94] flixed.io (en) - AMCEast.us - Dec 26, 2024 (19 programs)\r\n [10/94] flixed.io (en) - BigTenNetwork.us - Dec 26, 2024 (3 programs)\r\n [11/94] flixed.io (en) - FoxWest.us - Dec 26, 2024 (8 programs)\r\n [12/94] flixed.io (en) - FreeformEast.us - Dec 26, 2024 (2 programs)\r\n [13/94] flixed.io (en) - FoxSports2.us - Dec 26, 2024 (2 programs)\r\n [14/94] flixed.io (en) - FoodNetworkEast.us - Dec 26, 2024 (3 programs)\r\n...\r\n...\r\n...\r\n\r\n```\r\nSnip from xml file out\r\n![image](https://github.com/user-attachments/assets/5ed6d7eb-df59-4951-9b2c-5214e24d24ac)\r\n\r\nThe date is September 26, 2024, 01:00:00 for Bravo\r\n\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/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/epg/issues/2543/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2516', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/events', - html_url: 'https://github.com/iptv-org/epg/issues/2516', - id: 2745387354, - node_id: 'I_kwDOFLVvtM6jo0la', - number: 2516, - title: 'Duplicate programmes with sky.com grab', - user: { - login: 'misar1', - id: 69795879, - node_id: 'MDQ6VXNlcjY5Nzk1ODc5', - avatar_url: 'https://avatars.githubusercontent.com/u/69795879?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/misar1', - html_url: 'https://github.com/misar1', - followers_url: 'https://api.github.com/users/misar1/followers', - following_url: 'https://api.github.com/users/misar1/following{/other_user}', - gists_url: 'https://api.github.com/users/misar1/gists{/gist_id}', - starred_url: 'https://api.github.com/users/misar1/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/misar1/subscriptions', - organizations_url: 'https://api.github.com/users/misar1/orgs', - repos_url: 'https://api.github.com/users/misar1/repos', - events_url: 'https://api.github.com/users/misar1/events{/privacy}', - received_events_url: 'https://api.github.com/users/misar1/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-12-17T16:19:36Z', - updated_at: '2024-12-27T05:27:44Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nsky.com\n\n### Description\n\n\r\nI changed to the recently updated sky.com script a couple of days ago (using a completely new install as in the readme) and have found an anomaly. This does not occur with an identical grab using my previous installation. The grabs are for about 60 UK FTA channels which I can list if it would be helpful.\r\n\r\nA number of programmes have two identical blocks in the XML, including their start and finish times. This occurs only from around approximately 22:00 each day and up to about midnight GMT. During this period most channels are affected and it is consistent between successive grabs. In case of a timing issue I tested delays of 100, 1000, 3000 and 5000 msec but the XML was unchanged.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/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/epg/issues/2516/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2501', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/events', - html_url: 'https://github.com/iptv-org/epg/issues/2501', - id: 2738899005, - node_id: 'I_kwDOFLVvtM6jQEg9', - number: 2501, - title: 'Sky.com', - user: { - login: 'Chris230291', - id: 5328818, - node_id: 'MDQ6VXNlcjUzMjg4MTg=', - avatar_url: 'https://avatars.githubusercontent.com/u/5328818?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/Chris230291', - html_url: 'https://github.com/Chris230291', - followers_url: 'https://api.github.com/users/Chris230291/followers', - following_url: 'https://api.github.com/users/Chris230291/following{/other_user}', - gists_url: 'https://api.github.com/users/Chris230291/gists{/gist_id}', - starred_url: 'https://api.github.com/users/Chris230291/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/Chris230291/subscriptions', - organizations_url: 'https://api.github.com/users/Chris230291/orgs', - repos_url: 'https://api.github.com/users/Chris230291/repos', - events_url: 'https://api.github.com/users/Chris230291/events{/privacy}', - received_events_url: 'https://api.github.com/users/Chris230291/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-12-13T17:45:02Z', - updated_at: '2024-12-27T05:25:49Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nsky.com\n\n### Description\n\n```\r\n Viaplay 1 HD\r\n Viaplay 2 HD\r\n```\r\n\r\nThese should be "Premier Sports 1 HD" and "Premier Sports 2 HD".\r\nAlso, the UK and ROI have different schedules for these 2 channels.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/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/epg/issues/2501/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2446', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/events', - html_url: 'https://github.com/iptv-org/epg/issues/2446', - id: 2568624116, - node_id: 'I_kwDOFLVvtM6ZGhf0', - number: 2446, - title: 'Eleven channels returning 0 programs on meo.pt', - user: { - login: 'jonatasgz', - id: 78122211, - node_id: 'MDQ6VXNlcjc4MTIyMjEx', - avatar_url: 'https://avatars.githubusercontent.com/u/78122211?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/jonatasgz', - html_url: 'https://github.com/jonatasgz', - followers_url: 'https://api.github.com/users/jonatasgz/followers', - following_url: 'https://api.github.com/users/jonatasgz/following{/other_user}', - gists_url: 'https://api.github.com/users/jonatasgz/gists{/gist_id}', - starred_url: 'https://api.github.com/users/jonatasgz/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/jonatasgz/subscriptions', - organizations_url: 'https://api.github.com/users/jonatasgz/orgs', - repos_url: 'https://api.github.com/users/jonatasgz/repos', - events_url: 'https://api.github.com/users/jonatasgz/events{/privacy}', - received_events_url: 'https://api.github.com/users/jonatasgz/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-10-06T12:00:48Z', - updated_at: '2024-12-27T05:23:16Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\n\nmeo.pt\n\n### Description\n\nEleven (DAZN) channels return 0 programs.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/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/epg/issues/2446/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2400', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/events', - html_url: 'https://github.com/iptv-org/epg/issues/2400', - id: 2370209498, - node_id: 'I_kwDOFLVvtM6NRoba', - number: 2400, - title: 'tvgids.nl', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-06-24T13:05:05Z', - updated_at: '2024-12-27T05:19:25Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: "### Site\n\ntvgids.nl\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvgids.nl \r\n\r\n> test\r\n> run-script-os tvgids.nl\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvgids.nl\r\n\r\n FAIL sites/tvgids.nl/tvgids.nl.test.js\r\n ✓ can generate valid url (29 ms)\r\n ✕ can generate valid url for today (4 ms)\r\n ✓ can parse response (307 ms)\r\n ✓ can handle empty guide (3 ms)\r\n\r\n ● can generate valid url for today\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: \"https://www.tvgids.nl/gids/npo1\"\r\n Received: \"https://www.tvgids.nl/gids/25-06-2024/npo1\"\r\n\r\n 21 | const today = dayjs().startOf('d')\r\n 22 |\r\n > 23 | expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/npo1')\r\n | ^\r\n 24 | })\r\n 25 |\r\n 26 | it('can parse response', () => {\r\n\r\n at Object. (sites/tvgids.nl/tvgids.nl.test.js:23:41)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.52 s\r\nRan all test suites matching /tvgids.nl/i.\r\n```", - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/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/epg/issues/2400/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2399', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/events', - html_url: 'https://github.com/iptv-org/epg/issues/2399', - id: 2370207356, - node_id: 'I_kwDOFLVvtM6NRn58', - number: 2399, - title: 'tvprofil.com', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-06-24T13:04:08Z', - updated_at: '2024-12-27T05:18:50Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\ntvprofil.com\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvprofil.com\r\n\r\n> test\r\n> run-script-os tvprofil.com\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvprofil.com\r\n\r\n FAIL sites/tvprofil.com/tvprofil.com.test.js\r\n ✕ can generate valid url (14 ms)\r\n ✓ can generate valid request headers (1 ms)\r\n ✓ can parse response (76 ms)\r\n ✓ can handle empty guide (2 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933"\r\n Received: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b49=819461"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/tvprofil.com/tvprofil.com.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.307 s\r\nRan all test suites matching /tvprofil.com/i.\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/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/epg/issues/2399/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2396', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/events', - html_url: 'https://github.com/iptv-org/epg/issues/2396', - id: 2370189473, - node_id: 'I_kwDOFLVvtM6NRjih', - number: 2396, - title: 'iltalehti.fi', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-06-24T12:56:45Z', - updated_at: '2024-12-27T05:18:16Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\n\niltalehti.fi\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- iltalehti.fi \r\n\r\n> test\r\n> run-script-os iltalehti.fi\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand iltalehti.fi\r\n\r\n FAIL sites/iltalehti.fi/iltalehti.fi.test.js\r\n ✕ can generate valid url (10 ms)\r\n ✓ can parse response (28 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n Received: "https://telkku.com/api/channel-groups/default_builtin_channelgroupdefault_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/iltalehti.fi/iltalehti.fi.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 3.193 s\r\nRan all test suites matching /iltalehti.fi/i.\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/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/epg/issues/2396/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2395', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/events', - html_url: 'https://github.com/iptv-org/epg/issues/2395', - id: 2370186157, - node_id: 'I_kwDOFLVvtM6NRiut', - number: 2395, - title: 'chaines-tv.orange.fr', - 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', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2024-06-24T12:55:21Z', - updated_at: '2024-12-27T05:17:25Z', - closed_at: null, - author_association: 'COLLABORATOR', - active_lock_reason: null, - body: '### Site\r\n\r\nchaines-tv.orange.fr\r\n\r\n### Description\r\n\r\nTest failed:\r\n\r\n```sh\r\nnpm test -- chaines-tv.orange.fr\r\n\r\n> test\r\n> run-script-os chaines-tv.orange.fr\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand chaines-tv.orange.fr\r\n\r\n FAIL sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js\r\n ✓ can generate valid url (5 ms)\r\n ✕ can parse response (12 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can parse response\r\n\r\n expect(received).toMatchObject(expected)\r\n\r\n - Expected - 1\r\n + Received + 1\r\n\r\n @@ -3,8 +3,8 @@\r\n "category": "Série Suspense",\r\n "description": "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.",\r\n "icon": "https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg",\r\n "start": "2021-11-07T23:35:00.000Z",\r\n "stop": "2021-11-08T00:20:00.000Z",\r\n - "title": "Tête de liste",\r\n + "title": "Esprits criminels",\r\n },\r\n ]\r\n\r\n 23 | it(\'can parse response\', () => {\r\n 24 | const result = parser({ date, channel, content })\r\n > 25 | expect(result).toMatchObject([\r\n | ^\r\n 26 | {\r\n 27 | start: \'2021-11-07T23:35:00.000Z\',\r\n 28 | stop: \'2021-11-08T00:20:00.000Z\',\r\n\r\n at Object. (sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js:25:18)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 4.003 s\r\nRan all test suites matching /chaines-tv.orange.fr/i.\r\n```', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/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/epg/issues/2395/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2304', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/events', - html_url: 'https://github.com/iptv-org/epg/issues/2304', - id: 2064638324, - node_id: 'I_kwDOFLVvtM57D-F0', - number: 2304, - title: 'digiturk.com.tr Missing Channel Identifications', - user: { - login: 'UzunMuhalefet', - id: 80906858, - node_id: 'MDQ6VXNlcjgwOTA2ODU4', - avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/UzunMuhalefet', - html_url: 'https://github.com/UzunMuhalefet', - followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', - following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', - gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', - starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', - organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', - repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', - events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', - received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 0, - created_at: '2024-01-03T20:57:58Z', - updated_at: '2024-12-27T05:32:37Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\ndigiturk.com.tr\r\n\r\n### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nKANAL 24 HD\r\nTARIH TV HD\r\nSÖZCÜ TV HD\r\n```\r\n\r\nLet me clarify the cases:\r\n- SZC changed its name to Sözcü TV\r\n- 24 TV often called as Kanal (Channel) 24\r\n- Tarih TV is straightforward.\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/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/epg/issues/2304/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2303', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/events', - html_url: 'https://github.com/iptv-org/epg/issues/2303', - id: 2064633657, - node_id: 'I_kwDOFLVvtM57D885', - number: 2303, - title: 'dsmart.com.tr Channel Identifications', - user: { - login: 'UzunMuhalefet', - id: 80906858, - node_id: 'MDQ6VXNlcjgwOTA2ODU4', - avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/UzunMuhalefet', - html_url: 'https://github.com/UzunMuhalefet', - followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', - following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', - gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', - starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', - organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', - repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', - events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', - received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 1, - created_at: '2024-01-03T20:53:34Z', - updated_at: '2024-12-27T05:44:16Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nNR1\r\nNR1 Türk\r\nTRT EBA TV İlkokul\r\nTRT EBA TV Ortaokul\r\nTRT EBA TV Lise\r\nÇifçi TV\r\nKanal 16\r\nFlash Haber\r\nYeni Kocaeli TV\r\nATV Turkiye SD\r\nTRT EBA TV İlkokul SD\r\nTRT EBA TV Ortaokul SD\r\nTRT EBA TV Lise SD\r\nTarih Tv\r\nSZC\r\nTRT 3 Spor\r\n``` \r\n\r\nLet me clarify the cases: \r\n\r\n- NR1 stands for Number One\r\n- Cifci TV - Çiftçi TV - misspelling\r\n- The number 16 is spelled as onaltı (on -> 10, altı->6, on6 -> 16) in Turkish so on6 - Kanal 16\r\n- Flash TV changed its name to Flash Haber TV\r\n- SZC changed its name to Sözcü TV\r\n- TRT 3 is a strange channel that usually streams the same content as TRT Spor but when there is a Turkish parliament event it switches to that event. So, the channel is both called TRT 3 and TRT 3 Spor.\r\n', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/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/epg/issues/2303/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2272', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/events', - html_url: 'https://github.com/iptv-org/epg/issues/2272', - id: 2022135766, - node_id: 'I_kwDOFLVvtM54h1fW', - number: 2272, - title: 'Film titles with numbers only in the title (as in "1900" or "1917") don\'t show up', - user: { - login: 'GlamoramaAttack', - id: 116585465, - node_id: 'U_kgDOBvLz-Q', - avatar_url: 'https://avatars.githubusercontent.com/u/116585465?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/GlamoramaAttack', - html_url: 'https://github.com/GlamoramaAttack', - followers_url: 'https://api.github.com/users/GlamoramaAttack/followers', - following_url: 'https://api.github.com/users/GlamoramaAttack/following{/other_user}', - gists_url: 'https://api.github.com/users/GlamoramaAttack/gists{/gist_id}', - starred_url: 'https://api.github.com/users/GlamoramaAttack/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/GlamoramaAttack/subscriptions', - organizations_url: 'https://api.github.com/users/GlamoramaAttack/orgs', - repos_url: 'https://api.github.com/users/GlamoramaAttack/repos', - events_url: 'https://api.github.com/users/GlamoramaAttack/events{/privacy}', - received_events_url: 'https://api.github.com/users/GlamoramaAttack/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 2, - created_at: '2023-12-02T17:29:50Z', - updated_at: '2024-12-27T05:02:05Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\ntvpassport.com\r\n\r\n### Describe your issue\r\n\r\nFilm titles with numbers only in the title -as in "1900" or "1917"- don\'t show up at all.\r\n\r\nSorry, I don\'t understand anything about how to write a script or fix it but I see there is notable difference in the **guide.xml** file - the examples are excerpts from tvpassport.com. This isn\'t a new bug I think, it\'s just that I thought for a long time it\'s a Kodi problem before looking into the guide.xml file...\r\n\r\n```\r\nchannel="Showtime2East.us">The Caine Mutiny Court-MartialA \r\nchannel="Showtime2East.us">Two British soldiers receive seemingly impossible orders \r\nchannel="Showtime2East.us">There Will Be BloodDaniel \r\n```\r\nor:\r\n\r\n```\r\nchannel="MGMPlusEast.us">A Fistful of DynamiteA thief \r\nchannel="MGMPlusEast.us">The son (Robert De Niro) of a landowner and the son \r\nchannel="MGMPlusEast.us">Indecent ProposalA Las Vegas \r\n```\r\n\r\nFor some reason "title lang" gets replaced by "desc lang" and the film title is nowhere displayed.\r\n\r\nOn Kodi it looks like this for the films and you can also see it\'s not a problem if the film title includes more than numbers (see "88 Minutes" or "Resistance: 1942"). But titles as "1900", "1917" or "1408" (Horror with John Cusack) appear blank.\r\n\r\n![NoTitleWithNumbers](https://github.com/iptv-org/epg/assets/116585465/155f98f8-8529-4c42-af3c-def1edcf5651)\r\n\r\nI\'m not sure whether the problem also exists with other sources than tvpassport.com because I use only two other (German language) EPG sources that have currently no film titles with numbers only. But I assume it\'s a bug if it\'s not reduced to tvpassport.', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/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/epg/issues/2272/timeline', - performed_via_github_app: null, - state_reason: null - }, - { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2176', - repository_url: 'https://api.github.com/repos/iptv-org/epg', - labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/labels{/name}', - comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/comments', - events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/events', - html_url: 'https://github.com/iptv-org/epg/issues/2176', - id: 1915947653, - node_id: 'I_kwDOFLVvtM5yMwqF', - number: 2176, - title: 'tvtv', - user: { - login: 'jvdillon', - id: 1137078, - node_id: 'MDQ6VXNlcjExMzcwNzg=', - avatar_url: 'https://avatars.githubusercontent.com/u/1137078?v=4', - gravatar_id: '', - url: 'https://api.github.com/users/jvdillon', - html_url: 'https://github.com/jvdillon', - followers_url: 'https://api.github.com/users/jvdillon/followers', - following_url: 'https://api.github.com/users/jvdillon/following{/other_user}', - gists_url: 'https://api.github.com/users/jvdillon/gists{/gist_id}', - starred_url: 'https://api.github.com/users/jvdillon/starred{/owner}{/repo}', - subscriptions_url: 'https://api.github.com/users/jvdillon/subscriptions', - organizations_url: 'https://api.github.com/users/jvdillon/orgs', - repos_url: 'https://api.github.com/users/jvdillon/repos', - events_url: 'https://api.github.com/users/jvdillon/events{/privacy}', - received_events_url: 'https://api.github.com/users/jvdillon/received_events', - type: 'User', - user_view_type: 'public', - site_admin: false - }, - labels: [ - { - id: 4542348869, - node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', - url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', - name: 'broken guide', - color: 'eaeaea', - default: false, - description: "There's a problem with the guide" - }, - { - id: 7932710318, - node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', - url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', - name: 'status:warning', - color: 'fbca06', - default: false, - description: 'The guide downloads, but contains errors' - } - ], - state: 'open', - locked: false, - assignee: null, - assignees: [], - milestone: null, - comments: 6, - created_at: '2023-09-27T16:34:00Z', - updated_at: '2024-12-27T04:55:00Z', - closed_at: null, - author_association: 'NONE', - active_lock_reason: null, - body: '### Site\r\n\r\ntvtv.us\r\n\r\n### Description\r\n\r\nStarts getting error 429 after several 100 scrapes. I tried setting the delay to 1000ms, 1500ms, and 2000ms but keep seeing the issue.\r\n\r\nIt almost appears to happen after a sequence of 0 program scrapes. I wonder if the delay is not happening when nothing is downloaded which causes tvtv.us to throttle which triggers 0 programs downloaded. (Ie a feedback loop)', - closed_by: null, - reactions: { - url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/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/epg/issues/2176/timeline', - performed_via_github_app: null, - state_reason: null - } -] From b99765c7430b6e8fda7613cade4d02dce34a572f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:53:15 +0300 Subject: [PATCH 26/64] Create broken_guide_warning.mjs --- .../input/issues/broken_guide_warning.mjs | 974 ++++++++++++++++++ 1 file changed, 974 insertions(+) create mode 100644 tests/__data__/input/issues/broken_guide_warning.mjs diff --git a/tests/__data__/input/issues/broken_guide_warning.mjs b/tests/__data__/input/issues/broken_guide_warning.mjs new file mode 100644 index 00000000..d8828b90 --- /dev/null +++ b/tests/__data__/input/issues/broken_guide_warning.mjs @@ -0,0 +1,974 @@ +export default [ + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2543', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/events', + html_url: 'https://github.com/iptv-org/epg/issues/2543', + id: 2759693796, + node_id: 'I_kwDOFLVvtM6kfZXk', + number: 2543, + title: 'flixed.io is downloding old programming', + user: { + login: 'SiWafer', + id: 10903014, + node_id: 'MDQ6VXNlcjEwOTAzMDE0', + avatar_url: 'https://avatars.githubusercontent.com/u/10903014?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/SiWafer', + html_url: 'https://github.com/SiWafer', + followers_url: 'https://api.github.com/users/SiWafer/followers', + following_url: 'https://api.github.com/users/SiWafer/following{/other_user}', + gists_url: 'https://api.github.com/users/SiWafer/gists{/gist_id}', + starred_url: 'https://api.github.com/users/SiWafer/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/SiWafer/subscriptions', + organizations_url: 'https://api.github.com/users/SiWafer/orgs', + repos_url: 'https://api.github.com/users/SiWafer/repos', + events_url: 'https://api.github.com/users/SiWafer/events{/privacy}', + received_events_url: 'https://api.github.com/users/SiWafer/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-12-26T12:09:43Z', + updated_at: '2024-12-27T05:29:58Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Describe your issue\r\n\r\nJust ran and updated, and seems the output is loading old programming and it also is not complete\r\n\r\nExample is Bravo channel\r\n\r\n```\r\nepg@rpi:~/epg$ npm run grab --- --site=flixed.io --maxConnections=10 -o "flixed.xml"\r\n\r\n> grab\r\n> npx tsx scripts/commands/epg/grab.ts --site=flixed.io --maxConnections=10 -o flixed.xml\r\n\r\nstarting...\r\nconfig:\r\n output: flixed.xml\r\n maxConnections: 10\r\n gzip: false\r\n site: flixed.io\r\nloading channels...\r\n found 94 channel(s)\r\nrun #1:\r\n [1/94] flixed.io (en) - BravoEast.us - Dec 26, 2024 (2 programs)\r\n [2/94] flixed.io (en) - ComedyCentralEast.us - Dec 26, 2024 (5 programs)\r\n [3/94] flixed.io (en) - ACCNetwork.us - Dec 26, 2024 (26 programs)\r\n [4/94] flixed.io (en) - CNN.us - Dec 26, 2024 (25 programs)\r\n [5/94] flixed.io (en) - BloombergTV.us - Dec 26, 2024 (21 programs)\r\n [6/94] flixed.io (en) - AEEast.us - Dec 26, 2024 (6 programs)\r\n [7/94] flixed.io (en) - CNBC.us - Dec 26, 2024 (3 programs)\r\n [8/94] flixed.io (en) - CinemaxEast.us - Dec 26, 2024 (14 programs)\r\n [9/94] flixed.io (en) - AMCEast.us - Dec 26, 2024 (19 programs)\r\n [10/94] flixed.io (en) - BigTenNetwork.us - Dec 26, 2024 (3 programs)\r\n [11/94] flixed.io (en) - FoxWest.us - Dec 26, 2024 (8 programs)\r\n [12/94] flixed.io (en) - FreeformEast.us - Dec 26, 2024 (2 programs)\r\n [13/94] flixed.io (en) - FoxSports2.us - Dec 26, 2024 (2 programs)\r\n [14/94] flixed.io (en) - FoodNetworkEast.us - Dec 26, 2024 (3 programs)\r\n...\r\n...\r\n...\r\n\r\n```\r\nSnip from xml file out\r\n![image](https://github.com/user-attachments/assets/5ed6d7eb-df59-4951-9b2c-5214e24d24ac)\r\n\r\nThe date is September 26, 2024, 01:00:00 for Bravo\r\n\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2543/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/epg/issues/2543/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2516', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/events', + html_url: 'https://github.com/iptv-org/epg/issues/2516', + id: 2745387354, + node_id: 'I_kwDOFLVvtM6jo0la', + number: 2516, + title: 'Duplicate programmes with sky.com grab', + user: { + login: 'misar1', + id: 69795879, + node_id: 'MDQ6VXNlcjY5Nzk1ODc5', + avatar_url: 'https://avatars.githubusercontent.com/u/69795879?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/misar1', + html_url: 'https://github.com/misar1', + followers_url: 'https://api.github.com/users/misar1/followers', + following_url: 'https://api.github.com/users/misar1/following{/other_user}', + gists_url: 'https://api.github.com/users/misar1/gists{/gist_id}', + starred_url: 'https://api.github.com/users/misar1/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/misar1/subscriptions', + organizations_url: 'https://api.github.com/users/misar1/orgs', + repos_url: 'https://api.github.com/users/misar1/repos', + events_url: 'https://api.github.com/users/misar1/events{/privacy}', + received_events_url: 'https://api.github.com/users/misar1/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-12-17T16:19:36Z', + updated_at: '2024-12-27T05:27:44Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nsky.com\n\n### Description\n\n\r\nI changed to the recently updated sky.com script a couple of days ago (using a completely new install as in the readme) and have found an anomaly. This does not occur with an identical grab using my previous installation. The grabs are for about 60 UK FTA channels which I can list if it would be helpful.\r\n\r\nA number of programmes have two identical blocks in the XML, including their start and finish times. This occurs only from around approximately 22:00 each day and up to about midnight GMT. During this period most channels are affected and it is consistent between successive grabs. In case of a timing issue I tested delays of 100, 1000, 3000 and 5000 msec but the XML was unchanged.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2516/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/epg/issues/2516/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2501', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/events', + html_url: 'https://github.com/iptv-org/epg/issues/2501', + id: 2738899005, + node_id: 'I_kwDOFLVvtM6jQEg9', + number: 2501, + title: 'Sky.com', + user: { + login: 'Chris230291', + id: 5328818, + node_id: 'MDQ6VXNlcjUzMjg4MTg=', + avatar_url: 'https://avatars.githubusercontent.com/u/5328818?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/Chris230291', + html_url: 'https://github.com/Chris230291', + followers_url: 'https://api.github.com/users/Chris230291/followers', + following_url: 'https://api.github.com/users/Chris230291/following{/other_user}', + gists_url: 'https://api.github.com/users/Chris230291/gists{/gist_id}', + starred_url: 'https://api.github.com/users/Chris230291/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/Chris230291/subscriptions', + organizations_url: 'https://api.github.com/users/Chris230291/orgs', + repos_url: 'https://api.github.com/users/Chris230291/repos', + events_url: 'https://api.github.com/users/Chris230291/events{/privacy}', + received_events_url: 'https://api.github.com/users/Chris230291/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-12-13T17:45:02Z', + updated_at: '2024-12-27T05:25:49Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nsky.com\n\n### Description\n\n```\r\n Viaplay 1 HD\r\n Viaplay 2 HD\r\n```\r\n\r\nThese should be "Premier Sports 1 HD" and "Premier Sports 2 HD".\r\nAlso, the UK and ROI have different schedules for these 2 channels.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2501/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/epg/issues/2501/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2446', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/events', + html_url: 'https://github.com/iptv-org/epg/issues/2446', + id: 2568624116, + node_id: 'I_kwDOFLVvtM6ZGhf0', + number: 2446, + title: 'Eleven channels returning 0 programs on meo.pt', + user: { + login: 'jonatasgz', + id: 78122211, + node_id: 'MDQ6VXNlcjc4MTIyMjEx', + avatar_url: 'https://avatars.githubusercontent.com/u/78122211?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/jonatasgz', + html_url: 'https://github.com/jonatasgz', + followers_url: 'https://api.github.com/users/jonatasgz/followers', + following_url: 'https://api.github.com/users/jonatasgz/following{/other_user}', + gists_url: 'https://api.github.com/users/jonatasgz/gists{/gist_id}', + starred_url: 'https://api.github.com/users/jonatasgz/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/jonatasgz/subscriptions', + organizations_url: 'https://api.github.com/users/jonatasgz/orgs', + repos_url: 'https://api.github.com/users/jonatasgz/repos', + events_url: 'https://api.github.com/users/jonatasgz/events{/privacy}', + received_events_url: 'https://api.github.com/users/jonatasgz/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-10-06T12:00:48Z', + updated_at: '2024-12-27T05:23:16Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\n\nmeo.pt\n\n### Description\n\nEleven (DAZN) channels return 0 programs.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2446/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/epg/issues/2446/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2400', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/events', + html_url: 'https://github.com/iptv-org/epg/issues/2400', + id: 2370209498, + node_id: 'I_kwDOFLVvtM6NRoba', + number: 2400, + title: 'tvgids.nl', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-06-24T13:05:05Z', + updated_at: '2024-12-27T05:19:25Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: "### Site\n\ntvgids.nl\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvgids.nl \r\n\r\n> test\r\n> run-script-os tvgids.nl\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvgids.nl\r\n\r\n FAIL sites/tvgids.nl/tvgids.nl.test.js\r\n ✓ can generate valid url (29 ms)\r\n ✕ can generate valid url for today (4 ms)\r\n ✓ can parse response (307 ms)\r\n ✓ can handle empty guide (3 ms)\r\n\r\n ● can generate valid url for today\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: \"https://www.tvgids.nl/gids/npo1\"\r\n Received: \"https://www.tvgids.nl/gids/25-06-2024/npo1\"\r\n\r\n 21 | const today = dayjs().startOf('d')\r\n 22 |\r\n > 23 | expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/npo1')\r\n | ^\r\n 24 | })\r\n 25 |\r\n 26 | it('can parse response', () => {\r\n\r\n at Object. (sites/tvgids.nl/tvgids.nl.test.js:23:41)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.52 s\r\nRan all test suites matching /tvgids.nl/i.\r\n```", + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2400/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/epg/issues/2400/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2399', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/events', + html_url: 'https://github.com/iptv-org/epg/issues/2399', + id: 2370207356, + node_id: 'I_kwDOFLVvtM6NRn58', + number: 2399, + title: 'tvprofil.com', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-06-24T13:04:08Z', + updated_at: '2024-12-27T05:18:50Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\ntvprofil.com\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- tvprofil.com\r\n\r\n> test\r\n> run-script-os tvprofil.com\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand tvprofil.com\r\n\r\n FAIL sites/tvprofil.com/tvprofil.com.test.js\r\n ✕ can generate valid url (14 ms)\r\n ✓ can generate valid request headers (1 ms)\r\n ✓ can parse response (76 ms)\r\n ✓ can handle empty guide (2 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933"\r\n Received: "https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b49=819461"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://tvprofil.com/bg/tv-programa/program/?datum=2023-01-12&kanal=24kitchen-bg&callback=cb&b51=818933\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/tvprofil.com/tvprofil.com.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 3 passed, 4 total\r\nSnapshots: 0 total\r\nTime: 3.307 s\r\nRan all test suites matching /tvprofil.com/i.\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2399/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/epg/issues/2399/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2396', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/events', + html_url: 'https://github.com/iptv-org/epg/issues/2396', + id: 2370189473, + node_id: 'I_kwDOFLVvtM6NRjih', + number: 2396, + title: 'iltalehti.fi', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-06-24T12:56:45Z', + updated_at: '2024-12-27T05:18:16Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\n\niltalehti.fi\n\n### Description\n\nTest failed:\r\n\r\n```sh\r\nnpm test -- iltalehti.fi \r\n\r\n> test\r\n> run-script-os iltalehti.fi\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand iltalehti.fi\r\n\r\n FAIL sites/iltalehti.fi/iltalehti.fi.test.js\r\n ✕ can generate valid url (10 ms)\r\n ✓ can parse response (28 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can generate valid url\r\n\r\n expect(received).toBe(expected) // Object.is equality\r\n\r\n Expected: "https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n Received: "https://telkku.com/api/channel-groups/default_builtin_channelgroupdefault_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails"\r\n\r\n 15 |\r\n 16 | it(\'can generate valid url\', () => {\r\n > 17 | expect(url({ channel, date })).toBe(\r\n | ^\r\n 18 | \'https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails\'\r\n 19 | )\r\n 20 | })\r\n\r\n at Object. (sites/iltalehti.fi/iltalehti.fi.test.js:17:34)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 3.193 s\r\nRan all test suites matching /iltalehti.fi/i.\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2396/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/epg/issues/2396/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2395', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/events', + html_url: 'https://github.com/iptv-org/epg/issues/2395', + id: 2370186157, + node_id: 'I_kwDOFLVvtM6NRiut', + number: 2395, + title: 'chaines-tv.orange.fr', + 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', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2024-06-24T12:55:21Z', + updated_at: '2024-12-27T05:17:25Z', + closed_at: null, + author_association: 'COLLABORATOR', + active_lock_reason: null, + body: '### Site\r\n\r\nchaines-tv.orange.fr\r\n\r\n### Description\r\n\r\nTest failed:\r\n\r\n```sh\r\nnpm test -- chaines-tv.orange.fr\r\n\r\n> test\r\n> run-script-os chaines-tv.orange.fr\r\n\r\n\r\n> test:default\r\n> TZ=Pacific/Nauru npx jest --runInBand chaines-tv.orange.fr\r\n\r\n FAIL sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js\r\n ✓ can generate valid url (5 ms)\r\n ✕ can parse response (12 ms)\r\n ✓ can handle empty guide (1 ms)\r\n\r\n ● can parse response\r\n\r\n expect(received).toMatchObject(expected)\r\n\r\n - Expected - 1\r\n + Received + 1\r\n\r\n @@ -3,8 +3,8 @@\r\n "category": "Série Suspense",\r\n "description": "Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d\'un de ses vieux amis.",\r\n "icon": "https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg",\r\n "start": "2021-11-07T23:35:00.000Z",\r\n "stop": "2021-11-08T00:20:00.000Z",\r\n - "title": "Tête de liste",\r\n + "title": "Esprits criminels",\r\n },\r\n ]\r\n\r\n 23 | it(\'can parse response\', () => {\r\n 24 | const result = parser({ date, channel, content })\r\n > 25 | expect(result).toMatchObject([\r\n | ^\r\n 26 | {\r\n 27 | start: \'2021-11-07T23:35:00.000Z\',\r\n 28 | stop: \'2021-11-08T00:20:00.000Z\',\r\n\r\n at Object. (sites/chaines-tv.orange.fr/chaines-tv.orange.fr.test.js:25:18)\r\n\r\nTest Suites: 1 failed, 1 total\r\nTests: 1 failed, 2 passed, 3 total\r\nSnapshots: 0 total\r\nTime: 4.003 s\r\nRan all test suites matching /chaines-tv.orange.fr/i.\r\n```', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2395/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/epg/issues/2395/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2304', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/events', + html_url: 'https://github.com/iptv-org/epg/issues/2304', + id: 2064638324, + node_id: 'I_kwDOFLVvtM57D-F0', + number: 2304, + title: 'digiturk.com.tr Missing Channel Identifications', + user: { + login: 'UzunMuhalefet', + id: 80906858, + node_id: 'MDQ6VXNlcjgwOTA2ODU4', + avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/UzunMuhalefet', + html_url: 'https://github.com/UzunMuhalefet', + followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', + following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', + gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', + starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', + organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', + repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', + events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', + received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 0, + created_at: '2024-01-03T20:57:58Z', + updated_at: '2024-12-27T05:32:37Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\ndigiturk.com.tr\r\n\r\n### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nKANAL 24 HD\r\nTARIH TV HD\r\nSÖZCÜ TV HD\r\n```\r\n\r\nLet me clarify the cases:\r\n- SZC changed its name to Sözcü TV\r\n- 24 TV often called as Kanal (Channel) 24\r\n- Tarih TV is straightforward.\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2304/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/epg/issues/2304/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2303', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/events', + html_url: 'https://github.com/iptv-org/epg/issues/2303', + id: 2064633657, + node_id: 'I_kwDOFLVvtM57D885', + number: 2303, + title: 'dsmart.com.tr Channel Identifications', + user: { + login: 'UzunMuhalefet', + id: 80906858, + node_id: 'MDQ6VXNlcjgwOTA2ODU4', + avatar_url: 'https://avatars.githubusercontent.com/u/80906858?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/UzunMuhalefet', + html_url: 'https://github.com/UzunMuhalefet', + followers_url: 'https://api.github.com/users/UzunMuhalefet/followers', + following_url: 'https://api.github.com/users/UzunMuhalefet/following{/other_user}', + gists_url: 'https://api.github.com/users/UzunMuhalefet/gists{/gist_id}', + starred_url: 'https://api.github.com/users/UzunMuhalefet/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/UzunMuhalefet/subscriptions', + organizations_url: 'https://api.github.com/users/UzunMuhalefet/orgs', + repos_url: 'https://api.github.com/users/UzunMuhalefet/repos', + events_url: 'https://api.github.com/users/UzunMuhalefet/events{/privacy}', + received_events_url: 'https://api.github.com/users/UzunMuhalefet/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 1, + created_at: '2024-01-03T20:53:34Z', + updated_at: '2024-12-27T05:44:16Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Describe your issue\r\n\r\nThe following channels can be corrected as follows. (I added the TVG-IDs if they exist in https://iptv-org.github.io/)\r\n\r\n```\r\nNR1\r\nNR1 Türk\r\nTRT EBA TV İlkokul\r\nTRT EBA TV Ortaokul\r\nTRT EBA TV Lise\r\nÇifçi TV\r\nKanal 16\r\nFlash Haber\r\nYeni Kocaeli TV\r\nATV Turkiye SD\r\nTRT EBA TV İlkokul SD\r\nTRT EBA TV Ortaokul SD\r\nTRT EBA TV Lise SD\r\nTarih Tv\r\nSZC\r\nTRT 3 Spor\r\n``` \r\n\r\nLet me clarify the cases: \r\n\r\n- NR1 stands for Number One\r\n- Cifci TV - Çiftçi TV - misspelling\r\n- The number 16 is spelled as onaltı (on -> 10, altı->6, on6 -> 16) in Turkish so on6 - Kanal 16\r\n- Flash TV changed its name to Flash Haber TV\r\n- SZC changed its name to Sözcü TV\r\n- TRT 3 is a strange channel that usually streams the same content as TRT Spor but when there is a Turkish parliament event it switches to that event. So, the channel is both called TRT 3 and TRT 3 Spor.\r\n', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2303/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/epg/issues/2303/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2272', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/events', + html_url: 'https://github.com/iptv-org/epg/issues/2272', + id: 2022135766, + node_id: 'I_kwDOFLVvtM54h1fW', + number: 2272, + title: 'Film titles with numbers only in the title (as in "1900" or "1917") don\'t show up', + user: { + login: 'GlamoramaAttack', + id: 116585465, + node_id: 'U_kgDOBvLz-Q', + avatar_url: 'https://avatars.githubusercontent.com/u/116585465?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/GlamoramaAttack', + html_url: 'https://github.com/GlamoramaAttack', + followers_url: 'https://api.github.com/users/GlamoramaAttack/followers', + following_url: 'https://api.github.com/users/GlamoramaAttack/following{/other_user}', + gists_url: 'https://api.github.com/users/GlamoramaAttack/gists{/gist_id}', + starred_url: 'https://api.github.com/users/GlamoramaAttack/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/GlamoramaAttack/subscriptions', + organizations_url: 'https://api.github.com/users/GlamoramaAttack/orgs', + repos_url: 'https://api.github.com/users/GlamoramaAttack/repos', + events_url: 'https://api.github.com/users/GlamoramaAttack/events{/privacy}', + received_events_url: 'https://api.github.com/users/GlamoramaAttack/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 2, + created_at: '2023-12-02T17:29:50Z', + updated_at: '2024-12-27T05:02:05Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\ntvpassport.com\r\n\r\n### Describe your issue\r\n\r\nFilm titles with numbers only in the title -as in "1900" or "1917"- don\'t show up at all.\r\n\r\nSorry, I don\'t understand anything about how to write a script or fix it but I see there is notable difference in the **guide.xml** file - the examples are excerpts from tvpassport.com. This isn\'t a new bug I think, it\'s just that I thought for a long time it\'s a Kodi problem before looking into the guide.xml file...\r\n\r\n```\r\nchannel="Showtime2East.us">The Caine Mutiny Court-MartialA \r\nchannel="Showtime2East.us">Two British soldiers receive seemingly impossible orders \r\nchannel="Showtime2East.us">There Will Be BloodDaniel \r\n```\r\nor:\r\n\r\n```\r\nchannel="MGMPlusEast.us">A Fistful of DynamiteA thief \r\nchannel="MGMPlusEast.us">The son (Robert De Niro) of a landowner and the son \r\nchannel="MGMPlusEast.us">Indecent ProposalA Las Vegas \r\n```\r\n\r\nFor some reason "title lang" gets replaced by "desc lang" and the film title is nowhere displayed.\r\n\r\nOn Kodi it looks like this for the films and you can also see it\'s not a problem if the film title includes more than numbers (see "88 Minutes" or "Resistance: 1942"). But titles as "1900", "1917" or "1408" (Horror with John Cusack) appear blank.\r\n\r\n![NoTitleWithNumbers](https://github.com/iptv-org/epg/assets/116585465/155f98f8-8529-4c42-af3c-def1edcf5651)\r\n\r\nI\'m not sure whether the problem also exists with other sources than tvpassport.com because I use only two other (German language) EPG sources that have currently no film titles with numbers only. But I assume it\'s a bug if it\'s not reduced to tvpassport.', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2272/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/epg/issues/2272/timeline', + performed_via_github_app: null, + state_reason: null + }, + { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2176', + repository_url: 'https://api.github.com/repos/iptv-org/epg', + labels_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/labels{/name}', + comments_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/comments', + events_url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/events', + html_url: 'https://github.com/iptv-org/epg/issues/2176', + id: 1915947653, + node_id: 'I_kwDOFLVvtM5yMwqF', + number: 2176, + title: 'tvtv', + user: { + login: 'jvdillon', + id: 1137078, + node_id: 'MDQ6VXNlcjExMzcwNzg=', + avatar_url: 'https://avatars.githubusercontent.com/u/1137078?v=4', + gravatar_id: '', + url: 'https://api.github.com/users/jvdillon', + html_url: 'https://github.com/jvdillon', + followers_url: 'https://api.github.com/users/jvdillon/followers', + following_url: 'https://api.github.com/users/jvdillon/following{/other_user}', + gists_url: 'https://api.github.com/users/jvdillon/gists{/gist_id}', + starred_url: 'https://api.github.com/users/jvdillon/starred{/owner}{/repo}', + subscriptions_url: 'https://api.github.com/users/jvdillon/subscriptions', + organizations_url: 'https://api.github.com/users/jvdillon/orgs', + repos_url: 'https://api.github.com/users/jvdillon/repos', + events_url: 'https://api.github.com/users/jvdillon/events{/privacy}', + received_events_url: 'https://api.github.com/users/jvdillon/received_events', + type: 'User', + user_view_type: 'public', + site_admin: false + }, + labels: [ + { + id: 4542348869, + node_id: 'LA_kwDOFLVvtM8AAAABDr6-RQ', + url: 'https://api.github.com/repos/iptv-org/epg/labels/broken%20guide', + name: 'broken guide', + color: 'eaeaea', + default: false, + description: "There's a problem with the guide" + }, + { + id: 7932710318, + node_id: 'LA_kwDOFLVvtM8AAAAB2NONrg', + url: 'https://api.github.com/repos/iptv-org/epg/labels/status:warning', + name: 'status:warning', + color: 'fbca06', + default: false, + description: 'The guide downloads, but contains errors' + } + ], + state: 'open', + locked: false, + assignee: null, + assignees: [], + milestone: null, + comments: 6, + created_at: '2023-09-27T16:34:00Z', + updated_at: '2024-12-27T04:55:00Z', + closed_at: null, + author_association: 'NONE', + active_lock_reason: null, + body: '### Site\r\n\r\ntvtv.us\r\n\r\n### Description\r\n\r\nStarts getting error 429 after several 100 scrapes. I tried setting the delay to 1000ms, 1500ms, and 2000ms but keep seeing the issue.\r\n\r\nIt almost appears to happen after a sequence of 0 program scrapes. I wonder if the delay is not happening when nothing is downloaded which causes tvtv.us to throttle which triggers 0 programs downloaded. (Ie a feedback loop)', + closed_by: null, + reactions: { + url: 'https://api.github.com/repos/iptv-org/epg/issues/2176/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/epg/issues/2176/timeline', + performed_via_github_app: null, + state_reason: null + } +] From 9af374c72b76216b7fe531b3d68f21ef69744f49 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 10:53:19 +0300 Subject: [PATCH 27/64] Update issueLoader.ts --- scripts/core/issueLoader.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/core/issueLoader.ts b/scripts/core/issueLoader.ts index cbdd0fc0..8d9b6479 100644 --- a/scripts/core/issueLoader.ts +++ b/scripts/core/issueLoader.ts @@ -15,11 +15,11 @@ export class IssueLoader { if (TESTING) { switch (labels) { case 'broken guide,status:warning': - issues = (await import('../../tests/__data__/input/issues/broken_guide_warning.js')) + issues = (await import('../../tests/__data__/input/issues/broken_guide_warning.mjs')) .default break case 'broken guide,status:down': - issues = (await import('../../tests/__data__/input/issues/broken_guide_down.js')).default + issues = (await import('../../tests/__data__/input/issues/broken_guide_down.mjs')).default break } } else { From 4788ff1e31e473884ab92fcb7a2211dcd7f30c7b Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:15:24 +0300 Subject: [PATCH 28/64] Update .prettierrc.js --- .prettierrc.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.prettierrc.js b/.prettierrc.js index 56f939b5..ed373a0f 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,7 +1,7 @@ module.exports = { tabWidth: 2, useTabs: false, - endOfLine: 'lf', + endOfLine: 'crlf', semi: false, singleQuote: true, printWidth: 100, From 784216a82dc6bbcae2b4f27ad54c2018c0e965b4 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:15:53 +0300 Subject: [PATCH 29/64] Update eslint.config.mjs --- eslint.config.mjs | 99 +++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 47 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index f65b8c77..49931f5b 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,47 +1,52 @@ -import typescriptEslint from "@typescript-eslint/eslint-plugin"; -import globals from "globals"; -import tsParser from "@typescript-eslint/parser"; -import path from "node:path"; -import { fileURLToPath } from "node:url"; -import js from "@eslint/js"; -import { FlatCompat } from "@eslint/eslintrc"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); -const compat = new FlatCompat({ - baseDirectory: __dirname, - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all -}); - -export default [ - ...compat.extends("eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier"), - { - plugins: { - "@typescript-eslint": typescriptEslint, - }, - - languageOptions: { - globals: { - ...globals.node, - ...globals.jest, - }, - - parser: tsParser, - ecmaVersion: "latest", - sourceType: "module", - }, - - rules: { - "@typescript-eslint/no-var-requires": "off", - "no-case-declarations": "off", - "linebreak-style": ["error", "windows"], - - quotes: ["error", "single", { - avoidEscape: true, - }], - - semi: ["error", "never"], - }, - }, -]; \ No newline at end of file +import typescriptEslint from '@typescript-eslint/eslint-plugin' +import globals from 'globals' +import tsParser from '@typescript-eslint/parser' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import js from '@eslint/js' +import { FlatCompat } from '@eslint/eslintrc' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}) + +export default [ + ...compat.extends('eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'), + { + plugins: { + '@typescript-eslint': typescriptEslint + }, + + languageOptions: { + globals: { + ...globals.node, + ...globals.jest + }, + + parser: tsParser, + ecmaVersion: 'latest', + sourceType: 'module' + }, + + rules: { + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-var-requires': 'off', + 'no-case-declarations': 'off', + 'linebreak-style': ['error', 'windows'], + + quotes: [ + 'error', + 'single', + { + avoidEscape: true + } + ], + + semi: ['error', 'never'] + } + } +] From d6d20b6413e97371610ea92a691f905f7bd96996 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:16:11 +0300 Subject: [PATCH 30/64] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a7ad91b9..e93b469e 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "sites:update": "npx tsx scripts/commands/sites/update.ts", "grab": "npx tsx scripts/commands/epg/grab.ts", "serve": "npx serve", - "lint": "npx eslint \"{scripts,tests}/**/*.{ts,js}\"", + "lint": "npx eslint \"{scripts,tests,sites}/**/*.{ts,js}\"", "test": "run-script-os", "test:win32": "SET \"TZ=Pacific/Nauru\" && npx jest --runInBand", "test:default": "TZ=Pacific/Nauru npx jest --runInBand", From 5df982bb7c05da8229bd11c718f363aceb2f7366 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 12:27:22 +0300 Subject: [PATCH 31/64] Fix linter issues in sites/ --- sites/abc.net.au/abc.net.au.config.js | 2 +- sites/awilime.com/awilime.com.test.js | 2 +- sites/beinsports.com/beinsports.com.config.js | 3 +- sites/beinsports.com/beinsports.com.test.js | 2 - sites/chada.ma/chada.ma.config.js | 109 +++--- sites/chada.ma/chada.ma.test.js | 118 +++--- .../chaines-tv.orange.fr.config.js | 2 +- .../content.astro.com.my.config.js | 4 +- sites/cosmotetv.gr/cosmotetv.gr.config.js | 166 +++++---- sites/cosmotetv.gr/cosmotetv.gr.test.js | 157 ++++---- sites/cubmu.com/cubmu.com.config.js | 216 +++++------ sites/cubmu.com/cubmu.com.test.js | 94 ++--- sites/dens.tv/dens.tv.config.js | 13 +- sites/dens.tv/dens.tv.test.js | 4 +- .../digiturk.com.tr/digiturk.com.tr.config.js | 2 +- sites/dishtv.in/dishtv.in.config.js | 2 +- sites/guida.tv/guida.tv.config.js | 4 +- sites/guidatv.sky.it/guidatv.sky.it.config.js | 2 +- sites/hoy.tv/hoy.tv.config.js | 126 +++---- sites/hoy.tv/hoy.tv.test.js | 231 ++++++------ sites/i.mjh.nz/i.mjh.nz.config.js | 7 +- sites/ipko.tv/ipko.tv.config.js | 153 ++++---- sites/ipko.tv/ipko.tv.test.js | 226 ++++++------ sites/m.tv.sms.cz/m.tv.sms.cz.config.js | 2 +- sites/magticom.ge/magticom.ge.config.js | 4 +- .../maxtv.hrvatskitelekom.hr.config.js | 2 +- sites/mediaklikk.hu/mediaklikk.hu.config.js | 2 +- .../mediasetinfinity.mediaset.it.config.js | 190 +++++----- .../mediasetinfinity.mediaset.it.test.js | 99 ++--- sites/meo.pt/meo.pt.config.js | 2 +- sites/meuguia.tv/meuguia.tv.config.js | 206 ++++++----- sites/meuguia.tv/meuguia.tv.test.js | 120 +++--- sites/mewatch.sg/mewatch.sg.config.js | 2 +- sites/mncvision.id/mncvision.id.config.js | 6 +- sites/moji.id/moji.id.config.js | 10 +- sites/moji.id/moji.id.test.js | 19 +- sites/mtel.ba/mtel.ba.config.js | 4 +- sites/mts.rs/mts.rs.config.js | 8 +- .../mujtvprogram.cz/mujtvprogram.cz.config.js | 4 +- sites/musor.tv/musor.tv.config.js | 2 +- sites/musor.tv/musor.tv.test.js | 11 +- sites/mytelly.co.uk/mytelly.co.uk.config.js | 68 ++-- sites/mytelly.co.uk/mytelly.co.uk.test.js | 14 +- sites/neo.io/neo.io.config.js | 153 ++++---- sites/neo.io/neo.io.test.js | 245 +++++++------ .../nhkworldpremium.com.config.js | 2 +- sites/nhl.com/nhl.com.config.js | 91 ++--- sites/nhl.com/nhl.com.test.js | 88 ++--- sites/nostv.pt/nostv.pt.config.js | 136 +++---- sites/nostv.pt/nostv.pt.test.js | 102 +++--- .../nuevosiglo.com.uy.config.js | 2 +- sites/nzxmltv.com/nzxmltv.com.config.js | 162 ++++---- sites/nzxmltv.com/nzxmltv.com.test.js | 80 ++-- .../ontvtonight.com/ontvtonight.com.config.js | 2 +- .../orangetv.orange.es.config.js | 221 ++++++----- .../orangetv.orange.es.test.js | 103 +++--- sites/osn.com/osn.com.config.js | 19 +- sites/osn.com/osn.com.test.js | 26 +- sites/pbsguam.org/pbsguam.org.config.js | 2 +- sites/pickx.be/pickx.be.config.js | 346 +++++++++--------- sites/pickx.be/pickx.be.test.js | 145 ++++---- .../player.ee.co.uk/player.ee.co.uk.config.js | 206 +++++------ sites/player.ee.co.uk/player.ee.co.uk.test.js | 146 ++++---- .../playtv.unifi.com.my.config.js | 4 +- sites/programetv.ro/programetv.ro.config.js | 4 +- .../programme-tv.net.config.js | 2 +- .../programme-tv.vini.pf.config.js | 2 +- .../programme.tvb.com.config.js | 12 +- .../programme.tvb.com.test.js | 4 +- .../programtv.onet.pl.config.js | 2 +- sites/rev.bs/rev.bs.config.js | 2 +- sites/rotana.net/rotana.net.config.js | 43 ++- sites/rotana.net/rotana.net.test.js | 32 +- sites/rtb.gov.bn/rtb.gov.bn.config.js | 2 +- sites/rtp.pt/rtp.pt.config.js | 1 - sites/s.mxtv.jp/s.mxtv.jp.config.js | 114 +++--- sites/s.mxtv.jp/s.mxtv.jp.test.js | 3 +- sites/sat.tv/sat.tv.config.js | 2 +- sites/shahid.mbc.net/shahid.mbc.net.config.js | 153 ++++---- sites/shahid.mbc.net/shahid.mbc.net.test.js | 76 ++-- sites/singtel.com/singtel.com.config.js | 4 +- sites/sjonvarp.is/sjonvarp.is.config.js | 2 +- sites/sky.com/sky.com.config.js | 35 +- sites/sky.com/sky.com.test.js | 6 +- sites/skylife.co.kr/skylife.co.kr.test.js | 2 +- sites/skyperfectv.co.jp/__data__/content.html | 1 + sites/skyperfectv.co.jp/__data__/empty.html | 1 + .../skyperfectv.co.jp.config.js | 191 +++++----- .../skyperfectv.co.jp.test.js | 18 +- sites/snrt.ma/snrt.ma.config.js | 183 +++++---- sites/snrt.ma/snrt.ma.test.js | 16 +- .../starhubtvplus.com.config.js | 26 +- .../starhubtvplus.com.test.js | 9 +- .../startimestv.com/startimestv.com.config.js | 22 +- .../streamingtvguides.com.config.js | 4 +- sites/telenet.tv/telenet.tv.config.js | 8 +- sites/telkussa.fi/telkussa.fi.config.js | 4 +- sites/tivie.id/tivie.id.config.js | 266 +++++++------- sites/tivie.id/tivie.id.test.js | 152 ++++---- .../turksatkablo.com.tr.config.js | 2 +- sites/tv.mail.ru/tv.mail.ru.config.js | 2 +- sites/tv.nu/tv.nu.config.js | 2 +- sites/tv.trueid.net/tv.trueid.net.config.js | 2 +- sites/tv.yandex.ru/tv.yandex.ru.config.js | 63 ++-- sites/tv.yandex.ru/tv.yandex.ru.test.js | 18 +- sites/tv2go.t-2.net/tv2go.t-2.net.config.js | 2 +- .../tvarenasport.com.config.js | 41 ++- .../tvarenasport.com/tvarenasport.com.test.js | 4 +- sites/tvarenasport.hr/tvarenasport.hr.test.js | 4 +- sites/tvcesoir.fr/tvcesoir.fr.config.js | 4 +- .../tvcubana.icrt.cu.config.js | 2 +- sites/tvguide.com/tvguide.com.config.js | 5 +- sites/tvheute.at/tvheute.at.config.js | 2 +- sites/tvim.tv/tvim.tv.config.js | 2 +- sites/tvireland.ie/tvireland.ie.config.js | 4 +- sites/tvpassport.com/tvpassport.com.config.js | 2 +- sites/tvplus.com.tr/tvplus.com.tr.config.js | 27 +- sites/tvplus.com.tr/tvplus.com.tr.test.js | 19 +- sites/tvtv.us/tvtv.us.config.js | 2 +- .../virgintvgo.virginmedia.com.config.js | 48 +-- .../virgintvgo.virginmedia.com.test.js | 18 +- sites/visionplus.id/visionplus.id.config.js | 18 +- sites/visionplus.id/visionplus.id.test.js | 30 +- .../watch.sportsnet.ca.config.js | 4 +- .../web.magentatv.de.config.js | 13 +- .../web.magentatv.de/web.magentatv.de.test.js | 26 +- sites/winplay.co/winplay.co.config.js | 1 - sites/ziggogo.tv/ziggogo.tv.config.js | 48 +-- sites/ziggogo.tv/ziggogo.tv.test.js | 22 +- 129 files changed, 3316 insertions(+), 3226 deletions(-) create mode 100644 sites/skyperfectv.co.jp/__data__/content.html create mode 100644 sites/skyperfectv.co.jp/__data__/empty.html diff --git a/sites/abc.net.au/abc.net.au.config.js b/sites/abc.net.au/abc.net.au.config.js index 5caa9356..0550574b 100644 --- a/sites/abc.net.au/abc.net.au.config.js +++ b/sites/abc.net.au/abc.net.au.config.js @@ -92,7 +92,7 @@ function parseItems(content, channel) { const [, channelId] = channel.site_id.split('#') const channelData = data.schedule.find(i => i.channel == channelId) return channelData.listing && Array.isArray(channelData.listing) ? channelData.listing : [] - } catch (err) { + } catch { return [] } } diff --git a/sites/awilime.com/awilime.com.test.js b/sites/awilime.com/awilime.com.test.js index df3677fe..08da5912 100644 --- a/sites/awilime.com/awilime.com.test.js +++ b/sites/awilime.com/awilime.com.test.js @@ -1,4 +1,4 @@ -const { parser, url, request } = require('./awilime.com.config.js') +const { parser, url } = require('./awilime.com.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') diff --git a/sites/beinsports.com/beinsports.com.config.js b/sites/beinsports.com/beinsports.com.config.js index 4bfae6de..41b6c899 100644 --- a/sites/beinsports.com/beinsports.com.config.js +++ b/sites/beinsports.com/beinsports.com.config.js @@ -1,5 +1,4 @@ const axios = require('axios') -const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -62,7 +61,7 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (error) { + } catch { return [] } diff --git a/sites/beinsports.com/beinsports.com.test.js b/sites/beinsports.com/beinsports.com.test.js index 7651968e..563c18b1 100644 --- a/sites/beinsports.com/beinsports.com.test.js +++ b/sites/beinsports.com/beinsports.com.test.js @@ -1,6 +1,4 @@ const { parser, url } = require('./beinsports.com.config.js') -const fs = require('fs') -const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') diff --git a/sites/chada.ma/chada.ma.config.js b/sites/chada.ma/chada.ma.config.js index 087028a7..b6002c35 100644 --- a/sites/chada.ma/chada.ma.config.js +++ b/sites/chada.ma/chada.ma.config.js @@ -1,54 +1,55 @@ -const axios = require('axios'); -const cheerio = require('cheerio'); -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); -const customParseFormat = require('dayjs/plugin/customParseFormat'); - -dayjs.extend(utc); -dayjs.extend(timezone); -dayjs.extend(customParseFormat); - -module.exports = { - site: 'chada.ma', - channels: 'chada.ma.channels.xml', - days: 1, - request: { - cache: { - ttl: 60 * 60 * 1000 // 1 hour - } - }, - url() { - return 'https://chada.ma/fr/chada-tv/grille-tv/'; - }, - parser: function ({ content }) { - const $ = cheerio.load(content); - const programs = []; - - $('#stopfix .posts-area h2').each((i, element) => { - const timeRange = $(element).text().trim(); - const [start, stop] = timeRange.split(' - ').map(t => parseProgramTime(t.trim())); - - const titleElement = $(element).next('div').next('h3'); - const title = titleElement.text().trim(); - - const description = titleElement.next('div').text().trim() || 'No description available'; - - programs.push({ - title, - description, - start, - stop - }); - }); - - return programs; - } -}; - -function parseProgramTime(timeStr) { - const timeZone = 'Africa/Casablanca'; - const currentDate = dayjs().format('YYYY-MM-DD'); - - return dayjs.tz(`${currentDate} ${timeStr}`, 'YYYY-MM-DD HH:mm', timeZone).format('YYYY-MM-DDTHH:mm:ssZ'); -} +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'chada.ma', + channels: 'chada.ma.channels.xml', + days: 1, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1 hour + } + }, + url() { + return 'https://chada.ma/fr/chada-tv/grille-tv/' + }, + parser: function ({ content }) { + const $ = cheerio.load(content) + const programs = [] + + $('#stopfix .posts-area h2').each((i, element) => { + const timeRange = $(element).text().trim() + const [start, stop] = timeRange.split(' - ').map(t => parseProgramTime(t.trim())) + + const titleElement = $(element).next('div').next('h3') + const title = titleElement.text().trim() + + const description = titleElement.next('div').text().trim() || 'No description available' + + programs.push({ + title, + description, + start, + stop + }) + }) + + return programs + } +} + +function parseProgramTime(timeStr) { + const timeZone = 'Africa/Casablanca' + const currentDate = dayjs().format('YYYY-MM-DD') + + return dayjs + .tz(`${currentDate} ${timeStr}`, 'YYYY-MM-DD HH:mm', timeZone) + .format('YYYY-MM-DDTHH:mm:ssZ') +} diff --git a/sites/chada.ma/chada.ma.test.js b/sites/chada.ma/chada.ma.test.js index 557da6ea..51f715d4 100644 --- a/sites/chada.ma/chada.ma.test.js +++ b/sites/chada.ma/chada.ma.test.js @@ -1,60 +1,58 @@ -const { parser, url } = require('./chada.ma.config.js') -const axios = require('axios') -const dayjs = require('dayjs') -const cheerio = require('cheerio') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -jest.mock('axios') - -const mockHtmlContent = ` -
-

Programmes d'Aujourd'hui

-
-

00:00 - 09:00

-
- - - -
-

Bloc Prime + Clips

-
-
-
-
-`; - -it('can generate valid url', () => { - expect(url()).toBe('https://chada.ma/fr/chada-tv/grille-tv/') -}); - -it('can parse response', () => { - const content = mockHtmlContent - - const result = parser({ content }).map(p => { - p.start = dayjs(p.start).tz('Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ') - p.stop = dayjs(p.stop).tz('Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ') - return p - }) - - expect(result).toMatchObject([ - { - title: "Bloc Prime + Clips", - description: "No description available", - start: dayjs.tz('00:00', 'HH:mm', 'Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ'), - stop: dayjs.tz('09:00', 'HH:mm', 'Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ') - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - content: '
' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./chada.ma.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +jest.mock('axios') + +const mockHtmlContent = ` +
+

Programmes d'Aujourd'hui

+
+

00:00 - 09:00

+
+ + + +
+

Bloc Prime + Clips

+
+
+
+
+` + +it('can generate valid url', () => { + expect(url()).toBe('https://chada.ma/fr/chada-tv/grille-tv/') +}) + +it('can parse response', () => { + const content = mockHtmlContent + + const result = parser({ content }).map(p => { + p.start = dayjs(p.start).tz('Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ') + p.stop = dayjs(p.stop).tz('Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ') + return p + }) + + expect(result).toMatchObject([ + { + title: 'Bloc Prime + Clips', + description: 'No description available', + start: dayjs.tz('00:00', 'HH:mm', 'Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ'), + stop: dayjs.tz('09:00', 'HH:mm', 'Africa/Casablanca').format('YYYY-MM-DDTHH:mm:ssZ') + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: '
' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js index d8b49148..cc44e33c 100644 --- a/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js +++ b/sites/chaines-tv.orange.fr/chaines-tv.orange.fr.config.js @@ -29,7 +29,7 @@ module.exports = { }, async channels() { const html = await axios - .get(`https://chaines-tv.orange.fr/programme-tv?filtres=all`) + .get('https://chaines-tv.orange.fr/programme-tv?filtres=all') .then(r => r.data) .catch(console.log) diff --git a/sites/content.astro.com.my/content.astro.com.my.config.js b/sites/content.astro.com.my/content.astro.com.my.config.js index 12c7f2af..6f261a91 100644 --- a/sites/content.astro.com.my/content.astro.com.my.config.js +++ b/sites/content.astro.com.my/content.astro.com.my.config.js @@ -40,7 +40,7 @@ module.exports = { }, async channels() { const data = await axios - .get(`https://contenthub-api.eco.astro.com.my/channel/all.json`) + .get('https://contenthub-api.eco.astro.com.my/channel/all.json') .then(r => r.data) .catch(console.log) @@ -85,7 +85,7 @@ function parseItems(content, date) { const schedules = data.response.schedule return schedules[date.format('YYYY-MM-DD')] || [] - } catch (e) { + } catch { return [] } } diff --git a/sites/cosmotetv.gr/cosmotetv.gr.config.js b/sites/cosmotetv.gr/cosmotetv.gr.config.js index ef26df1f..8374f050 100644 --- a/sites/cosmotetv.gr/cosmotetv.gr.config.js +++ b/sites/cosmotetv.gr/cosmotetv.gr.config.js @@ -1,81 +1,85 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -const timezone = require('dayjs/plugin/timezone') - -dayjs.extend(utc) -dayjs.extend(customParseFormat) -dayjs.extend(timezone) - -module.exports = { - site: 'cosmotetv.gr', - days: 5, - request: { - cache: { - ttl: 60 * 60 * 1000 // 1 hour - }, - method: 'GET', - headers: { - 'referer': 'https://www.cosmotetv.gr/', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', - 'Accept': '*/*', - 'Accept-Language': 'en-US,en;q=0.9', - 'Accept-Encoding': 'gzip, deflate, br, zstd', - 'Origin': 'https://www.cosmotetv.gr', - 'Sec-Ch-Ua': '"Not.A/Brand";v="24", "Chromium";v="131", "Google Chrome";v="131"', - 'Sec-Ch-Ua-Mobile': '?0', - 'Sec-Ch-Ua-Platform': '"Windows"', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'cross-site' - } - }, - url: function ({date, channel}) { - const startOfDay = dayjs(date).startOf('day').utc().unix() - const endOfDay = dayjs(date).endOf('day').utc().unix() - return `https://mwapi-prod.cosmotetvott.gr/api/v3.4/epg/listings/el?from=${startOfDay}&to=${endOfDay}&callSigns=${channel.site_id}&endingIncludedInRange=false` - }, - parser: function ({ date, content }) { - let programs = [] - const data = JSON.parse(content) - data.channels.forEach(channel => { - channel.items.forEach(item => { - const start = dayjs(item.startTime).utc().toISOString() - const stop = dayjs(item.endTime).utc().toISOString() - programs.push({ - title: item.title, - description: item.description || 'No description available', - category: item.qoe.genre, - image: item.thumbnails.standard, - start, - stop - }) - }) - }) - return programs - }, - async channels() { - const axios = require('axios') - try { - const response = await axios.get('https://mwapi-prod.cosmotetvott.gr/api/v3.4/epg/channels/all/el', { - headers: this.request.headers - }) - const data = response.data - - if (data && data.channels) { - return data.channels.map(item => ({ - lang: 'el', - site_id: item.callSign, - name: item.title, - //logo: item.logos.square - })) - } else { - console.error('Unexpected response structure:', data) - return [] - } - } catch (error) { - console.error('Error fetching channel data:', error) - return [] - } - } -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(customParseFormat) +dayjs.extend(timezone) + +module.exports = { + site: 'cosmotetv.gr', + days: 5, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1 hour + }, + method: 'GET', + headers: { + referer: 'https://www.cosmotetv.gr/', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36', + Accept: '*/*', + 'Accept-Language': 'en-US,en;q=0.9', + 'Accept-Encoding': 'gzip, deflate, br, zstd', + Origin: 'https://www.cosmotetv.gr', + 'Sec-Ch-Ua': '"Not.A/Brand";v="24", "Chromium";v="131", "Google Chrome";v="131"', + 'Sec-Ch-Ua-Mobile': '?0', + 'Sec-Ch-Ua-Platform': '"Windows"', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site' + } + }, + url: function ({ date, channel }) { + const startOfDay = dayjs(date).startOf('day').utc().unix() + const endOfDay = dayjs(date).endOf('day').utc().unix() + return `https://mwapi-prod.cosmotetvott.gr/api/v3.4/epg/listings/el?from=${startOfDay}&to=${endOfDay}&callSigns=${channel.site_id}&endingIncludedInRange=false` + }, + parser: function ({ content }) { + let programs = [] + const data = JSON.parse(content) + data.channels.forEach(channel => { + channel.items.forEach(item => { + const start = dayjs(item.startTime).utc().toISOString() + const stop = dayjs(item.endTime).utc().toISOString() + programs.push({ + title: item.title, + description: item.description || 'No description available', + category: item.qoe.genre, + image: item.thumbnails.standard, + start, + stop + }) + }) + }) + return programs + }, + async channels() { + const axios = require('axios') + try { + const response = await axios.get( + 'https://mwapi-prod.cosmotetvott.gr/api/v3.4/epg/channels/all/el', + { + headers: this.request.headers + } + ) + const data = response.data + + if (data && data.channels) { + return data.channels.map(item => ({ + lang: 'el', + site_id: item.callSign, + name: item.title + //logo: item.logos.square + })) + } else { + console.error('Unexpected response structure:', data) + return [] + } + } catch (error) { + console.error('Error fetching channel data:', error) + return [] + } + } +} diff --git a/sites/cosmotetv.gr/cosmotetv.gr.test.js b/sites/cosmotetv.gr/cosmotetv.gr.test.js index dc73ce7e..405e3d9b 100644 --- a/sites/cosmotetv.gr/cosmotetv.gr.test.js +++ b/sites/cosmotetv.gr/cosmotetv.gr.test.js @@ -1,81 +1,76 @@ -const { parser, url, channels } = require('./cosmotetv.gr.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -const timezone = require('dayjs/plugin/timezone') -const axios = require('axios') - -dayjs.extend(utc) -dayjs.extend(customParseFormat) -dayjs.extend(timezone) - -jest.mock('axios') - -const date = dayjs.utc('2024-12-26', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: 'vouli', xmltv_id: 'HellenicParliamentTV.gr' } - -const mockChannelData = { - "channels": [ - { - "guid": "XTV100000954", - "title": "ΒΟΥΛΗ HD", - "callSign": "vouli", - "logos": { - "square": "https://tr.static.cdn.cosmotetvott.gr/ote-prod/channel_logos/vouli1-normal.png", - "wide": "https://tr.static.cdn.cosmotetvott.gr/ote-prod/channel_logos/vouli1-wide.png" - } - } - ] -} - -const mockEpgData = { - "channels": [ - { - "items": [ - { - "startTime": "2024-12-26T23:00:00+00:00", - "endTime": "2024-12-27T00:00:00+00:00", - "title": "Τι Λέει ο Νόμος", - "description": "νημερωτική εκπομπή. Συζήτηση με τους εισηγητές των κομμάτων για το νομοθετικό έργο.", - "qoe": { - "genre": "Special" - }, - "thumbnails": { - "standard": "https://gr-ermou-prod-cache05.static.cdn.cosmotetvott.gr/ote-prod/70/280/040029714812000800_1734415727199.jpg" - } - } - ] - } - ] -} - -it('can generate valid url', () => { - const startOfDay = dayjs(date).startOf('day').utc().unix() - const endOfDay = dayjs(date).endOf('day').utc().unix() - expect(url({ date, channel })).toBe(`https://mwapi-prod.cosmotetvott.gr/api/v3.4/epg/listings/el?from=${startOfDay}&to=${endOfDay}&callSigns=${channel.site_id}&endingIncludedInRange=false`) -}) - -it('can parse response', () => { - const content = JSON.stringify(mockEpgData) - const result = parser({ date, content }).map(p => { - p.start = dayjs(p.start).toISOString() - p.stop = dayjs(p.stop).toISOString() - return p - }) - - expect(result).toMatchObject([ - { - title: "Τι Λέει ο Νόμος", - description: "νημερωτική εκπομπή. Συζήτηση με τους εισηγητές των κομμάτων για το νομοθετικό έργο.", - category: "Special", - image: "https://gr-ermou-prod-cache05.static.cdn.cosmotetvott.gr/ote-prod/70/280/040029714812000800_1734415727199.jpg", - start: "2024-12-26T23:00:00.000Z", - stop: "2024-12-27T00:00:00.000Z" - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ date, channel, content: '{"date":"2024-12-26","categories":[],"channels":[]}' }); - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./cosmotetv.gr.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(customParseFormat) +dayjs.extend(timezone) + +jest.mock('axios') + +const date = dayjs.utc('2024-12-26', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: 'vouli', xmltv_id: 'HellenicParliamentTV.gr' } + +const mockEpgData = { + channels: [ + { + items: [ + { + startTime: '2024-12-26T23:00:00+00:00', + endTime: '2024-12-27T00:00:00+00:00', + title: 'Τι Λέει ο Νόμος', + description: + 'νημερωτική εκπομπή. Συζήτηση με τους εισηγητές των κομμάτων για το νομοθετικό έργο.', + qoe: { + genre: 'Special' + }, + thumbnails: { + standard: + 'https://gr-ermou-prod-cache05.static.cdn.cosmotetvott.gr/ote-prod/70/280/040029714812000800_1734415727199.jpg' + } + } + ] + } + ] +} + +it('can generate valid url', () => { + const startOfDay = dayjs(date).startOf('day').utc().unix() + const endOfDay = dayjs(date).endOf('day').utc().unix() + expect(url({ date, channel })).toBe( + `https://mwapi-prod.cosmotetvott.gr/api/v3.4/epg/listings/el?from=${startOfDay}&to=${endOfDay}&callSigns=${channel.site_id}&endingIncludedInRange=false` + ) +}) + +it('can parse response', () => { + const content = JSON.stringify(mockEpgData) + const result = parser({ date, content }).map(p => { + p.start = dayjs(p.start).toISOString() + p.stop = dayjs(p.stop).toISOString() + return p + }) + + expect(result).toMatchObject([ + { + title: 'Τι Λέει ο Νόμος', + description: + 'νημερωτική εκπομπή. Συζήτηση με τους εισηγητές των κομμάτων για το νομοθετικό έργο.', + category: 'Special', + image: + 'https://gr-ermou-prod-cache05.static.cdn.cosmotetvott.gr/ote-prod/70/280/040029714812000800_1734415727199.jpg', + start: '2024-12-26T23:00:00.000Z', + stop: '2024-12-27T00:00:00.000Z' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: '{"date":"2024-12-26","categories":[],"channels":[]}' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/cubmu.com/cubmu.com.config.js b/sites/cubmu.com/cubmu.com.config.js index 6b408aed..ec288a36 100644 --- a/sites/cubmu.com/cubmu.com.config.js +++ b/sites/cubmu.com/cubmu.com.config.js @@ -1,102 +1,114 @@ -const dayjs = require('dayjs') -const timezone = require('dayjs/plugin/timezone') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(timezone) -dayjs.extend(utc) - -module.exports = { - site: 'cubmu.com', - days: 2, - url({ channel, date }) { - return `https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=${date.format('YYYY-MM-DD')}&channel_id=${channel.site_id}` - }, - parser({ content, channel }) { - const programs = [] - const items = parseItems(content) - items.forEach(item => { - programs.push({ - title: parseTitle(item), - description: parseDescription(item, channel.lang), - episode: parseEpisode(item), - start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString() - }) - }) - - return programs - }, - async channels({ lang = 'id' }) { - const axios = require('axios') - const cheerio = require('cheerio') - const result = await axios - .get('https://cubmu.com/live-tv') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(result) - - // retrieve service api data - const config = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} - - const options = { - headers: { - Origin: 'https://cubmu.com', - Referer: 'https://cubmu.com/live-tv' - } - } - // login to service bus - const token = await axios - .post(`https://servicebuss.transvision.co.id/tvs/login/external?email=${config.email}&password=${config.password}&deviceId=${config.deviceId}&deviceType=${config.deviceType}&deviceModel=${config.deviceModel}&deviceToken=&serial=&platformId=${config.platformId}`, options) - .then(response => response.data) - .catch(console.error) - // list channels - const subscribedChannels = await axios - .post(`https://servicebuss.transvision.co.id/tvs/subscribe_product/list?platformId=${config.platformId}`, options) - .then(response => response.data) - .catch(console.error) - - const channels = [] - const included = [] - if (Array.isArray(subscribedChannels.channelPackageList)) { - subscribedChannels.channelPackageList.forEach(pkg => { - pkg.channelList.forEach(channel => { - if (included.indexOf(channel.id) < 0) { - included.push(channel.id) - channels.push({ - lang, - site_id: channel.id, - name: channel.name - }) - } - }) - }) - } - - return channels - } -} - -function parseItems(content) { - return content ? JSON.parse(content.trim()).result || [] : [] -} - -function parseTitle(item) { - return item.scehedule_title -} - -function parseDescription(item, lang = 'id') { - return lang === 'id' ? item.schedule_json.primarySynopsis : item.schedule_json.secondarySynopsis -} - -function parseEpisode(item) { - return item.schedule_json.episodeName -} - -function parseStart(item) { - return dayjs.tz(item.schedule_date, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') -} - -function parseStop(item) { - return dayjs.tz([item.schedule_date.split(' ')[0], item.schedule_end_time].join(' '), 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') -} +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(timezone) +dayjs.extend(utc) + +module.exports = { + site: 'cubmu.com', + days: 2, + url({ channel, date }) { + return `https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=${date.format( + 'YYYY-MM-DD' + )}&channel_id=${channel.site_id}` + }, + parser({ content, channel }) { + const programs = [] + const items = parseItems(content) + items.forEach(item => { + programs.push({ + title: parseTitle(item), + description: parseDescription(item, channel.lang), + episode: parseEpisode(item), + start: parseStart(item).toISOString(), + stop: parseStop(item).toISOString() + }) + }) + + return programs + }, + async channels({ lang = 'id' }) { + const axios = require('axios') + const cheerio = require('cheerio') + const result = await axios + .get('https://cubmu.com/live-tv') + .then(response => response.data) + .catch(console.error) + + const $ = cheerio.load(result) + + // retrieve service api data + const config = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} + + const options = { + headers: { + Origin: 'https://cubmu.com', + Referer: 'https://cubmu.com/live-tv' + } + } + // login to service bus + await axios + .post( + `https://servicebuss.transvision.co.id/tvs/login/external?email=${config.email}&password=${config.password}&deviceId=${config.deviceId}&deviceType=${config.deviceType}&deviceModel=${config.deviceModel}&deviceToken=&serial=&platformId=${config.platformId}`, + options + ) + .then(response => response.data) + .catch(console.error) + // list channels + const subscribedChannels = await axios + .post( + `https://servicebuss.transvision.co.id/tvs/subscribe_product/list?platformId=${config.platformId}`, + options + ) + .then(response => response.data) + .catch(console.error) + + const channels = [] + const included = [] + if (Array.isArray(subscribedChannels.channelPackageList)) { + subscribedChannels.channelPackageList.forEach(pkg => { + pkg.channelList.forEach(channel => { + if (included.indexOf(channel.id) < 0) { + included.push(channel.id) + channels.push({ + lang, + site_id: channel.id, + name: channel.name + }) + } + }) + }) + } + + return channels + } +} + +function parseItems(content) { + return content ? JSON.parse(content.trim()).result || [] : [] +} + +function parseTitle(item) { + return item.scehedule_title +} + +function parseDescription(item, lang = 'id') { + return lang === 'id' ? item.schedule_json.primarySynopsis : item.schedule_json.secondarySynopsis +} + +function parseEpisode(item) { + return item.schedule_json.episodeName +} + +function parseStart(item) { + return dayjs.tz(item.schedule_date, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') +} + +function parseStop(item) { + return dayjs.tz( + [item.schedule_date.split(' ')[0], item.schedule_end_time].join(' '), + 'YYYY-MM-DD HH:mm:ss', + 'Asia/Jakarta' + ) +} diff --git a/sites/cubmu.com/cubmu.com.test.js b/sites/cubmu.com/cubmu.com.test.js index 38bbf099..cdf5cde3 100644 --- a/sites/cubmu.com/cubmu.com.test.js +++ b/sites/cubmu.com/cubmu.com.test.js @@ -1,47 +1,47 @@ -const { url, parser } = require('./cubmu.com.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -dayjs.extend(utc) - -const date = dayjs.utc('2023-11-05', 'DD/MM/YYYY').startOf('d') -const channel = { site_id: '4028c68574537fcd0174be43042758d8', xmltv_id: 'TransTV.id', lang: 'id' } -const channelEn = Object.assign({}, channel, { lang: 'en' }) - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - 'https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=2023-11-05&channel_id=4028c68574537fcd0174be43042758d8' - ) -}) - -it('can parse response', () => { - const content = - '{"result":[{"channel_id":"4028c68574537fcd0174be43042758d8","channel_name":"Trans TV","scehedule_title":"CNN Tech News","schedule_date":"2023-11-05 01:30:00","schedule_end_time":"02:00:00","schedule_json":{"availability":0,"channelId":"4028c68574537fcd0174be43042758d8","channelName":"Trans TV","duration":1800,"editable":true,"episodeName":"","imageUrl":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/458x640","imageUrlWide":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/320x180","name":"CNN Tech News","ottImageUrl":"","primarySynopsis":"CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.","scheduleId":"4028c6858b8b3621018b9330e3701a7e","scheduleTime":"18:30:00","secondarySynopsis":"CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.","startDt":"20231104183000","url":""},"schedule_start_time":"01:30:00"}]}' - - const idResults = parser({ content, channel }) - expect(idResults).toMatchObject([ - { - start: '2023-11-04T18:30:00.000Z', - stop: '2023-11-04T19:00:00.000Z', - title: 'CNN Tech News', - description: - 'CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.' - } - ]) - - const enResults = parser({ content, channel: channelEn }) - expect(enResults).toMatchObject([ - { - start: '2023-11-04T18:30:00.000Z', - stop: '2023-11-04T19:00:00.000Z', - title: 'CNN Tech News', - description: - 'CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.' - } - ]) -}) - -it('can handle empty guide', () => { - const results = parser({ content: '' }) - - expect(results).toMatchObject([]) -}) +const { url, parser } = require('./cubmu.com.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +dayjs.extend(utc) + +const date = dayjs.utc('2023-11-05', 'DD/MM/YYYY').startOf('d') +const channel = { site_id: '4028c68574537fcd0174be43042758d8', xmltv_id: 'TransTV.id', lang: 'id' } +const channelEn = Object.assign({}, channel, { lang: 'en' }) + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe( + 'https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=2023-11-05&channel_id=4028c68574537fcd0174be43042758d8' + ) +}) + +it('can parse response', () => { + const content = + '{"result":[{"channel_id":"4028c68574537fcd0174be43042758d8","channel_name":"Trans TV","scehedule_title":"CNN Tech News","schedule_date":"2023-11-05 01:30:00","schedule_end_time":"02:00:00","schedule_json":{"availability":0,"channelId":"4028c68574537fcd0174be43042758d8","channelName":"Trans TV","duration":1800,"editable":true,"episodeName":"","imageUrl":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/458x640","imageUrlWide":"https://cdnjkt2.transvision.co.id:1001/catchup/schedule/thumbnail/4028c68574537fcd0174be43042758d8/4028c6858b8b3621018b9330e3701a7e/320x180","name":"CNN Tech News","ottImageUrl":"","primarySynopsis":"CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.","scheduleId":"4028c6858b8b3621018b9330e3701a7e","scheduleTime":"18:30:00","secondarySynopsis":"CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.","startDt":"20231104183000","url":""},"schedule_start_time":"01:30:00"}]}' + + const idResults = parser({ content, channel }) + expect(idResults).toMatchObject([ + { + start: '2023-11-04T18:30:00.000Z', + stop: '2023-11-04T19:00:00.000Z', + title: 'CNN Tech News', + description: + 'CNN Indonesia Tech News adalah berita teknologi yang membawa pemirsa ke dunia teknologi yang penuh dengan informasi, pendidikan, hiburan sampai informasi kesehatan terkini.' + } + ]) + + const enResults = parser({ content, channel: channelEn }) + expect(enResults).toMatchObject([ + { + start: '2023-11-04T18:30:00.000Z', + stop: '2023-11-04T19:00:00.000Z', + title: 'CNN Tech News', + description: + 'CNN Indonesia Tech News is tech news brings viewers into the world of technology that provides information, education, entertainment to the latest health information.' + } + ]) +}) + +it('can handle empty guide', () => { + const results = parser({ content: '' }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/dens.tv/dens.tv.config.js b/sites/dens.tv/dens.tv.config.js index 4ac40aa3..25cd3036 100644 --- a/sites/dens.tv/dens.tv.config.js +++ b/sites/dens.tv/dens.tv.config.js @@ -13,9 +13,9 @@ module.exports = { site: 'dens.tv', days: 2, url({ channel, date }) { - return `https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=${date.format('YYYY-MM-DD')}&id_channel=${ - channel.site_id - }&app_type=10` + return `https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=${date.format( + 'YYYY-MM-DD' + )}&id_channel=${channel.site_id}&app_type=10` }, parser({ content }) { // parsing @@ -25,8 +25,9 @@ module.exports = { if (Array.isArray(response?.data)) { response.data.forEach(item => { const title = item.title - const [, , , season, , , episode] = title.match(/( (Season |Season|S)(\d+))?( (Episode|Ep) (\d+))/) || - [null, null, null, null, null, null, null] + const [, , , season, , , episode] = title.match( + /( (Season |Season|S)(\d+))?( (Episode|Ep) (\d+))/ + ) || [null, null, null, null, null, null, null] programs.push({ title, description: item.description, @@ -52,7 +53,7 @@ module.exports = { const channels = [] for (const id_category of Object.values(categories)) { const data = await axios - .get(`https://www.dens.tv/api/dens3/tv/TvChannels/listByCategory`, { + .get('https://www.dens.tv/api/dens3/tv/TvChannels/listByCategory', { params: { id_category } }) .then(r => r.data) diff --git a/sites/dens.tv/dens.tv.test.js b/sites/dens.tv/dens.tv.test.js index 3417000e..79883d0f 100644 --- a/sites/dens.tv/dens.tv.test.js +++ b/sites/dens.tv/dens.tv.test.js @@ -10,7 +10,9 @@ const date = dayjs.utc('2024-11-24').startOf('d') const channel = { site_id: '38', xmltv_id: 'AniplusAsia.sg', lang: 'id' } it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=2024-11-24&id_channel=38&app_type=10') + expect(url({ channel, date })).toBe( + 'https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=2024-11-24&id_channel=38&app_type=10' + ) }) it('can parse response', () => { diff --git a/sites/digiturk.com.tr/digiturk.com.tr.config.js b/sites/digiturk.com.tr/digiturk.com.tr.config.js index 03280f4c..4dba0999 100644 --- a/sites/digiturk.com.tr/digiturk.com.tr.config.js +++ b/sites/digiturk.com.tr/digiturk.com.tr.config.js @@ -65,7 +65,7 @@ module.exports = { const cheerio = require('cheerio') const data = await axios - .get(`https://www.digiturk.com.tr/`, { + .get('https://www.digiturk.com.tr/', { headers: { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36' diff --git a/sites/dishtv.in/dishtv.in.config.js b/sites/dishtv.in/dishtv.in.config.js index 6a9d3f18..8c2bd878 100644 --- a/sites/dishtv.in/dishtv.in.config.js +++ b/sites/dishtv.in/dishtv.in.config.js @@ -60,7 +60,7 @@ module.exports = { $('.pgrid').each((i, el) => { const onclick = $(el).find('.chnl-logo').attr('onclick') const number = $(el).find('.cnl-fav > a > span').text().trim() - const [, name, site_id] = onclick.match(/ShowChannelGuid\('([^']+)','([^']+)'/) || [ + const [, , site_id] = onclick.match(/ShowChannelGuid\('([^']+)','([^']+)'/) || [ null, '', '' diff --git a/sites/guida.tv/guida.tv.config.js b/sites/guida.tv/guida.tv.config.js index 44402d16..0c14a1cd 100644 --- a/sites/guida.tv/guida.tv.config.js +++ b/sites/guida.tv/guida.tv.config.js @@ -49,7 +49,7 @@ module.exports = { const channels = [] for (let provider of providers) { const data = await axios - .post(`https://www.guida.tv/guide/schedule`, null, { + .post('https://www.guida.tv/guide/schedule', null, { params: { provider, region: 'Italy', @@ -81,7 +81,7 @@ module.exports = { } } -function parseStart($item, date, channel) { +function parseStart($item, date) { const timeString = $item('td:eq(0)').text().trim() const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` diff --git a/sites/guidatv.sky.it/guidatv.sky.it.config.js b/sites/guidatv.sky.it/guidatv.sky.it.config.js index 834deab4..ddafb89d 100644 --- a/sites/guidatv.sky.it/guidatv.sky.it.config.js +++ b/sites/guidatv.sky.it/guidatv.sky.it.config.js @@ -35,7 +35,7 @@ module.exports = { const cheerio = require('cheerio') const data = await axios - .get(`https://guidatv.sky.it/canali`) + .get('https://guidatv.sky.it/canali') .then(r => r.data) .catch(console.log) diff --git a/sites/hoy.tv/hoy.tv.config.js b/sites/hoy.tv/hoy.tv.config.js index d5931ee1..30cc2b82 100644 --- a/sites/hoy.tv/hoy.tv.config.js +++ b/sites/hoy.tv/hoy.tv.config.js @@ -1,63 +1,63 @@ -const axios = require('axios') -const convert = require('xml-js') -const dayjs = require('dayjs') -const timezone = require('dayjs/plugin/timezone') - -dayjs.extend(timezone) - -module.exports = { - site: 'hoy.tv', - days: 2, - request: { - cache: { - ttl: 60 * 60 * 1000 // 1h - } - }, - url: function ({ channel, date }) { - return `https://epg-file.hoy.tv/hoy/OTT${channel.site_id}${date.format('YYYYMMDD')}.xml` - }, - parser({ content, channel, date }) { - const data = convert.xml2js(content, { - compact: true, - ignoreDeclaration: true, - ignoreAttributes: true - }) - - const programs = [] - - for (let item of data.ProgramGuide.Channel.EpgItem) { - const start = dayjs.tz(item.EpgStartDateTime._text, 'YYYY-MM-DD HH:mm:ss', 'Asia/Hong_Kong') - - if (! date.isSame(start, 'day')) { - continue - } - - const epIndex = item.EpisodeInfo.EpisodeIndex._text - const subtitle = parseInt(epIndex) > 0 ? `第${epIndex}集` : undefined - - programs.push({ - title: `${item.ComScore.ns_st_pr._text}${item.EpgOtherInfo?._text || ''}`, - sub_title: subtitle, - description: item.EpisodeInfo.EpisodeLongDescription._text, - start, - stop: dayjs.tz(item.EpgEndDateTime._text, 'YYYY-MM-DD HH:mm:ss', 'Asia/Hong_Kong'), - }) - } - - return programs - }, - async channels({ lang }) { - const data = await axios - .get('https://api2.hoy.tv/api/v2/a/channel') - .then(r => r.data) - .catch(console.error) - - return data.data.map(c => { - return { - site_id: c.videos.id, - name: c.name.zh_hk, - lang: 'zh', - } - }) - } -} +const axios = require('axios') +const convert = require('xml-js') +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(timezone) + +module.exports = { + site: 'hoy.tv', + days: 2, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1h + } + }, + url: function ({ channel, date }) { + return `https://epg-file.hoy.tv/hoy/OTT${channel.site_id}${date.format('YYYYMMDD')}.xml` + }, + parser({ content, date }) { + const data = convert.xml2js(content, { + compact: true, + ignoreDeclaration: true, + ignoreAttributes: true + }) + + const programs = [] + + for (let item of data.ProgramGuide.Channel.EpgItem) { + const start = dayjs.tz(item.EpgStartDateTime._text, 'YYYY-MM-DD HH:mm:ss', 'Asia/Hong_Kong') + + if (!date.isSame(start, 'day')) { + continue + } + + const epIndex = item.EpisodeInfo.EpisodeIndex._text + const subtitle = parseInt(epIndex) > 0 ? `第${epIndex}集` : undefined + + programs.push({ + title: `${item.ComScore.ns_st_pr._text}${item.EpgOtherInfo?._text || ''}`, + sub_title: subtitle, + description: item.EpisodeInfo.EpisodeLongDescription._text, + start, + stop: dayjs.tz(item.EpgEndDateTime._text, 'YYYY-MM-DD HH:mm:ss', 'Asia/Hong_Kong') + }) + } + + return programs + }, + async channels() { + const data = await axios + .get('https://api2.hoy.tv/api/v2/a/channel') + .then(r => r.data) + .catch(console.error) + + return data.data.map(c => { + return { + site_id: c.videos.id, + name: c.name.zh_hk, + lang: 'zh' + } + }) + } +} diff --git a/sites/hoy.tv/hoy.tv.test.js b/sites/hoy.tv/hoy.tv.test.js index 1a751021..155c2963 100644 --- a/sites/hoy.tv/hoy.tv.test.js +++ b/sites/hoy.tv/hoy.tv.test.js @@ -1,116 +1,115 @@ -const { parser, url } = require('./hoy.tv.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -jest.mock('axios') - -const date = dayjs.utc('2024-09-13', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '76', - xmltv_id: 'HOYIBC.hk', - lang: 'zh' -} -const content = ` - - - - 2024-09-13 11:30:00 - 2024-09-13 12:30:00 - [PG] - false - false - 2024-09-27 11:30:00 - - 0 - - 0 - - http://tv.fantv.hk/images/thumbnail_1920_1080_fantv.jpg - - - EQ00135 - 46 - 點講都係一家人 - - http://tv.fantv.hk/images/nosuchthumbnail.jpg - - - - 點講都係一家人 - 0 - EQ00135 - 點講都係一家人 Episode 46 - 1 - 20240913 - 1130 - 0001 - 3704000 - - - - 2024-09-13 12:30:00 - 2024-09-13 13:30:00 - - false - false - 2024-09-27 12:30:00 - - 0 - - 0 - - http://tv.fantv.hk/images/thumbnail_1920_1080_fantv.jpg - - - ED00311 - 0 - 麝香之路 - Ep. 2 .The Secret of disappeared kingdom.shows the mysterious disappearance of the ancient Tibetan kingdom which gained world - http://tv.fantv.hk/images/nosuchthumbnail.jpg - - - - 麝香之路 - 0 - ED00311 - 麝香之路 2024-09-13 - 1 - 20240913 - 1230 - 0001 - 3704000 - - - -` - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - 'https://epg-file.hoy.tv/hoy/OTT7620240913.xml' - ) -}) - -it('can parse response', () => { - const result = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - start: '2024-09-13T03:30:00.000Z', - stop: '2024-09-13T04:30:00.000Z', - title: '點講都係一家人[PG]', - sub_title: '第46集', - }, - { - start: '2024-09-13T04:30:00.000Z', - stop: '2024-09-13T05:30:00.000Z', - title: '麝香之路', - description: 'Ep. 2 .The Secret of disappeared kingdom.shows the mysterious disappearance of the ancient Tibetan kingdom which gained world', - } - ]) -}) +const { parser, url } = require('./hoy.tv.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +jest.mock('axios') + +const date = dayjs.utc('2024-09-13', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: '76', + xmltv_id: 'HOYIBC.hk', + lang: 'zh' +} +const content = ` + + + + 2024-09-13 11:30:00 + 2024-09-13 12:30:00 + [PG] + false + false + 2024-09-27 11:30:00 + + 0 + + 0 + + http://tv.fantv.hk/images/thumbnail_1920_1080_fantv.jpg + + + EQ00135 + 46 + 點講都係一家人 + + http://tv.fantv.hk/images/nosuchthumbnail.jpg + + + + 點講都係一家人 + 0 + EQ00135 + 點講都係一家人 Episode 46 + 1 + 20240913 + 1130 + 0001 + 3704000 + + + + 2024-09-13 12:30:00 + 2024-09-13 13:30:00 + + false + false + 2024-09-27 12:30:00 + + 0 + + 0 + + http://tv.fantv.hk/images/thumbnail_1920_1080_fantv.jpg + + + ED00311 + 0 + 麝香之路 + Ep. 2 .The Secret of disappeared kingdom.shows the mysterious disappearance of the ancient Tibetan kingdom which gained world + http://tv.fantv.hk/images/nosuchthumbnail.jpg + + + + 麝香之路 + 0 + ED00311 + 麝香之路 2024-09-13 + 1 + 20240913 + 1230 + 0001 + 3704000 + + + +` + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe('https://epg-file.hoy.tv/hoy/OTT7620240913.xml') +}) + +it('can parse response', () => { + const result = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + start: '2024-09-13T03:30:00.000Z', + stop: '2024-09-13T04:30:00.000Z', + title: '點講都係一家人[PG]', + sub_title: '第46集' + }, + { + start: '2024-09-13T04:30:00.000Z', + stop: '2024-09-13T05:30:00.000Z', + title: '麝香之路', + description: + 'Ep. 2 .The Secret of disappeared kingdom.shows the mysterious disappearance of the ancient Tibetan kingdom which gained world' + } + ]) +}) diff --git a/sites/i.mjh.nz/i.mjh.nz.config.js b/sites/i.mjh.nz/i.mjh.nz.config.js index f0a12a69..f29316a0 100644 --- a/sites/i.mjh.nz/i.mjh.nz.config.js +++ b/sites/i.mjh.nz/i.mjh.nz.config.js @@ -172,14 +172,17 @@ function parseItems(content, channel, date) { if (!data || !Array.isArray(data.programs)) return [] return data.programs - .filter(p => p.channel === site_id && dayjs(p.start, 'YYYYMMDDHHmmss ZZ').isBetween(curr_day, next_day)) + .filter( + p => + p.channel === site_id && dayjs(p.start, 'YYYYMMDDHHmmss ZZ').isBetween(curr_day, next_day) + ) .map(p => { if (Array.isArray(p.date) && p.date.length) { p.date = p.date[0] } return p }) - } catch (error) { + } catch { return [] } } diff --git a/sites/ipko.tv/ipko.tv.config.js b/sites/ipko.tv/ipko.tv.config.js index 6658ee01..55803f1e 100644 --- a/sites/ipko.tv/ipko.tv.config.js +++ b/sites/ipko.tv/ipko.tv.config.js @@ -1,73 +1,80 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'ipko.tv', - timezone: 'Europe/Belgrade', - days: 5, - url({ date, channel }) { return 'https://stargate.ipko.tv/api/titan.tv.WebEpg/GetWebEpgData' }, - request: { - method: 'POST', - headers: { - 'Host': 'stargate.ipko.tv', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0', - 'Accept': 'application/json, text/plain, */*', - 'Accept-Language': 'nl,en-US;q=0.7,en;q=0.3', - 'Content-Type': 'application/json', - 'X-AppLayout': '1', - 'x-language': 'sq', - 'Origin': 'https://ipko.tv', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'cross-site', - 'Sec-GPC': '1', - 'Connection': 'keep-alive' - }, - data({ channel, date }) { - const todayEpoch = date.startOf('day').unix(); - const nextDayEpoch = date.add(1, 'day').startOf('day').unix(); - return JSON.stringify({ - ch_ext_id: channel.site_id, - from: todayEpoch, - to: nextDayEpoch - }) - } - }, - parser: function ({ content }) { - const programs = []; - const data = JSON.parse(content); - data.shows.forEach(show => { - const start = dayjs.unix(show.show_start).utc(); - const stop = dayjs.unix(show.show_end).utc(); - const programData = { - title: show.title, - description: show.summary || 'No description available', - start: start.toISOString(), - stop: stop.toISOString(), - thumbnail: show.thumbnail - } - programs.push(programData) - }) - return programs - }, - async channels() { - const response = await axios.post('https://stargate.ipko.tv/api/titan.tv.WebEpg/ZapList', JSON.stringify({ includeRadioStations: true }), { - headers: this.request.headers - }); - - const data = response.data.data; - return data.map(item => ({ - lang: 'sq', - name: String(item.channel.title), - site_id: String(item.channel.id), - //logo: String(item.channel.logo) - })) - } -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'ipko.tv', + timezone: 'Europe/Belgrade', + days: 5, + url() { + return 'https://stargate.ipko.tv/api/titan.tv.WebEpg/GetWebEpgData' + }, + request: { + method: 'POST', + headers: { + Host: 'stargate.ipko.tv', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0', + Accept: 'application/json, text/plain, */*', + 'Accept-Language': 'nl,en-US;q=0.7,en;q=0.3', + 'Content-Type': 'application/json', + 'X-AppLayout': '1', + 'x-language': 'sq', + Origin: 'https://ipko.tv', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-GPC': '1', + Connection: 'keep-alive' + }, + data({ channel, date }) { + const todayEpoch = date.startOf('day').unix() + const nextDayEpoch = date.add(1, 'day').startOf('day').unix() + return JSON.stringify({ + ch_ext_id: channel.site_id, + from: todayEpoch, + to: nextDayEpoch + }) + } + }, + parser: function ({ content }) { + const programs = [] + const data = JSON.parse(content) + data.shows.forEach(show => { + const start = dayjs.unix(show.show_start).utc() + const stop = dayjs.unix(show.show_end).utc() + const programData = { + title: show.title, + description: show.summary || 'No description available', + start: start.toISOString(), + stop: stop.toISOString(), + thumbnail: show.thumbnail + } + programs.push(programData) + }) + return programs + }, + async channels() { + const response = await axios.post( + 'https://stargate.ipko.tv/api/titan.tv.WebEpg/ZapList', + JSON.stringify({ includeRadioStations: true }), + { + headers: this.request.headers + } + ) + + const data = response.data.data + return data.map(item => ({ + lang: 'sq', + name: String(item.channel.title), + site_id: String(item.channel.id) + //logo: String(item.channel.logo) + })) + } +} diff --git a/sites/ipko.tv/ipko.tv.test.js b/sites/ipko.tv/ipko.tv.test.js index 2064eeb0..19a83e86 100644 --- a/sites/ipko.tv/ipko.tv.test.js +++ b/sites/ipko.tv/ipko.tv.test.js @@ -1,115 +1,111 @@ -const { parser, url } = require('./ipko.tv.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2024-12-24', 'YYYY-MM-DD').startOf('day') -const channel = { - site_id: 'ipko-promo', - xmltv_id: 'IPKOPROMO' -} - -it('can generate valid url', () => { - expect(url({ date, channel })).toBe('https://stargate.ipko.tv/api/titan.tv.WebEpg/GetWebEpgData') -}) - -it('can parse response', () => { - const content = ` - { - "shows": [ - { - "title": "IPKO Promo", - "show_start": 1735012800, - "show_end": 1735020000, - "timestamp": "5:00 - 7:00", - "show_id": "EPG_TvProfil_IPKOPROMO_296105567", - "thumbnail": "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg", - "is_adult": false, - "friendly_id": "ipko_promo_4cf3", - "pg": "", - "genres": [], - "year": 0, - "summary": "", - "categories": "Other", - "stb_only": false, - "is_live": false, - "original_title": "IPKO Promo" - }, - { - "title": "IPKO Promo", - "show_start": 1735020000, - "show_end": 1735027200, - "timestamp": "7:00 - 9:00", - "show_id": "EPG_TvProfil_IPKOPROMO_296105568", - "thumbnail": "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg", - "is_adult": false, - "friendly_id": "ipko_promo_416b", - "pg": "", - "genres": [], - "year": 0, - "summary": "", - "categories": "Other", - "stb_only": false, - "is_live": false, - "original_title": "IPKO Promo" - }, - { - "title": "IPKO Promo", - "show_start": 1735027200, - "show_end": 1735034400, - "timestamp": "9:00 - 11:00", - "show_id": "EPG_TvProfil_IPKOPROMO_296105569", - "thumbnail": "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg", - "is_adult": false, - "friendly_id": "ipko_promo_2e23", - "pg": "", - "genres": [], - "year": 0, - "summary": "", - "categories": "Other", - "stb_only": false, - "is_live": false, - "original_title": "IPKO Promo" - } - ] - }` - - const result = parser({ content, channel }).map(p => { - p.start = p.start - p.stop = p.stop - return p - }) - - expect(result).toMatchObject([ - { - title: "IPKO Promo", - description: "No description available", - start: "2024-12-24T04:00:00.000Z", - stop: "2024-12-24T06:00:00.000Z", - thumbnail: "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg" - }, - { - title: "IPKO Promo", - description: "No description available", - start: "2024-12-24T06:00:00.000Z", - stop: "2024-12-24T08:00:00.000Z", - thumbnail: "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg" - }, - { - title: "IPKO Promo", - description: "No description available", - start: "2024-12-24T08:00:00.000Z", - stop: "2024-12-24T10:00:00.000Z", - thumbnail: "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg" - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - content: '{"shows":[]}' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./ipko.tv.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2024-12-24', 'YYYY-MM-DD').startOf('day') +const channel = { + site_id: 'ipko-promo', + xmltv_id: 'IPKOPROMO' +} + +it('can generate valid url', () => { + expect(url({ date, channel })).toBe('https://stargate.ipko.tv/api/titan.tv.WebEpg/GetWebEpgData') +}) + +it('can parse response', () => { + const content = ` + { + "shows": [ + { + "title": "IPKO Promo", + "show_start": 1735012800, + "show_end": 1735020000, + "timestamp": "5:00 - 7:00", + "show_id": "EPG_TvProfil_IPKOPROMO_296105567", + "thumbnail": "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg", + "is_adult": false, + "friendly_id": "ipko_promo_4cf3", + "pg": "", + "genres": [], + "year": 0, + "summary": "", + "categories": "Other", + "stb_only": false, + "is_live": false, + "original_title": "IPKO Promo" + }, + { + "title": "IPKO Promo", + "show_start": 1735020000, + "show_end": 1735027200, + "timestamp": "7:00 - 9:00", + "show_id": "EPG_TvProfil_IPKOPROMO_296105568", + "thumbnail": "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg", + "is_adult": false, + "friendly_id": "ipko_promo_416b", + "pg": "", + "genres": [], + "year": 0, + "summary": "", + "categories": "Other", + "stb_only": false, + "is_live": false, + "original_title": "IPKO Promo" + }, + { + "title": "IPKO Promo", + "show_start": 1735027200, + "show_end": 1735034400, + "timestamp": "9:00 - 11:00", + "show_id": "EPG_TvProfil_IPKOPROMO_296105569", + "thumbnail": "https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg", + "is_adult": false, + "friendly_id": "ipko_promo_2e23", + "pg": "", + "genres": [], + "year": 0, + "summary": "", + "categories": "Other", + "stb_only": false, + "is_live": false, + "original_title": "IPKO Promo" + } + ] + }` + + const result = parser({ content, channel }) + + expect(result).toMatchObject([ + { + title: 'IPKO Promo', + description: 'No description available', + start: '2024-12-24T04:00:00.000Z', + stop: '2024-12-24T06:00:00.000Z', + thumbnail: 'https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg' + }, + { + title: 'IPKO Promo', + description: 'No description available', + start: '2024-12-24T06:00:00.000Z', + stop: '2024-12-24T08:00:00.000Z', + thumbnail: 'https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg' + }, + { + title: 'IPKO Promo', + description: 'No description available', + start: '2024-12-24T08:00:00.000Z', + stop: '2024-12-24T10:00:00.000Z', + thumbnail: 'https://vimg.ipko.tv/mtcms/18/2/1/1821cc68-a9bf-4733-b1af-9a5d80163b78.jpg' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: '{"shows":[]}' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/m.tv.sms.cz/m.tv.sms.cz.config.js b/sites/m.tv.sms.cz/m.tv.sms.cz.config.js index b3dcd9c2..92861212 100644 --- a/sites/m.tv.sms.cz/m.tv.sms.cz.config.js +++ b/sites/m.tv.sms.cz/m.tv.sms.cz.config.js @@ -38,7 +38,7 @@ module.exports = { async channels() { const axios = require('axios') const data = await axios - .get(`https://m.tv.sms.cz/?zmen_stanice=true`) + .get('https://m.tv.sms.cz/?zmen_stanice=true') .then(r => r.data) .catch(console.log) diff --git a/sites/magticom.ge/magticom.ge.config.js b/sites/magticom.ge/magticom.ge.config.js index 0e5a475d..2a936ba1 100644 --- a/sites/magticom.ge/magticom.ge.config.js +++ b/sites/magticom.ge/magticom.ge.config.js @@ -77,8 +77,8 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (error) { - console.log(error.message) + } catch { + return [] } if (!data || !Array.isArray(data)) return [] diff --git a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js index c9723812..3dea9ef4 100644 --- a/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js +++ b/sites/maxtv.hrvatskitelekom.hr/maxtv.hrvatskitelekom.hr.config.js @@ -32,7 +32,7 @@ module.exports = { async channels() { const axios = require('axios') const data = await axios - .get(`https://player.maxtvtogo.tportal.hr:8082/OTT4Proxy/proxy/epg/channels`) + .get('https://player.maxtvtogo.tportal.hr:8082/OTT4Proxy/proxy/epg/channels') .then(r => r.data) .catch(console.log) diff --git a/sites/mediaklikk.hu/mediaklikk.hu.config.js b/sites/mediaklikk.hu/mediaklikk.hu.config.js index 07d17a30..673fb4b3 100644 --- a/sites/mediaklikk.hu/mediaklikk.hu.config.js +++ b/sites/mediaklikk.hu/mediaklikk.hu.config.js @@ -56,7 +56,7 @@ function parseStop($item) { try { return dayjs(timeString, 'YYYY-MM-DD HH:mm:ssZZ') - } catch (err) { + } catch { return null } } diff --git a/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.config.js b/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.config.js index 9997eda8..3a168953 100644 --- a/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.config.js +++ b/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.config.js @@ -1,93 +1,97 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -const timezone = require('dayjs/plugin/timezone') - -dayjs.extend(utc) -dayjs.extend(customParseFormat) -dayjs.extend(timezone) - -module.exports = { - site: 'mediasetinfinity.mediaset.it', - days: 2, - url: function ({date, channel}) { - // Get the epoch timestamp - const todayEpoch = date.startOf('day').utc().valueOf() - // Get the epoch timestamp for the next day - const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf() - return `https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=${todayEpoch}~${nextDayEpoch}&byCallSign=${channel.site_id}` - }, - parser: function ({content}) { - const programs = [] - const data = JSON.parse(content) - - if (!data.response || !data.response.entries || !data.response.entries[0] || !data.response.entries[0].listings) { - // If the structure is not as expected, return an empty array - return programs - } - - const listings = data.response.entries[0].listings - - listings.forEach((listing) => { - const title = listing.mediasetlisting$epgTitle - const subTitle = listing.program.title - const season = parseSeason(listing) - const episode = parseEpisode(listing) - - - if (listing.program.title && listing.startTime && listing.endTime) { - programs.push({ - title: title || subTitle, - sub_title: title && title != subTitle ? subTitle : null, - description: listing.program.description || null, - category: listing.program.mediasetprogram$skyGenre || null, - season: episode && !season ? '0' : season, - episode: episode, - start: parseTime(listing.startTime), - stop: parseTime(listing.endTime), - image: getMaxResolutionThumbnails(listing) - }) - } - }) - - return programs - } -} - - -function parseTime(timestamp) { - return dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm') -} - -function parseSeason(item) { - if (!item.mediasetlisting$shortDescription) return null - const season = item.mediasetlisting$shortDescription.match(/S(\d+)\s/) - return season ? season[1] : null -} - -function parseEpisode(item) { - if (!item.mediasetlisting$shortDescription) return null - const episode = item.mediasetlisting$shortDescription.match(/Ep(\d+)\s/) - return episode ? episode[1] : null -} - -function getMaxResolutionThumbnails(item) { - const thumbnails = item.program.thumbnails || null - const maxResolutionThumbnails = {} - - for (const key in thumbnails) { - const type = key.split('-')[0] // Estrarre il tipo di thumbnail - const {width, height, url, title} = thumbnails[key] - - if (!maxResolutionThumbnails[type] || - (width * height > maxResolutionThumbnails[type].width * maxResolutionThumbnails[type].height)) { - maxResolutionThumbnails[type] = {width, height, url, title} - } - } - if (maxResolutionThumbnails.image_keyframe_poster) - return maxResolutionThumbnails.image_keyframe_poster.url - else if (maxResolutionThumbnails.image_header_poster) - return maxResolutionThumbnails.image_header_poster.url - else - return null -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(customParseFormat) +dayjs.extend(timezone) + +module.exports = { + site: 'mediasetinfinity.mediaset.it', + days: 2, + url: function ({ date, channel }) { + // Get the epoch timestamp + const todayEpoch = date.startOf('day').utc().valueOf() + // Get the epoch timestamp for the next day + const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf() + return `https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=${todayEpoch}~${nextDayEpoch}&byCallSign=${channel.site_id}` + }, + parser: function ({ content }) { + const programs = [] + const data = JSON.parse(content) + + if ( + !data.response || + !data.response.entries || + !data.response.entries[0] || + !data.response.entries[0].listings + ) { + // If the structure is not as expected, return an empty array + return programs + } + + const listings = data.response.entries[0].listings + + listings.forEach(listing => { + const title = listing.mediasetlisting$epgTitle + const subTitle = listing.program.title + const season = parseSeason(listing) + const episode = parseEpisode(listing) + + if (listing.program.title && listing.startTime && listing.endTime) { + programs.push({ + title: title || subTitle, + sub_title: title && title != subTitle ? subTitle : null, + description: listing.program.description || null, + category: listing.program.mediasetprogram$skyGenre || null, + season: episode && !season ? '0' : season, + episode: episode, + start: parseTime(listing.startTime), + stop: parseTime(listing.endTime), + image: getMaxResolutionThumbnails(listing) + }) + } + }) + + return programs + } +} + +function parseTime(timestamp) { + return dayjs(timestamp).utc().format('YYYY-MM-DD HH:mm') +} + +function parseSeason(item) { + if (!item.mediasetlisting$shortDescription) return null + const season = item.mediasetlisting$shortDescription.match(/S(\d+)\s/) + return season ? season[1] : null +} + +function parseEpisode(item) { + if (!item.mediasetlisting$shortDescription) return null + const episode = item.mediasetlisting$shortDescription.match(/Ep(\d+)\s/) + return episode ? episode[1] : null +} + +function getMaxResolutionThumbnails(item) { + const thumbnails = item.program.thumbnails || null + const maxResolutionThumbnails = {} + + for (const key in thumbnails) { + const type = key.split('-')[0] // Estrarre il tipo di thumbnail + const { width, height, url, title } = thumbnails[key] + + if ( + !maxResolutionThumbnails[type] || + width * height > maxResolutionThumbnails[type].width * maxResolutionThumbnails[type].height + ) { + maxResolutionThumbnails[type] = { width, height, url, title } + } + } + if (maxResolutionThumbnails.image_keyframe_poster) + return maxResolutionThumbnails.image_keyframe_poster.url + else if (maxResolutionThumbnails.image_header_poster) + return maxResolutionThumbnails.image_header_poster.url + else return null +} diff --git a/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.test.js b/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.test.js index 528d9200..c1c8ce11 100644 --- a/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.test.js +++ b/sites/mediasetinfinity.mediaset.it/mediasetinfinity.mediaset.it.test.js @@ -1,46 +1,53 @@ -const {parser, url} = require('./mediasetinfinity.mediaset.it.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2024-01-20', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: 'LB', xmltv_id: '20.it' -} - -it('can generate valid url', () => { - expect(url({ - channel, - date - })).toBe('https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=1705708800000~1705795200000&byCallSign=LB') -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') - const results = parser({content, date}).map(p => { - return p - }) - - expect(results[3]).toMatchObject({ - start: '2024-01-20 02:14', - stop: '2024-01-20 02:54', - title: 'Chicago Fire', - sub_title: 'Ep. 22 - Io non ti lascio', - description: 'Severide e Kidd continuano a indagare su un vecchio caso doloso di Benny. Notizie inaspettate portano Brett a meditare su una grande decisione.', - category: 'Intrattenimento', - season: '7', - episode: '22', - image: 'https://static2.mediasetplay.mediaset.it/Mediaset_Italia_Production_-_Main/F309370301002204/media/0/0/1ef76b73-3173-43bd-9c16-73986a0ec131/46896726-11e7-4438-b947-d2ae53f58c0b.jpg' - }) -}) - -it('can handle empty guide', () => { - const result = parser({ - content: '[]' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./mediasetinfinity.mediaset.it.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2024-01-20', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: 'LB', + xmltv_id: '20.it' +} + +it('can generate valid url', () => { + expect( + url({ + channel, + date + }) + ).toBe( + 'https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0?byListingTime=1705708800000~1705795200000&byCallSign=LB' + ) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') + const results = parser({ content, date }).map(p => { + return p + }) + + expect(results[3]).toMatchObject({ + start: '2024-01-20 02:14', + stop: '2024-01-20 02:54', + title: 'Chicago Fire', + sub_title: 'Ep. 22 - Io non ti lascio', + description: + 'Severide e Kidd continuano a indagare su un vecchio caso doloso di Benny. Notizie inaspettate portano Brett a meditare su una grande decisione.', + category: 'Intrattenimento', + season: '7', + episode: '22', + image: + 'https://static2.mediasetplay.mediaset.it/Mediaset_Italia_Production_-_Main/F309370301002204/media/0/0/1ef76b73-3173-43bd-9c16-73986a0ec131/46896726-11e7-4438-b947-d2ae53f58c0b.jpg' + }) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: '[]' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/meo.pt/meo.pt.config.js b/sites/meo.pt/meo.pt.config.js index 55e74434..d3aa53a5 100644 --- a/sites/meo.pt/meo.pt.config.js +++ b/sites/meo.pt/meo.pt.config.js @@ -40,7 +40,7 @@ module.exports = { async channels() { const axios = require('axios') const data = await axios - .post(`https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getGridAnon`, null, { + .post('https://authservice.apps.meo.pt/Services/GridTv/GridTvMng.svc/getGridAnon', null, { headers: { Origin: 'https://www.meo.pt' } diff --git a/sites/meuguia.tv/meuguia.tv.config.js b/sites/meuguia.tv/meuguia.tv.config.js index c877a08f..e86f2bfa 100644 --- a/sites/meuguia.tv/meuguia.tv.config.js +++ b/sites/meuguia.tv/meuguia.tv.config.js @@ -1,101 +1,105 @@ -const cheerio = require('cheerio') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'meuguia.tv', - days: 2, - url({ channel }) { - return `https://meuguia.tv/programacao/canal/${channel.site_id}` - }, - parser({ content, date }) { - const programs = [] - parseItems(content, date).forEach(item => { - if (dayjs.utc(item.start).isSame(date, 'day')) { - programs.push(item) - } - }) - - return programs - }, - async channels() { - const channels = [] - const axios = require('axios') - const baseUrl = 'https://meuguia.tv' - - let seq = 0 - const queues = [baseUrl] - while (true) { - if (!queues.length) { - break - } - const url = queues.shift() - const content = await axios - .get(url) - .then(response => response.data) - .catch(console.error) - - if (content) { - const [ $, items ] = getItems(content) - if (seq === 0) { - queues.push(...items.map(category => baseUrl + $(category).attr('href'))) - } else { - items.forEach(item => { - const href = $(item).attr('href') - channels.push({ - lang: 'pt', - site_id: href.substr(href.lastIndexOf('/') + 1), - name: $(item).find('.licontent h2').text().trim() - }) - }) - } - } - seq++ - } - - return channels - } -} - -function getItems(content) { - const $ = cheerio.load(content) - return [$, $('div.mw ul li a').toArray()] -} - -function parseItems(content, date) { - const result = [] - const $ = cheerio.load(content) - - let lastDate - for (const item of $('ul.mw li').toArray()) { - const $item = $(item) - if ($item.hasClass('subheader')) { - lastDate = `${$item.text().split(', ')[1]}/${date.format('YYYY')}` - } else if ($item.hasClass('divider')) { - // ignore - } else if (lastDate) { - const data = { title: $item.find('a').attr('title').trim() } - const ep = data.title.match(/T(\d+) EP(\d+)/) - if (ep) { - data.season = parseInt(ep[1]) - data.episode = parseInt(ep[2]) - } - data.start = dayjs.tz(`${lastDate} ${$item.find('.time').text()}`, 'DD/MM/YYYY HH:mm', 'America/Sao_Paulo') - result.push(data) - } - } - // use stop time from next item - if (result.length > 1) { - for (let i = 0; i < result.length - 1; i++) { - result[i].stop = result[i + 1].start - } - } - - return result -} \ No newline at end of file +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'meuguia.tv', + days: 2, + url({ channel }) { + return `https://meuguia.tv/programacao/canal/${channel.site_id}` + }, + parser({ content, date }) { + const programs = [] + parseItems(content, date).forEach(item => { + if (dayjs.utc(item.start).isSame(date, 'day')) { + programs.push(item) + } + }) + + return programs + }, + async channels() { + const channels = [] + const axios = require('axios') + const baseUrl = 'https://meuguia.tv' + + let seq = 0 + const queues = [baseUrl] + while (true) { + if (!queues.length) { + break + } + const url = queues.shift() + const content = await axios + .get(url) + .then(response => response.data) + .catch(console.error) + + if (content) { + const [$, items] = getItems(content) + if (seq === 0) { + queues.push(...items.map(category => baseUrl + $(category).attr('href'))) + } else { + items.forEach(item => { + const href = $(item).attr('href') + channels.push({ + lang: 'pt', + site_id: href.substr(href.lastIndexOf('/') + 1), + name: $(item).find('.licontent h2').text().trim() + }) + }) + } + } + seq++ + } + + return channels + } +} + +function getItems(content) { + const $ = cheerio.load(content) + return [$, $('div.mw ul li a').toArray()] +} + +function parseItems(content, date) { + const result = [] + const $ = cheerio.load(content) + + let lastDate + for (const item of $('ul.mw li').toArray()) { + const $item = $(item) + if ($item.hasClass('subheader')) { + lastDate = `${$item.text().split(', ')[1]}/${date.format('YYYY')}` + } else if ($item.hasClass('divider')) { + // ignore + } else if (lastDate) { + const data = { title: $item.find('a').attr('title').trim() } + const ep = data.title.match(/T(\d+) EP(\d+)/) + if (ep) { + data.season = parseInt(ep[1]) + data.episode = parseInt(ep[2]) + } + data.start = dayjs.tz( + `${lastDate} ${$item.find('.time').text()}`, + 'DD/MM/YYYY HH:mm', + 'America/Sao_Paulo' + ) + result.push(data) + } + } + // use stop time from next item + if (result.length > 1) { + for (let i = 0; i < result.length - 1; i++) { + result[i].stop = result[i + 1].start + } + } + + return result +} diff --git a/sites/meuguia.tv/meuguia.tv.test.js b/sites/meuguia.tv/meuguia.tv.test.js index c121039c..3fe2ce94 100644 --- a/sites/meuguia.tv/meuguia.tv.test.js +++ b/sites/meuguia.tv/meuguia.tv.test.js @@ -1,60 +1,60 @@ -const { parser, url } = require('./meuguia.tv.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -const date = dayjs.utc('2023-11-21').startOf('d') -const channel = { - site_id: 'AXN', - xmltv_id: 'AXN.id' -} -it('can generate valid url', () => { - expect(url({ channel })).toBe('https://meuguia.tv/programacao/canal/AXN') -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) - const result = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - if (p.stop) { - p.stop = p.stop.toJSON() - } - return p - }) - - expect(result).toMatchObject([ - { - title: 'Hawaii Five-0 : T10 EP4 - Tiny Is the Flower, Yet It Scents the Grasses Around It', - start: '2023-11-21T21:20:00.000Z', - stop: '2023-11-21T22:15:00.000Z', - season: 10, - episode: 4 - }, - { - title: - "Hawaii Five-0 : T10 EP5 - Don't Blame Ghosts and Spirits for One's Troubles; A Human Is Responsible", - start: '2023-11-21T22:15:00.000Z', - stop: '2023-11-21T23:10:00.000Z', - season: 10, - episode: 5 - }, - { - title: 'NCIS : T5 EP15 - In the Zone', - start: '2023-11-21T23:10:00.000Z', - season: 5, - episode: 15 - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: '' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./meuguia.tv.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const date = dayjs.utc('2023-11-21').startOf('d') +const channel = { + site_id: 'AXN', + xmltv_id: 'AXN.id' +} +it('can generate valid url', () => { + expect(url({ channel })).toBe('https://meuguia.tv/programacao/canal/AXN') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) + const result = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + if (p.stop) { + p.stop = p.stop.toJSON() + } + return p + }) + + expect(result).toMatchObject([ + { + title: 'Hawaii Five-0 : T10 EP4 - Tiny Is the Flower, Yet It Scents the Grasses Around It', + start: '2023-11-21T21:20:00.000Z', + stop: '2023-11-21T22:15:00.000Z', + season: 10, + episode: 4 + }, + { + title: + "Hawaii Five-0 : T10 EP5 - Don't Blame Ghosts and Spirits for One's Troubles; A Human Is Responsible", + start: '2023-11-21T22:15:00.000Z', + stop: '2023-11-21T23:10:00.000Z', + season: 10, + episode: 5 + }, + { + title: 'NCIS : T5 EP15 - In the Zone', + start: '2023-11-21T23:10:00.000Z', + season: 5, + episode: 15 + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: '' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/mewatch.sg/mewatch.sg.config.js b/sites/mewatch.sg/mewatch.sg.config.js index 1559fdf0..1b793c83 100644 --- a/sites/mewatch.sg/mewatch.sg.config.js +++ b/sites/mewatch.sg/mewatch.sg.config.js @@ -42,7 +42,7 @@ module.exports = { const axios = require('axios') const cheerio = require('cheerio') const data = await axios - .get(`https://www.mewatch.sg/channel-guide`) + .get('https://www.mewatch.sg/channel-guide') .then(r => r.data) .catch(console.log) diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index ba944503..2dd7d94f 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -11,9 +11,7 @@ dayjs.extend(utc) dayjs.extend(timezone) dayjs.extend(customParseFormat) -doFetch - .setCheckResult(false) - .setDebugger(debug) +doFetch.setCheckResult(false).setDebugger(debug) const languages = { en: 'english', id: 'indonesia' } const cookies = {} @@ -125,7 +123,7 @@ async function parseItems(content, date, cookies) { const url = $item.find('a').attr('href') const headers = { 'X-Requested-With': 'XMLHttpRequest', - Cookie: cookies, + Cookie: cookies } queues.push({ i: $item, url, params: { headers, timeout } }) } diff --git a/sites/moji.id/moji.id.config.js b/sites/moji.id/moji.id.config.js index 80c1baf7..ee6d6db2 100644 --- a/sites/moji.id/moji.id.config.js +++ b/sites/moji.id/moji.id.config.js @@ -48,8 +48,10 @@ function parseItems(context) { schDayPrograms.forEach((program, i) => { const itemDay = { progStart: parseStart($(schDayMonth), $(program)), - progStop: parseStop($(schDayMonth), schDayPrograms[i + 1] ? - $(schDayPrograms[i + 1]) : null), + progStop: parseStop( + $(schDayMonth), + schDayPrograms[i + 1] ? $(schDayPrograms[i + 1]) : null + ), progTitle: parseTitle($(program)), progDesc: parseDescription($(program)) } @@ -91,7 +93,9 @@ function parseStop(schDayMonth, itemNext) { ) } else { return dayjs.tz( - `${currentYear}-${monthDate[0]}-${(parseInt(monthDate[1]) + 1).toString().padStart(2, '0')} 00:00`, + `${currentYear}-${monthDate[0]}-${(parseInt(monthDate[1]) + 1) + .toString() + .padStart(2, '0')} 00:00`, 'YYYY-MMM-DD HH:mm', tz ) diff --git a/sites/moji.id/moji.id.test.js b/sites/moji.id/moji.id.test.js index ca2ddc55..452a7072 100644 --- a/sites/moji.id/moji.id.test.js +++ b/sites/moji.id/moji.id.test.js @@ -1,15 +1,9 @@ -const { url, parser } = require('./moji.id.config.js') +const { parser } = require('./moji.id.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') dayjs.extend(utc) const date = dayjs.utc('2023-08-18', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '0', - xmltv_id: 'moji.id', - lang: 'en', - logo: 'https://moji.id/site/uploads/logo/62f9387ce00a2-224-x-71.png' -} const content = '

schedule

FriAug 18
SatAug 19
SunAug 20
Jam TayangProgram
00:00TRUST
Informasi seputar menjaga vitalitas pria
00:302023 AVC CHALLENGE CUP FOR WOMEN (RECORDED)
India Vs. Vietnam
02:30ONE CHAMPIONSHIP 2021
Siaran laga-laga pertandingan tinju gaya bebas internasional. Meyuguhkan pertarungan sengit dari para petarung profeisional kelas dunia.
03:30VOLLEYBALL NATION\'S LEAGUE 2023 (RECORDED)
TURKI vs BRAZIL
05:00MOJI SPORT
MOJI SPORT
06:15LIPUTAN 6 PAGI MOJI
Kompilasi ragam berita hard news dan soft news baik dari dalam negeri maupun internasional juga info prediksi cuaca di wilayah Indonesia
07:00UNGKAP
Liputan investigasi seputar berbagai topik dan peristiwa hangat serta kontroversial yang terjadi di Indonesia
08:00PIALA KAPOLRI 2023 PUTRI (LIVE)
PIALA KAPOLRI 2023 PUTRI (LIVE)
10:30SERIES PAGI
GANTENG GANTENG SERIGALA
12:30DIAM-DIAM SUKA
DIAM-DIAM SUKA
13:30PIALA KAPOLRI 2023 PUTRA (LIVE)
PIALA KAPOLRI 2023 PUTRA (LIVE)
16:00PIALA KAPOLRI 2023 PUTRI (LIVE)
PIALA KAPOLRI 2023 PUTRI (LIVE)
18:00PIALA KAPOLRI 2023 PUTRA (LIVE)
PIALA KAPOLRI 2023 PUTRA (LIVE)
20:00MOJI DRAMA (CHHOTI SARDARNI)
CHHOTI SARDARNI
21:30SINEMA MALAM (BIDADARI CANTIK DI RUMAH KOST)
(BIDADARI CANTIK DI RUMAH KOST
23:00TRUST
Informasi seputar menjaga vitalitas pria
23:30TRUST
Informasi seputar menjaga vitalitas pria
' @@ -20,12 +14,11 @@ it('can handle empty guide', () => { }) it('can parse response', () => { - const results = parser({ content, date }) - .map(p => { - p.start = p.start.year(2023).toJSON() - p.stop = p.stop.year(2023).toJSON() - return p - }) + const results = parser({ content, date }).map(p => { + p.start = p.start.year(2023).toJSON() + p.stop = p.stop.year(2023).toJSON() + return p + }) expect(results[0]).toMatchObject({ title: 'TRUST', diff --git a/sites/mtel.ba/mtel.ba.config.js b/sites/mtel.ba/mtel.ba.config.js index 2da967bd..d2a6cc85 100644 --- a/sites/mtel.ba/mtel.ba.config.js +++ b/sites/mtel.ba/mtel.ba.config.js @@ -41,7 +41,7 @@ module.exports = { const pages = Array.from(Array(totalPages).keys()) for (let page of pages) { const data = await axios - .get(`https://mtel.ba/oec/epg/program`, { + .get('https://mtel.ba/oec/epg/program', { params: { page, date: dayjs().format('YYYY-MM-DD') }, headers: { 'X-Requested-With': 'XMLHttpRequest' @@ -65,7 +65,7 @@ module.exports = { async function getTotalPageCount() { const data = await axios - .get(`https://mtel.ba/oec/epg/program`, { + .get('https://mtel.ba/oec/epg/program', { params: { page: 0, date: dayjs().format('YYYY-MM-DD') }, headers: { 'X-Requested-With': 'XMLHttpRequest' diff --git a/sites/mts.rs/mts.rs.config.js b/sites/mts.rs/mts.rs.config.js index 251cae94..8b700c38 100644 --- a/sites/mts.rs/mts.rs.config.js +++ b/sites/mts.rs/mts.rs.config.js @@ -43,7 +43,7 @@ module.exports = { const pages = Array.from(Array(totalPages).keys()) for (let page of pages) { const data = await axios - .get(`https://mts.rs/oec/epg/program`, { + .get('https://mts.rs/oec/epg/program', { params: { page, date: dayjs().format('YYYY-MM-DD') }, headers: { 'X-Requested-With': 'XMLHttpRequest' @@ -67,7 +67,7 @@ module.exports = { async function getTotalPageCount() { const data = await axios - .get(`https://mts.rs/oec/epg/program`, { + .get('https://mts.rs/oec/epg/program', { params: { page: 0, date: dayjs().format('YYYY-MM-DD') }, headers: { 'X-Requested-With': 'XMLHttpRequest' @@ -84,8 +84,8 @@ function parseContent(content, channel) { let data try { data = JSON.parse(content) - } catch (error) { - console.log(error) + } catch { + return [] } if (!data || !data.channels || !data.channels.length) return null diff --git a/sites/mujtvprogram.cz/mujtvprogram.cz.config.js b/sites/mujtvprogram.cz/mujtvprogram.cz.config.js index e544721c..0a8ddb95 100644 --- a/sites/mujtvprogram.cz/mujtvprogram.cz.config.js +++ b/sites/mujtvprogram.cz/mujtvprogram.cz.config.js @@ -47,7 +47,7 @@ module.exports = { const data = await axios .post( - `https://services.mujtvprogram.cz/tvprogram2services/services/tvchannellist_mobile.php`, + 'https://services.mujtvprogram.cz/tvprogram2services/services/tvchannellist_mobile.php', params, { headers: { @@ -86,7 +86,7 @@ function parseItems(content) { if (!data) return [] const programmes = data['tv-program-programmes'].programme return programmes && Array.isArray(programmes) ? programmes : [] - } catch (err) { + } catch { return [] } } diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js index 5900d6f6..d645a811 100644 --- a/sites/musor.tv/musor.tv.config.js +++ b/sites/musor.tv/musor.tv.config.js @@ -9,7 +9,7 @@ dayjs.extend(customParseFormat) const headers = { 'User-Agent': - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0' } module.exports = { diff --git a/sites/musor.tv/musor.tv.test.js b/sites/musor.tv/musor.tv.test.js index 42ed2d4b..98bbd4be 100644 --- a/sites/musor.tv/musor.tv.test.js +++ b/sites/musor.tv/musor.tv.test.js @@ -26,12 +26,11 @@ it('can generate valid url for today', () => { it('can parse response', () => { const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) - const results = parser({ content, date }) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + const results = parser({ content, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(results[0]).toMatchObject({ start: '2022-11-19T23:00:00.000Z', diff --git a/sites/mytelly.co.uk/mytelly.co.uk.config.js b/sites/mytelly.co.uk/mytelly.co.uk.config.js index 282f8dc4..6ebe128a 100644 --- a/sites/mytelly.co.uk/mytelly.co.uk.config.js +++ b/sites/mytelly.co.uk/mytelly.co.uk.config.js @@ -23,14 +23,15 @@ module.exports = { channel.site_id }.html?dt=${date.format('YYYY-MM-DD')}` }, - async parser({ content, date, channel }) { + async parser({ content, date }) { const programs = [] if (content) { const queues = [] const $ = cheerio.load(content) - $('table.table > tbody > tr').toArray() + $('table.table > tbody > tr') + .toArray() .forEach(el => { const td = $(el).find('td:eq(1)') const title = td.find('h5 a') @@ -66,12 +67,16 @@ module.exports = { const subTitle = parseText($('.tab-pane > h5 > strong')) const description = parseText($('.tab-pane > .tvbody > p')) const image = $('.program-media-image img').attr('src') - const category = $('.schedule-attributes-genres span').toArray() + const category = $('.schedule-attributes-genres span') + .toArray() .map(el => $(el).text()) - const casts = $('.single-cast-head:not([id])').toArray() + const casts = $('.single-cast-head:not([id])') + .toArray() .map(el => { const cast = { name: parseText($(el).find('a')) } - const [, role] = $(el).text().match(/\((.*)\)/) || [null, null] + const [, role] = $(el) + .text() + .match(/\((.*)\)/) || [null, null] if (role) { cast.role = role } @@ -102,7 +107,7 @@ module.exports = { start, stop }) - }) + }) } } @@ -115,11 +120,17 @@ module.exports = { // process form -> provider if (queue.t === 'p') { const $ = cheerio.load(res) - $('#guide_provider option').toArray() + $('#guide_provider option') + .toArray() .forEach(el => { const opt = $(el) const provider = opt.attr('value') - queues.push({ t: 'r', method: 'post', url: 'https://www.mytelly.co.uk/getregions', params: { provider } }) + queues.push({ + t: 'r', + method: 'post', + url: 'https://www.mytelly.co.uk/getregions', + params: { provider } + }) }) } // process provider -> region @@ -135,26 +146,30 @@ module.exports = { u_time: now.format('HHmm'), is_mobile: 1 } - queues.push({ t: 's', method: 'post', url: 'https://www.mytelly.co.uk/tv-guide/schedule', params }) + queues.push({ + t: 's', + method: 'post', + url: 'https://www.mytelly.co.uk/tv-guide/schedule', + params + }) } } // process schedule -> channels if (queue.t === 's') { const $ = cheerio.load(res) - $('.channelname') - .each((i, el) => { - const name = $(el).find('center > a:eq(1)').text() - const url = $(el).find('center > a:eq(1)').attr('href') - const [, number, slug] = url.match(/\/(\d+)\/(.*)\.html$/) - const site_id = `${number}/${slug}` - if (channels[site_id] === undefined) { - channels[site_id] = { - lang: 'en', - site_id, - name - } + $('.channelname').each((i, el) => { + const name = $(el).find('center > a:eq(1)').text() + const url = $(el).find('center > a:eq(1)').attr('href') + const [, number, slug] = url.match(/\/(\d+)\/(.*)\.html$/) + const site_id = `${number}/${slug}` + if (channels[site_id] === undefined) { + channels[site_id] = { + lang: 'en', + site_id, + name } - }) + } + }) } }) @@ -178,13 +193,10 @@ function parseTime(date, time) { } function parseText($item) { - let text = $item.text() - .replace(/\t/g, '') - .replace(/\n/g, ' ') - .trim() + let text = $item.text().replace(/\t/g, '').replace(/\n/g, ' ').trim() while (true) { - if (text.match(/ /)) { - text = text.replace(/ /g, ' ') + if (text.match(/\s\s/)) { + text = text.replace(/\s\s/g, ' ') continue } break diff --git a/sites/mytelly.co.uk/mytelly.co.uk.test.js b/sites/mytelly.co.uk/mytelly.co.uk.test.js index 20f6ced0..6199a416 100644 --- a/sites/mytelly.co.uk/mytelly.co.uk.test.js +++ b/sites/mytelly.co.uk/mytelly.co.uk.test.js @@ -17,16 +17,18 @@ const channel = { xmltv_id: 'BBCOneLondon.uk' } -axios.get.mockImplementation((url, opts) => { +axios.get.mockImplementation(url => { if ( - url === 'https://www.mytelly.co.uk/tv-guide/listings/programme?cid=713&pid=1906433&tm=2024-12-07+00%3A00%3A00' + url === + 'https://www.mytelly.co.uk/tv-guide/listings/programme?cid=713&pid=1906433&tm=2024-12-07+00%3A00%3A00' ) { return Promise.resolve({ data: fs.readFileSync(path.join(__dirname, '__data__', 'programme.html')) }) } if ( - url === 'https://www.mytelly.co.uk/tv-guide/listings/programme?cid=713&pid=5656624&tm=2024-12-07+23%3A35%3A00' + url === + 'https://www.mytelly.co.uk/tv-guide/listings/programme?cid=713&pid=5656624&tm=2024-12-07+23%3A35%3A00' ) { return Promise.resolve({ data: fs.readFileSync(path.join(__dirname, '__data__', 'programme2.html')) @@ -57,7 +59,8 @@ it('can parse response', async () => { title: 'Captain Phillips', description: 'An American cargo ship sets a dangerous course around the coast of Somalia, while inland, four men are pressed into service as pirates by the local warlords. The captain is taken hostage when the raiding party hijacks the vessel, resulting in a tense five-day crisis. Fact-based thriller, starring Tom Hanks and Barkhad Abdi', - image: 'https://d16ia5iwuvax6y.cloudfront.net/uk-prog-images/c44ce7b0d3ae602c0c93ece5af140815.jpg?k=VeeNdUjml3bSHdlZ0OXbGLy%2BmsLdYPwTV6iAxGkzq4dsylOCGGE7OWlqwSWt0cd0Qtrin4DkEMC0Zzdp8ZeNk2vNIQzjMF0DG0h3IeTR5NM%3D', + image: + 'https://d16ia5iwuvax6y.cloudfront.net/uk-prog-images/c44ce7b0d3ae602c0c93ece5af140815.jpg?k=VeeNdUjml3bSHdlZ0OXbGLy%2BmsLdYPwTV6iAxGkzq4dsylOCGGE7OWlqwSWt0cd0Qtrin4DkEMC0Zzdp8ZeNk2vNIQzjMF0DG0h3IeTR5NM%3D', category: ['Factual', 'Movie/Drama', 'Thriller'] }) expect(results[1]).toMatchObject({ @@ -67,7 +70,8 @@ it('can parse response', async () => { subTitle: 'Past and Pressure Season 6, Episode 5', description: 'The artists are tasked with writing a song about their heritage. For some, the pressure of the competition proves too much for them to match. In their final challenge, they are put face to face with industry experts who grill them about their plans after the competition. Some impress, while others leave the mentors confused', - image: 'https://d16ia5iwuvax6y.cloudfront.net/uk-prog-images/2039278182b27cc279570b9ab9b89379.jpg?k=VeeNdUjml3bSHdlZ0OXbGLy%2BmsLdYPwTV6iAxGkzq4cDhR7jXTNFW3tgwQCdOPUobhXwlT81mIsqOe93HPusDG6tw1aoeYOgafojtynNWxc%3D', + image: + 'https://d16ia5iwuvax6y.cloudfront.net/uk-prog-images/2039278182b27cc279570b9ab9b89379.jpg?k=VeeNdUjml3bSHdlZ0OXbGLy%2BmsLdYPwTV6iAxGkzq4cDhR7jXTNFW3tgwQCdOPUobhXwlT81mIsqOe93HPusDG6tw1aoeYOgafojtynNWxc%3D', category: ['Challenge/Reality Show', 'Show/Game Show'], season: 6, episode: 5 diff --git a/sites/neo.io/neo.io.config.js b/sites/neo.io/neo.io.config.js index 28d41e8d..bea58fca 100644 --- a/sites/neo.io/neo.io.config.js +++ b/sites/neo.io/neo.io.config.js @@ -1,73 +1,80 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'neo.io', - timezone: 'Europe/Ljubljana', - days: 5, - url({ date, channel }) { return 'https://stargate.telekom.si/api/titan.tv.WebEpg/GetWebEpgData' }, - request: { - method: 'POST', - headers: { - 'Host': 'stargate.telekom.si', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0', - 'Accept': 'application/json, text/plain, */*', - 'Accept-Language': 'nl,en-US;q=0.7,en;q=0.3', - 'Content-Type': 'application/json', - 'X-AppLayout': '1', - 'x-language': 'sl', - 'Origin': 'https://neo.io', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'cross-site', - 'Sec-GPC': '1', - 'Connection': 'keep-alive' - }, - data({ channel, date }) { - const todayEpoch = date.startOf('day').unix(); - const nextDayEpoch = date.add(1, 'day').startOf('day').unix(); - return JSON.stringify({ - ch_ext_id: channel.site_id, - from: todayEpoch, - to: nextDayEpoch - }) - } - }, - parser: function ({ content }) { - const programs = []; - const data = JSON.parse(content); - data.shows.forEach(show => { - const start = dayjs.unix(show.show_start).utc(); - const stop = dayjs.unix(show.show_end).utc(); - const programData = { - title: show.title, - description: show.summary || 'No description available', - start: start.toISOString(), - stop: stop.toISOString(), - thumbnail: show.thumbnail - } - programs.push(programData) - }) - return programs - }, - async channels() { - const response = await axios.post('https://stargate.telekom.si/api/titan.tv.WebEpg/ZapList', JSON.stringify({ includeRadioStations: true }), { - headers: this.request.headers - }); - - const data = response.data.data; - return data.map(item => ({ - lang: 'sq', - name: String(item.channel.title), - site_id: String(item.channel.id), - //logo: String(item.channel.logo) - })) - } -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'neo.io', + timezone: 'Europe/Ljubljana', + days: 5, + url() { + return 'https://stargate.telekom.si/api/titan.tv.WebEpg/GetWebEpgData' + }, + request: { + method: 'POST', + headers: { + Host: 'stargate.telekom.si', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0', + Accept: 'application/json, text/plain, */*', + 'Accept-Language': 'nl,en-US;q=0.7,en;q=0.3', + 'Content-Type': 'application/json', + 'X-AppLayout': '1', + 'x-language': 'sl', + Origin: 'https://neo.io', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-GPC': '1', + Connection: 'keep-alive' + }, + data({ channel, date }) { + const todayEpoch = date.startOf('day').unix() + const nextDayEpoch = date.add(1, 'day').startOf('day').unix() + return JSON.stringify({ + ch_ext_id: channel.site_id, + from: todayEpoch, + to: nextDayEpoch + }) + } + }, + parser: function ({ content }) { + const programs = [] + const data = JSON.parse(content) + data.shows.forEach(show => { + const start = dayjs.unix(show.show_start).utc() + const stop = dayjs.unix(show.show_end).utc() + const programData = { + title: show.title, + description: show.summary || 'No description available', + start: start.toISOString(), + stop: stop.toISOString(), + thumbnail: show.thumbnail + } + programs.push(programData) + }) + return programs + }, + async channels() { + const response = await axios.post( + 'https://stargate.telekom.si/api/titan.tv.WebEpg/ZapList', + JSON.stringify({ includeRadioStations: true }), + { + headers: this.request.headers + } + ) + + const data = response.data.data + return data.map(item => ({ + lang: 'sq', + name: String(item.channel.title), + site_id: String(item.channel.id) + //logo: String(item.channel.logo) + })) + } +} diff --git a/sites/neo.io/neo.io.test.js b/sites/neo.io/neo.io.test.js index 3698a2fb..295120f7 100644 --- a/sites/neo.io/neo.io.test.js +++ b/sites/neo.io/neo.io.test.js @@ -1,121 +1,124 @@ -const { parser, url } = require('./neo.io.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2024-12-26', 'YYYY-MM-DD').startOf('day') -const channel = { - site_id: 'tv-slo-1', - xmltv_id: 'TVSLO1.si' -} - -it('can generate valid url', () => { - expect(url({ date, channel })).toBe('https://stargate.telekom.si/api/titan.tv.WebEpg/GetWebEpgData') -}) - -it('can parse response', () => { - const content = ` - { - "shows": [ - { - "title": "Napovedujemo", - "show_start": 1735185900, - "show_end": 1735192200, - "timestamp": "5:05 - 6:50", - "show_id": "CUP_IECOM_SLO1_10004660", - "thumbnail": "https://ngimg.siol.tv/sioltv/mtcmsprod/52/0/0/5200d01a-fe5f-487e-835a-274e77227a6b.jpg", - "is_adult": false, - "friendly_id": "napovedujemo_db48", - "pg": "", - "genres": [ - "napovednik" - ], - "year": 0, - "summary": "Vabilo k ogledu naših oddaj.", - "categories": "Ostalo", - "stb_only": false, - "is_live": false, - "original_title": "Napovedujemo" - }, - { - "title": "S0E0 - Hrabri zajčki: Prvi sneg", - "show_start": 1735192200, - "show_end": 1735192800, - "timestamp": "6:50 - 7:00", - "show_id": "CUP_IECOM_SLO1_79637910", - "thumbnail": "https://ngimg.siol.tv/sioltv/mtcmsprod/d6/4/5/d6456f4a-4f0a-4825-90c1-1749abd59688.jpg", - "is_adult": false, - "friendly_id": "hrabri_zajcki_prvi_sneg_1619", - "pg": "", - "genres": [ - "risanka" - ], - "year": 2020, - "summary": "Hrabri zajčki so prispeli v borov gozd in izkusili prvi sneg. Bob in Bu še nikoli nista videla snega. Mami kuha korenčkov kakav, Bu in Bob pa kmalu spoznata novega prijatelja, losa Danija.", - "categories": "Otroški/Mladinski", - "stb_only": false, - "is_live": false, - "original_title": "S0E0 - Brave Bunnies" - }, - { - "title": "Dobro jutro", - "show_start": 1735192800, - "show_end": 1735203900, - "timestamp": "7:00 - 10:05", - "show_id": "CUP_IECOM_SLO1_79637911", - "thumbnail": "https://ngimg.siol.tv/sioltv/mtcmsprod/e1/2/d/e12d8eb4-693a-43d3-89d4-fd96dade9f0f.jpg", - "is_adult": false, - "friendly_id": "dobro_jutro_2f10", - "pg": "", - "genres": [ - "zabavna oddaja" - ], - "year": 2024, - "summary": "Oddaja Dobro jutro poleg informativnih in zabavnih vsebin podaja koristne nasvete o najrazličnejših tematikah iz vsakdanjega življenja.", - "categories": "Razvedrilni program", - "stb_only": false, - "is_live": false, - "original_title": "Dobro jutro" - } - ] - }` - - const result = parser({ content, channel }).map(p => { - p.start = p.start - p.stop = p.stop - return p - }) - - expect(result).toMatchObject([ - { - title: "Napovedujemo", - description: "Vabilo k ogledu naših oddaj.", - start: "2024-12-26T04:05:00.000Z", - stop: "2024-12-26T05:50:00.000Z", - thumbnail: "https://ngimg.siol.tv/sioltv/mtcmsprod/52/0/0/5200d01a-fe5f-487e-835a-274e77227a6b.jpg" - }, - { - title: "S0E0 - Hrabri zajčki: Prvi sneg", - description: "Hrabri zajčki so prispeli v borov gozd in izkusili prvi sneg. Bob in Bu še nikoli nista videla snega. Mami kuha korenčkov kakav, Bu in Bob pa kmalu spoznata novega prijatelja, losa Danija.", - start: "2024-12-26T05:50:00.000Z", - stop: "2024-12-26T06:00:00.000Z", - thumbnail: "https://ngimg.siol.tv/sioltv/mtcmsprod/d6/4/5/d6456f4a-4f0a-4825-90c1-1749abd59688.jpg" - }, - { - title: "Dobro jutro", - description: "Oddaja Dobro jutro poleg informativnih in zabavnih vsebin podaja koristne nasvete o najrazličnejših tematikah iz vsakdanjega življenja.", - start: "2024-12-26T06:00:00.000Z", - stop: "2024-12-26T09:05:00.000Z", - thumbnail: "https://ngimg.siol.tv/sioltv/mtcmsprod/e1/2/d/e12d8eb4-693a-43d3-89d4-fd96dade9f0f.jpg" - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - content: '{"shows":[]}' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./neo.io.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2024-12-26', 'YYYY-MM-DD').startOf('day') +const channel = { + site_id: 'tv-slo-1', + xmltv_id: 'TVSLO1.si' +} + +it('can generate valid url', () => { + expect(url({ date, channel })).toBe( + 'https://stargate.telekom.si/api/titan.tv.WebEpg/GetWebEpgData' + ) +}) + +it('can parse response', () => { + const content = ` + { + "shows": [ + { + "title": "Napovedujemo", + "show_start": 1735185900, + "show_end": 1735192200, + "timestamp": "5:05 - 6:50", + "show_id": "CUP_IECOM_SLO1_10004660", + "thumbnail": "https://ngimg.siol.tv/sioltv/mtcmsprod/52/0/0/5200d01a-fe5f-487e-835a-274e77227a6b.jpg", + "is_adult": false, + "friendly_id": "napovedujemo_db48", + "pg": "", + "genres": [ + "napovednik" + ], + "year": 0, + "summary": "Vabilo k ogledu naših oddaj.", + "categories": "Ostalo", + "stb_only": false, + "is_live": false, + "original_title": "Napovedujemo" + }, + { + "title": "S0E0 - Hrabri zajčki: Prvi sneg", + "show_start": 1735192200, + "show_end": 1735192800, + "timestamp": "6:50 - 7:00", + "show_id": "CUP_IECOM_SLO1_79637910", + "thumbnail": "https://ngimg.siol.tv/sioltv/mtcmsprod/d6/4/5/d6456f4a-4f0a-4825-90c1-1749abd59688.jpg", + "is_adult": false, + "friendly_id": "hrabri_zajcki_prvi_sneg_1619", + "pg": "", + "genres": [ + "risanka" + ], + "year": 2020, + "summary": "Hrabri zajčki so prispeli v borov gozd in izkusili prvi sneg. Bob in Bu še nikoli nista videla snega. Mami kuha korenčkov kakav, Bu in Bob pa kmalu spoznata novega prijatelja, losa Danija.", + "categories": "Otroški/Mladinski", + "stb_only": false, + "is_live": false, + "original_title": "S0E0 - Brave Bunnies" + }, + { + "title": "Dobro jutro", + "show_start": 1735192800, + "show_end": 1735203900, + "timestamp": "7:00 - 10:05", + "show_id": "CUP_IECOM_SLO1_79637911", + "thumbnail": "https://ngimg.siol.tv/sioltv/mtcmsprod/e1/2/d/e12d8eb4-693a-43d3-89d4-fd96dade9f0f.jpg", + "is_adult": false, + "friendly_id": "dobro_jutro_2f10", + "pg": "", + "genres": [ + "zabavna oddaja" + ], + "year": 2024, + "summary": "Oddaja Dobro jutro poleg informativnih in zabavnih vsebin podaja koristne nasvete o najrazličnejših tematikah iz vsakdanjega življenja.", + "categories": "Razvedrilni program", + "stb_only": false, + "is_live": false, + "original_title": "Dobro jutro" + } + ] + }` + + const result = parser({ content, channel }) + + expect(result).toMatchObject([ + { + title: 'Napovedujemo', + description: 'Vabilo k ogledu naših oddaj.', + start: '2024-12-26T04:05:00.000Z', + stop: '2024-12-26T05:50:00.000Z', + thumbnail: + 'https://ngimg.siol.tv/sioltv/mtcmsprod/52/0/0/5200d01a-fe5f-487e-835a-274e77227a6b.jpg' + }, + { + title: 'S0E0 - Hrabri zajčki: Prvi sneg', + description: + 'Hrabri zajčki so prispeli v borov gozd in izkusili prvi sneg. Bob in Bu še nikoli nista videla snega. Mami kuha korenčkov kakav, Bu in Bob pa kmalu spoznata novega prijatelja, losa Danija.', + start: '2024-12-26T05:50:00.000Z', + stop: '2024-12-26T06:00:00.000Z', + thumbnail: + 'https://ngimg.siol.tv/sioltv/mtcmsprod/d6/4/5/d6456f4a-4f0a-4825-90c1-1749abd59688.jpg' + }, + { + title: 'Dobro jutro', + description: + 'Oddaja Dobro jutro poleg informativnih in zabavnih vsebin podaja koristne nasvete o najrazličnejših tematikah iz vsakdanjega življenja.', + start: '2024-12-26T06:00:00.000Z', + stop: '2024-12-26T09:05:00.000Z', + thumbnail: + 'https://ngimg.siol.tv/sioltv/mtcmsprod/e1/2/d/e12d8eb4-693a-43d3-89d4-fd96dade9f0f.jpg' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: '{"shows":[]}' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/nhkworldpremium.com/nhkworldpremium.com.config.js b/sites/nhkworldpremium.com/nhkworldpremium.com.config.js index bdce0c26..79ba59bf 100644 --- a/sites/nhkworldpremium.com/nhkworldpremium.com.config.js +++ b/sites/nhkworldpremium.com/nhkworldpremium.com.config.js @@ -50,7 +50,7 @@ function parseItems(content, date) { if (!data || !data.item || !Array.isArray(data.item.episodes)) return [] return data.item.episodes.filter(ep => ep.schedule.startsWith(date.format('YYYY-MM-DD'))) - } catch (err) { + } catch { return [] } } diff --git a/sites/nhl.com/nhl.com.config.js b/sites/nhl.com/nhl.com.config.js index c3c01408..46127652 100644 --- a/sites/nhl.com/nhl.com.config.js +++ b/sites/nhl.com/nhl.com.config.js @@ -1,45 +1,46 @@ -const dayjs = require('dayjs') - -module.exports = { - site: 'nhl.com', - // I'm not sure what `endDate` represents but they only return 1 day of - // results, with `endTime`s ocassionally in the following day. - days: 1, - url: ({ date }) => `https://api-web.nhle.com/v1/network/tv-schedule/${date.toJSON().split("T")[0]}`, - parser({ content }) { - const programs = [] - const items = parseItems(content) - for (const item of items) { - programs.push({ - title: item.title, - description: item.description === item.title ? undefined : item.description, - category: "Sports", - // image: parseImage(item), - start: parseStart(item), - stop: parseStop(item) - }) - } - - return programs - } -} - -// Unfortunately I couldn't determine how these are -// supposed to be formatted. Pointers appreciated! -// function parseImage(item) { -// const uri = item.broadcastImageUrl - -// return uri ? `https://???/${uri}` : null -// } - -function parseStart(item) { - return dayjs(item.startTime) -} - -function parseStop(item) { - return dayjs(item.endTime) -} - -function parseItems(content) { - return JSON.parse(content).broadcasts -} +const dayjs = require('dayjs') + +module.exports = { + site: 'nhl.com', + // I'm not sure what `endDate` represents but they only return 1 day of + // results, with `endTime`s ocassionally in the following day. + days: 1, + url: ({ date }) => + `https://api-web.nhle.com/v1/network/tv-schedule/${date.toJSON().split('T')[0]}`, + parser({ content }) { + const programs = [] + const items = parseItems(content) + for (const item of items) { + programs.push({ + title: item.title, + description: item.description === item.title ? undefined : item.description, + category: 'Sports', + // image: parseImage(item), + start: parseStart(item), + stop: parseStop(item) + }) + } + + return programs + } +} + +// Unfortunately I couldn't determine how these are +// supposed to be formatted. Pointers appreciated! +// function parseImage(item) { +// const uri = item.broadcastImageUrl + +// return uri ? `https://???/${uri}` : null +// } + +function parseStart(item) { + return dayjs(item.startTime) +} + +function parseStop(item) { + return dayjs(item.endTime) +} + +function parseItems(content) { + return JSON.parse(content).broadcasts +} diff --git a/sites/nhl.com/nhl.com.test.js b/sites/nhl.com/nhl.com.test.js index a12db69a..49ce4a0e 100644 --- a/sites/nhl.com/nhl.com.test.js +++ b/sites/nhl.com/nhl.com.test.js @@ -1,44 +1,44 @@ -const { parser, url } = require('./nhl.com.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2024-11-21', 'YYYY-MM-DD').startOf('d') - -it('can generate valid url', () => { - expect(url({ date })).toBe( - 'https://api-web.nhle.com/v1/network/tv-schedule/2024-11-21' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - let results = parser({ content, date }) - results = results.map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results[0]).toMatchObject({ - start: '2024-11-21T12:00:00.000Z', - stop: '2024-11-21T13:00:00.000Z', - title: 'On The Fly', - category: 'Sports', - }) -}) - -it('can handle empty guide', () => { - const results = parser({ content: JSON.stringify({ - // extra props not necessary but they form a valid response - date: "2024-11-21", - startDate: "2024-11-07", - endDate: "2024-12-05", - broadcasts: [], - }) }) - expect(results).toMatchObject([]) -}) +const { parser, url } = require('./nhl.com.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2024-11-21', 'YYYY-MM-DD').startOf('d') + +it('can generate valid url', () => { + expect(url({ date })).toBe('https://api-web.nhle.com/v1/network/tv-schedule/2024-11-21') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) + let results = parser({ content, date }) + results = results.map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results[0]).toMatchObject({ + start: '2024-11-21T12:00:00.000Z', + stop: '2024-11-21T13:00:00.000Z', + title: 'On The Fly', + category: 'Sports' + }) +}) + +it('can handle empty guide', () => { + const results = parser({ + content: JSON.stringify({ + // extra props not necessary but they form a valid response + date: '2024-11-21', + startDate: '2024-11-07', + endDate: '2024-12-05', + broadcasts: [] + }) + }) + expect(results).toMatchObject([]) +}) diff --git a/sites/nostv.pt/nostv.pt.config.js b/sites/nostv.pt/nostv.pt.config.js index a823d165..6ba4dbac 100644 --- a/sites/nostv.pt/nostv.pt.config.js +++ b/sites/nostv.pt/nostv.pt.config.js @@ -1,68 +1,68 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -const headers = { - 'X-Apikey': 'xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI', - 'X-Core-Appversion': '2.14.0.1', - 'X-Core-Contentratinglimit': '0', - 'X-Core-Deviceid': '', - 'X-Core-Devicetype': 'web', - Origin: 'https://nostv.pt', - 'User-Agent': - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' -} - -module.exports = { - site: 'nostv.pt', - days: 2, - url({ channel, date }) { - return `https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=${ - channel.site_id - }&minDate=${date.format('YYYY-MM-DD')}T00:00:00Z&maxDate=${date.format( - 'YYYY-MM-DD' - )}T23:59:59Z&isDateInclusive=true&client_id=${headers['X-Apikey']}` - }, - request: { headers }, - parser({ content }) { - const programs = [] - if (content) { - const items = Array.isArray(content) ? content : JSON.parse(content) - items.forEach(item => { - programs.push({ - title: item.Metadata?.Title, - sub_title: item.Metadata?.SubTitle ? item.Metadata?.SubTitle : null, - description: item.Metadata?.Description, - season: item.Metadata?.Season, - episode: item.Metadata?.Episode, - image: item.Images - ? `https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['X-Apikey']}` - : null, - start: dayjs.utc(item.UtcDateTimeStart), - stop: dayjs.utc(item.UtcDateTimeEnd) - }) - }) - } - - return programs - }, - async channels() { - const result = await axios - .get( - `https://tyr-prod.apigee.net/nostv/ott/channels/guest?client_id=${headers['X-Apikey']}`, - { headers } - ) - .then(r => r.data) - .catch(console.error) - - return result.map(item => { - return { - lang: 'pt', - site_id: item.ServiceId, - name: item.Name - } - }) - } -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const headers = { + 'X-Apikey': 'xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI', + 'X-Core-Appversion': '2.14.0.1', + 'X-Core-Contentratinglimit': '0', + 'X-Core-Deviceid': '', + 'X-Core-Devicetype': 'web', + Origin: 'https://nostv.pt', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' +} + +module.exports = { + site: 'nostv.pt', + days: 2, + url({ channel, date }) { + return `https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=${ + channel.site_id + }&minDate=${date.format('YYYY-MM-DD')}T00:00:00Z&maxDate=${date.format( + 'YYYY-MM-DD' + )}T23:59:59Z&isDateInclusive=true&client_id=${headers['X-Apikey']}` + }, + request: { headers }, + parser({ content }) { + const programs = [] + if (content) { + const items = Array.isArray(content) ? content : JSON.parse(content) + items.forEach(item => { + programs.push({ + title: item.Metadata?.Title, + sub_title: item.Metadata?.SubTitle ? item.Metadata?.SubTitle : null, + description: item.Metadata?.Description, + season: item.Metadata?.Season, + episode: item.Metadata?.Episode, + image: item.Images + ? `https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['X-Apikey']}` + : null, + start: dayjs.utc(item.UtcDateTimeStart), + stop: dayjs.utc(item.UtcDateTimeEnd) + }) + }) + } + + return programs + }, + async channels() { + const result = await axios + .get( + `https://tyr-prod.apigee.net/nostv/ott/channels/guest?client_id=${headers['X-Apikey']}`, + { headers } + ) + .then(r => r.data) + .catch(console.error) + + return result.map(item => { + return { + lang: 'pt', + site_id: item.ServiceId, + name: item.Name + } + }) + } +} diff --git a/sites/nostv.pt/nostv.pt.test.js b/sites/nostv.pt/nostv.pt.test.js index 47297845..b4163c9b 100644 --- a/sites/nostv.pt/nostv.pt.test.js +++ b/sites/nostv.pt/nostv.pt.test.js @@ -1,51 +1,51 @@ -const { parser, url } = require('./nostv.pt.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2023-12-11').startOf('d') -const channel = { - site_id: '510', - xmltv_id: 'SPlus.pt' -} - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - 'https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=510&minDate=2023-12-11T00:00:00Z&maxDate=2023-12-11T23:59:59Z&isDateInclusive=true&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) - const results = parser({ content }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results[0]).toMatchObject({ - start: '2023-12-11T16:30:00.000Z', - stop: '2023-12-11T17:00:00.000Z', - title: 'Village Vets', - description: - 'A história de dois melhores amigos veterinários e o seu extraordinário trabalho na Austrália.', - season: 1, - episode: 12, - image: - 'https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI' - }) -}) - -it('can handle empty guide', async () => { - const results = await parser({ - date, - content: '[]' - }) - - expect(results).toMatchObject([]) -}) +const { parser, url } = require('./nostv.pt.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2023-12-11').startOf('d') +const channel = { + site_id: '510', + xmltv_id: 'SPlus.pt' +} + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe( + 'https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=510&minDate=2023-12-11T00:00:00Z&maxDate=2023-12-11T23:59:59Z&isDateInclusive=true&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI' + ) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) + const results = parser({ content }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results[0]).toMatchObject({ + start: '2023-12-11T16:30:00.000Z', + stop: '2023-12-11T17:00:00.000Z', + title: 'Village Vets', + description: + 'A história de dois melhores amigos veterinários e o seu extraordinário trabalho na Austrália.', + season: 1, + episode: 12, + image: + 'https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI' + }) +}) + +it('can handle empty guide', async () => { + const results = await parser({ + date, + content: '[]' + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js index 37429ac8..6dd2c7e1 100644 --- a/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js +++ b/sites/nuevosiglo.com.uy/nuevosiglo.com.uy.config.js @@ -55,7 +55,7 @@ module.exports = { .map(function () { return { lang: 'es', - site_id: $(this).attr('alt').replace(/\&/gi, '&'), + site_id: $(this).attr('alt').replace(/&/gi, '&'), name: $(this).attr('alt') } }) diff --git a/sites/nzxmltv.com/nzxmltv.com.config.js b/sites/nzxmltv.com/nzxmltv.com.config.js index 4c6e42b8..609b2c09 100644 --- a/sites/nzxmltv.com/nzxmltv.com.config.js +++ b/sites/nzxmltv.com/nzxmltv.com.config.js @@ -1,81 +1,81 @@ -const parser = require('epg-parser') - -module.exports = { - site: 'nzxmltv.com', - days: 2, - request: { - cache: { - ttl: 3600000 // 1 hour - }, - maxContentLength: 104857600 // 100 MB - }, - url({ channel }) { - const [path] = channel.site_id.split('#') - - return `https://nzxmltv.com/${path}.xml` - }, - parser({ content, channel, date }) { - const programs = [] - parseItems(content, channel, date).forEach(item => { - const program = { - title: item.title?.[0]?.value, - description: item.desc?.[0]?.value, - icon: item.icon?.[0], - start: item.start, - stop: item.stop - } - if (item.episodeNum) { - item.episodeNum.forEach(ep => { - if (ep.system === 'xmltv_ns') { - const [season, episode, _] = ep.value.split('.') - program.season = parseInt(season) + 1 - program.episode = parseInt(episode) + 1 - return true - } - }) - } - programs.push(program) - }) - - return programs - }, - async channels({ provider }) { - const axios = require('axios') - const cheerio = require('cheerio') - - const providers = { - freeview: 'xmltv/guide', - sky: 'sky/guide', - redbull: 'iptv/redbull', - pluto: 'iptv/plutotv' - } - - const channels = [] - const path = providers[provider] - const xml = await axios - .get(`https://nzxmltv.com/${path}.xml`) - .then(r => r.data) - .catch(console.error) - - const $ = cheerio.load(xml) - $('tv channel').each((i, el) => { - const disp = $(el).find('display-name') - const channelId = $(el).attr('id') - - channels.push({ - lang: disp.attr('lang').substr(0, 2), - site_id: `${path}#${channelId}`, - name: disp.text().trim() - }) - }) - - return channels - } -} - -function parseItems(content, channel, date) { - const { programs } = parser.parse(content) - const [, channelId] = channel.site_id.split('#') - - return programs.filter(p => p.channel === channelId && date.isSame(p.start, 'day')) -} +const parser = require('epg-parser') + +module.exports = { + site: 'nzxmltv.com', + days: 2, + request: { + cache: { + ttl: 3600000 // 1 hour + }, + maxContentLength: 104857600 // 100 MB + }, + url({ channel }) { + const [path] = channel.site_id.split('#') + + return `https://nzxmltv.com/${path}.xml` + }, + parser({ content, channel, date }) { + const programs = [] + parseItems(content, channel, date).forEach(item => { + const program = { + title: item.title?.[0]?.value, + description: item.desc?.[0]?.value, + icon: item.icon?.[0], + start: item.start, + stop: item.stop + } + if (item.episodeNum) { + item.episodeNum.forEach(ep => { + if (ep.system === 'xmltv_ns') { + const [season, episode] = ep.value.split('.') + program.season = parseInt(season) + 1 + program.episode = parseInt(episode) + 1 + return true + } + }) + } + programs.push(program) + }) + + return programs + }, + async channels({ provider }) { + const axios = require('axios') + const cheerio = require('cheerio') + + const providers = { + freeview: 'xmltv/guide', + sky: 'sky/guide', + redbull: 'iptv/redbull', + pluto: 'iptv/plutotv' + } + + const channels = [] + const path = providers[provider] + const xml = await axios + .get(`https://nzxmltv.com/${path}.xml`) + .then(r => r.data) + .catch(console.error) + + const $ = cheerio.load(xml) + $('tv channel').each((i, el) => { + const disp = $(el).find('display-name') + const channelId = $(el).attr('id') + + channels.push({ + lang: disp.attr('lang').substr(0, 2), + site_id: `${path}#${channelId}`, + name: disp.text().trim() + }) + }) + + return channels + } +} + +function parseItems(content, channel, date) { + const { programs } = parser.parse(content) + const [, channelId] = channel.site_id.split('#') + + return programs.filter(p => p.channel === channelId && date.isSame(p.start, 'day')) +} diff --git a/sites/nzxmltv.com/nzxmltv.com.test.js b/sites/nzxmltv.com/nzxmltv.com.test.js index f1af8d89..e6ef97a8 100644 --- a/sites/nzxmltv.com/nzxmltv.com.test.js +++ b/sites/nzxmltv.com/nzxmltv.com.test.js @@ -1,40 +1,40 @@ -const { parser, url } = require('./nzxmltv.com.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2023-11-21').startOf('d') -const channel = { - site_id: 'xmltv/guide#1', - xmltv_id: 'TVNZ1.nz' -} - -it('can generate valid url', () => { - expect(url({ channel })).toBe('https://nzxmltv.com/xmltv/guide.xml') -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml')) - const results = parser({ content, channel, date }) - - expect(results[0]).toMatchObject({ - start: '2023-11-21T10:30:00.000Z', - stop: '2023-11-21T11:25:00.000Z', - title: 'Sunday', - description: - 'On Sunday, an unmissable show with stories about divorce, weight loss, and the incomprehensible devastation of Gaza.', - season: 2023, - episode: 37, - icon: 'https://www.thetvdb.com/banners/posters/5dbebff2986f2.jpg' - }) -}) - -it('can handle empty guide', () => { - const result = parser({ content: '', channel, date }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./nzxmltv.com.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2023-11-21').startOf('d') +const channel = { + site_id: 'xmltv/guide#1', + xmltv_id: 'TVNZ1.nz' +} + +it('can generate valid url', () => { + expect(url({ channel })).toBe('https://nzxmltv.com/xmltv/guide.xml') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml')) + const results = parser({ content, channel, date }) + + expect(results[0]).toMatchObject({ + start: '2023-11-21T10:30:00.000Z', + stop: '2023-11-21T11:25:00.000Z', + title: 'Sunday', + description: + 'On Sunday, an unmissable show with stories about divorce, weight loss, and the incomprehensible devastation of Gaza.', + season: 2023, + episode: 37, + icon: 'https://www.thetvdb.com/banners/posters/5dbebff2986f2.jpg' + }) +}) + +it('can handle empty guide', () => { + const result = parser({ content: '', channel, date }) + expect(result).toMatchObject([]) +}) diff --git a/sites/ontvtonight.com/ontvtonight.com.config.js b/sites/ontvtonight.com/ontvtonight.com.config.js index e41f6ada..20b6efd0 100644 --- a/sites/ontvtonight.com/ontvtonight.com.config.js +++ b/sites/ontvtonight.com/ontvtonight.com.config.js @@ -132,7 +132,7 @@ module.exports = { const $ = cheerio.load(data) $('.channelname').each((i, el) => { let name = $(el).find('center > a:eq(1)').text() - name = name.replace(/\-\-/gi, '-') + name = name.replace(/--/gi, '-') const url = $(el).find('center > a:eq(1)').attr('href') if (!url) return const [, number, slug] = url.match(/\/(\d+)\/(.*)\.html$/) diff --git a/sites/orangetv.orange.es/orangetv.orange.es.config.js b/sites/orangetv.orange.es/orangetv.orange.es.config.js index 34742993..690e1e80 100644 --- a/sites/orangetv.orange.es/orangetv.orange.es.config.js +++ b/sites/orangetv.orange.es/orangetv.orange.es.config.js @@ -1,113 +1,108 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const axios = require('axios') - -dayjs.extend(utc) - -const API_PROGRAM_ENDPOINT = 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO' -const API_CHANNEL_ENDPOINT = 'https://pc.orangetv.orange.es/pc/api/rtv/v1/GetChannelList?bouquet_id=1&model_external_id=PC&filter_unsupported_channels=false&client=json' -const API_IMAGE_ENDPOINT = 'https://pc.orangetv.orange.es/pc/api/rtv/v1/images' - -module.exports = { - site: 'orangetv.orange.es', - days: 2, - request: { - cache: { - ttl: 60 * 60 * 1000 // 1 hour - } - }, - url({ date }) { - return `${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_1.json` - }, - async parser({ content, channel, date }) { - let programs = [] - let items = parseItems(content, channel) - if (!items.length) return programs - - const promises = [ - axios.get( - `${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_1.json`, - ), - axios.get( - `${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_2.json`, - ), - axios.get( - `${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_3.json`, - ), - ] - - await Promise.allSettled(promises) - .then(results => { - results.forEach(r => { - if (r.status === 'fulfilled') { - const parsed = parseItems(r.value.data, channel) - - items = items.filter((item, index) => items.findIndex(oi => oi.id === item.id) === index).concat(parsed) - } - }) - }) - .catch(console.error) - - items.forEach(item => { - programs.push({ - title: item.name, - description: item.description, - category: parseGenres(item), - season: item.seriesSeason || null, - episode: item.episodeId || null, - icon: parseIcon(item), - start: dayjs.utc(item.startDate) || null, - stop: dayjs.utc(item.endDate) || null, - }) - }) - - return programs - }, - async channels() { - const axios = require('axios') - const data = await axios - .get(API_CHANNEL_ENDPOINT) - .then(r => r.data) - .catch(console.log) - return data.response.map(item => { - return { - lang: 'es', - name: item.name, - site_id: item.externalChannelId - } - }) - } -} - -function parseIcon(item){ - - if(item.attachments.length > 0){ - const cover = item.attachments.find(i => i.name === "COVER" || i.name === "cover") - - if(cover) - { - return `${API_IMAGE_ENDPOINT}${cover.value}`; - } - } - - return '' -} - -function parseGenres(item){ - return item.genres.map(i => i.name); -} - -function parseItems(content, channel) { - const json = typeof content === 'string' ? JSON.parse(content) : Array.isArray(content) ? content : [] - - if (!Array.isArray(json)) { - return []; - } - - const channelData = json.find(i => i.channelExternalId == channel.site_id); - - if(!channelData) - return []; - - return channelData.programs; -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const axios = require('axios') + +dayjs.extend(utc) + +const API_PROGRAM_ENDPOINT = 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO' +const API_CHANNEL_ENDPOINT = + 'https://pc.orangetv.orange.es/pc/api/rtv/v1/GetChannelList?bouquet_id=1&model_external_id=PC&filter_unsupported_channels=false&client=json' +const API_IMAGE_ENDPOINT = 'https://pc.orangetv.orange.es/pc/api/rtv/v1/images' + +module.exports = { + site: 'orangetv.orange.es', + days: 2, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1 hour + } + }, + url({ date }) { + return `${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_1.json` + }, + async parser({ content, channel, date }) { + let programs = [] + let items = parseItems(content, channel) + if (!items.length) return programs + + const promises = [ + axios.get(`${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_1.json`), + axios.get(`${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_2.json`), + axios.get(`${API_PROGRAM_ENDPOINT}/${date.format('YYYYMMDD')}_8h_3.json`) + ] + + await Promise.allSettled(promises) + .then(results => { + results.forEach(r => { + if (r.status === 'fulfilled') { + const parsed = parseItems(r.value.data, channel) + + items = items + .filter((item, index) => items.findIndex(oi => oi.id === item.id) === index) + .concat(parsed) + } + }) + }) + .catch(console.error) + + items.forEach(item => { + programs.push({ + title: item.name, + description: item.description, + category: parseGenres(item), + season: item.seriesSeason || null, + episode: item.episodeId || null, + icon: parseIcon(item), + start: dayjs.utc(item.startDate) || null, + stop: dayjs.utc(item.endDate) || null + }) + }) + + return programs + }, + async channels() { + const axios = require('axios') + const data = await axios + .get(API_CHANNEL_ENDPOINT) + .then(r => r.data) + .catch(console.log) + return data.response.map(item => { + return { + lang: 'es', + name: item.name, + site_id: item.externalChannelId + } + }) + } +} + +function parseIcon(item) { + if (item.attachments.length > 0) { + const cover = item.attachments.find(i => i.name === 'COVER' || i.name === 'cover') + + if (cover) { + return `${API_IMAGE_ENDPOINT}${cover.value}` + } + } + + return '' +} + +function parseGenres(item) { + return item.genres.map(i => i.name) +} + +function parseItems(content, channel) { + const json = + typeof content === 'string' ? JSON.parse(content) : Array.isArray(content) ? content : [] + + if (!Array.isArray(json)) { + return [] + } + + const channelData = json.find(i => i.channelExternalId == channel.site_id) + + if (!channelData) return [] + + return channelData.programs +} diff --git a/sites/orangetv.orange.es/orangetv.orange.es.test.js b/sites/orangetv.orange.es/orangetv.orange.es.test.js index 3738523c..c9decd52 100644 --- a/sites/orangetv.orange.es/orangetv.orange.es.test.js +++ b/sites/orangetv.orange.es/orangetv.orange.es.test.js @@ -1,49 +1,54 @@ -const { parser, url } = require('./orangetv.orange.es.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) -const path = require('path') -const fs = require('fs') - -const date = dayjs.utc('2024-12-01', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '1010', - xmltv_id: 'La1.es' -} - -it('can generate valid url', () => { - expect(url({ date })).toBe(`https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO/${date.format('YYYYMMDD')}_8h_1.json`) -}) - -it('can parse response', async () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')).toString() - let results = await parser({ content, channel, date }) - results = results.map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results.length).toBe(4) - - var sampleResult = results[0]; - - expect(sampleResult).toMatchObject({ - start: '2024-11-30T22:36:51.000Z', - stop: '2024-11-30T23:57:25.000Z', - category: ['Cine', 'Romance', 'Comedia', 'Comedia Romántica'], - description: 'Charlie trabaja como director en una escuela de primaria y goza de una placentera existencia junto a sus amigos. A pesar de ello, no es feliz porque cada vez que se enamora pierde la cordura.', - title: 'Loco de amor' - }) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: '{}' - }) - expect(result).toMatchObject({}) -}) +const { parser, url } = require('./orangetv.orange.es.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) +const path = require('path') +const fs = require('fs') + +const date = dayjs.utc('2024-12-01', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: '1010', + xmltv_id: 'La1.es' +} + +it('can generate valid url', () => { + expect(url({ date })).toBe( + `https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO/${date.format( + 'YYYYMMDD' + )}_8h_1.json` + ) +}) + +it('can parse response', async () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')).toString() + let results = await parser({ content, channel, date }) + results = results.map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(4) + + var sampleResult = results[0] + + expect(sampleResult).toMatchObject({ + start: '2024-11-30T22:36:51.000Z', + stop: '2024-11-30T23:57:25.000Z', + category: ['Cine', 'Romance', 'Comedia', 'Comedia Romántica'], + description: + 'Charlie trabaja como director en una escuela de primaria y goza de una placentera existencia junto a sus amigos. A pesar de ello, no es feliz porque cada vez que se enamora pierde la cordura.', + title: 'Loco de amor' + }) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: '{}' + }) + expect(result).toMatchObject({}) +}) diff --git a/sites/osn.com/osn.com.config.js b/sites/osn.com/osn.com.config.js index d85efae5..ece2bf72 100644 --- a/sites/osn.com/osn.com.config.js +++ b/sites/osn.com/osn.com.config.js @@ -5,7 +5,12 @@ const timezone = require('dayjs/plugin/timezone') dayjs.extend(utc) dayjs.extend(timezone) -const packages = { 'OSNTV CONNECT': 3720, 'OSNTV PRIME': 3733, 'ALFA': 1281, 'OSN PINOY PLUS EXTRA': 3519 } +const packages = { + 'OSNTV CONNECT': 3720, + 'OSNTV PRIME': 3733, + ALFA: 1281, + 'OSN PINOY PLUS EXTRA': 3519 +} const country = 'AE' const tz = 'Asia/Dubai' @@ -13,11 +18,9 @@ module.exports = { site: 'osn.com', days: 2, url({ channel, date }) { - return `https://www.osn.com/api/TVScheduleWebService.asmx/time?dt=${ - encodeURIComponent(date.format('MM/DD/YYYY')) - }&co=${country}&ch=${ - channel.site_id - }&mo=false&hr=0` + return `https://www.osn.com/api/TVScheduleWebService.asmx/time?dt=${encodeURIComponent( + date.format('MM/DD/YYYY') + )}&co=${country}&ch=${channel.site_id}&mo=false&hr=0` }, request: { headers({ channel }) { @@ -46,7 +49,9 @@ module.exports = { const axios = require('axios') for (const pkg of Object.values(packages)) { const channels = await axios - .get(`https://www.osn.com/api/tvchannels.ashx?culture=en-US&packageId=${pkg}&country=${country}`) + .get( + `https://www.osn.com/api/tvchannels.ashx?culture=en-US&packageId=${pkg}&country=${country}` + ) .then(response => response.data) .catch(console.error) diff --git a/sites/osn.com/osn.com.test.js b/sites/osn.com/osn.com.test.js index 144a0b5c..fb2fcfbc 100644 --- a/sites/osn.com/osn.com.test.js +++ b/sites/osn.com/osn.com.test.js @@ -28,32 +28,30 @@ it('can generate valid url', () => { }) it('can parse response (ar)', () => { - const result = parser({ date, channel: channelAR, content }) - .map(a => { - a.start = a.start.toJSON() - a.stop = a.stop.toJSON() - return a - }) + const result = parser({ date, channel: channelAR, content }).map(a => { + a.start = a.start.toJSON() + a.stop = a.stop.toJSON() + return a + }) expect(result.length).toBe(29) expect(result[1]).toMatchObject({ start: '2024-11-26T20:50:00.000Z', stop: '2024-11-26T21:45:00.000Z', - title: 'بيت الحلويات: الحلقة 3', + title: 'بيت الحلويات: الحلقة 3' }) }) it('can parse response (en)', () => { - const result = parser({ date, channel: channelEN, content }) - .map(a => { - a.start = a.start.toJSON() - a.stop = a.stop.toJSON() - return a - }) + const result = parser({ date, channel: channelEN, content }).map(a => { + a.start = a.start.toJSON() + a.stop = a.stop.toJSON() + return a + }) expect(result.length).toBe(29) expect(result[1]).toMatchObject({ start: '2024-11-26T20:50:00.000Z', stop: '2024-11-26T21:45:00.000Z', - title: 'House Of Desserts: Episode 3', + title: 'House Of Desserts: Episode 3' }) }) diff --git a/sites/pbsguam.org/pbsguam.org.config.js b/sites/pbsguam.org/pbsguam.org.config.js index 8be09c60..504778df 100644 --- a/sites/pbsguam.org/pbsguam.org.config.js +++ b/sites/pbsguam.org/pbsguam.org.config.js @@ -27,7 +27,7 @@ function parseItems(content, date) { let data try { data = JSON.parse(json) - } catch (error) { + } catch { return [] } diff --git a/sites/pickx.be/pickx.be.config.js b/sites/pickx.be/pickx.be.config.js index 38d1ac21..c6a507d1 100644 --- a/sites/pickx.be/pickx.be.config.js +++ b/sites/pickx.be/pickx.be.config.js @@ -1,174 +1,172 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -let apiVersion - -dayjs.extend(utc) - -module.exports = { - site: 'pickx.be', - days: 2, - setApiVersion: function (version) { - apiVersion = version - }, - getApiVersion: function () { - return apiVersion - }, - fetchApiVersion: fetchApiVersion, - url: async function ({ channel, date }) { - if (!apiVersion) { - await fetchApiVersion() - } - return `https://px-epg.azureedge.net/airings/${apiVersion}/${date.format( - 'YYYY-MM-DD' - )}/channel/${channel.site_id}?timezone=Europe%2FBrussels` - }, - request: { - headers: { - Origin: 'https://www.pickx.be', - Referer: 'https://www.pickx.be/' - } - }, - parser({ channel, content }) { - const programs = [] - if (content) { - const items = JSON.parse(content) - items.forEach(item => { - programs.push({ - title: item.program.title, - sub_title: item.program.episodeTitle, - description: item.program.description, - category: item.program.translatedCategory?.[channel.lang] - ? item.program.translatedCategory[channel.lang] - : item.program.category.split('.')[1], - image: item.program.posterFileName - ? `https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/${item.program.posterFileName}` - : null, - season: item.program.seasonNumber, - episode: item.program.episodeNumber, - actors: item.program.actors, - director: item.program.director ? [item.program.director] : null, - start: dayjs.utc(item.programScheduleStart), - stop: dayjs.utc(item.programScheduleEnd) - }) - }) - } - - return programs - }, - async channels({ lang = '' }) { - const query = { - operationName: 'getChannels', - variables: { - language: lang, - queryParams: {}, - id: '0', - params: { - shouldReadFromCache: true - } - }, - query: `query getChannels($language: String!, $queryParams: ChannelQueryParams, $id: String, $params: ChannelParams) { - channels(language: $language, queryParams: $queryParams, id: $id, params: $params) { - id - channelReferenceNumber - name - callLetter - number - logo { - key - url - __typename - } - language - hd - radio - replayable - ottReplayable - playable - ottPlayable - recordable - subscribed - cloudRecordable - catchUpWindowInHours - isOttNPVREnabled - ottNPVRStart - subscription { - channelRef - subscribed - upselling { - upsellable - packages - __typename - } - __typename - } - packages - __typename - } - }` - } - const result = await axios - .post('https://api.proximusmwc.be/tiams/v3/graphql', query) - .then(r => r.data) - .catch(console.error) - - return ( - result?.data?.channels - .filter( - channel => - !channel.radio && (!lang || channel.language === (lang === 'de' ? 'ger' : lang)) - ) - .map(channel => { - return { - lang: channel.language === 'ger' ? 'de' : channel.language, - site_id: channel.id, - name: channel.name - } - }) || [] - ) - } -} -function fetchApiVersion() { - return new Promise(async (resolve, reject) => { - try { - // you'll never find what happened here :) - // load the pickx page and get the hash from the MWC configuration. - // it's not the best way to get the version but it's the only way to get it. - - const hashUrl = 'https://www.pickx.be/nl/televisie/tv-gids'; - - const hashData = await axios.get(hashUrl) - .then(r => { - const re = /"hashes":\["(.*)"\]/ - const match = r.data.match(re) - if (match && match[1]) { - return match[1] - } else { - throw new Error('React app version hash not found') - } - }) - .catch(console.error); - - const versionUrl = `https://www.pickx.be/api/s-${hashData}` - - const response = await axios.get(versionUrl, { - headers: { - Origin: 'https://www.pickx.be', - Referer: 'https://www.pickx.be/' - } - }) - - if (response.status === 200) { - apiVersion = response.data.version - resolve() - } else { - console.error(`Failed to fetch API version. Status: ${response.status}`) - reject(`Failed to fetch API version. Status: ${response.status}`) - } - } catch (error) { - console.error('Error during fetchApiVersion:', error) - reject(error) - } - }) -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +let apiVersion + +dayjs.extend(utc) + +module.exports = { + site: 'pickx.be', + days: 2, + setApiVersion: function (version) { + apiVersion = version + }, + getApiVersion: function () { + return apiVersion + }, + fetchApiVersion: fetchApiVersion, + url: async function ({ channel, date }) { + if (!apiVersion) { + await fetchApiVersion() + } + return `https://px-epg.azureedge.net/airings/${apiVersion}/${date.format( + 'YYYY-MM-DD' + )}/channel/${channel.site_id}?timezone=Europe%2FBrussels` + }, + request: { + headers: { + Origin: 'https://www.pickx.be', + Referer: 'https://www.pickx.be/' + } + }, + parser({ channel, content }) { + const programs = [] + if (content) { + const items = JSON.parse(content) + items.forEach(item => { + programs.push({ + title: item.program.title, + sub_title: item.program.episodeTitle, + description: item.program.description, + category: item.program.translatedCategory?.[channel.lang] + ? item.program.translatedCategory[channel.lang] + : item.program.category.split('.')[1], + image: item.program.posterFileName + ? `https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/${item.program.posterFileName}` + : null, + season: item.program.seasonNumber, + episode: item.program.episodeNumber, + actors: item.program.actors, + director: item.program.director ? [item.program.director] : null, + start: dayjs.utc(item.programScheduleStart), + stop: dayjs.utc(item.programScheduleEnd) + }) + }) + } + + return programs + }, + async channels({ lang = '' }) { + const query = { + operationName: 'getChannels', + variables: { + language: lang, + queryParams: {}, + id: '0', + params: { + shouldReadFromCache: true + } + }, + query: `query getChannels($language: String!, $queryParams: ChannelQueryParams, $id: String, $params: ChannelParams) { + channels(language: $language, queryParams: $queryParams, id: $id, params: $params) { + id + channelReferenceNumber + name + callLetter + number + logo { + key + url + __typename + } + language + hd + radio + replayable + ottReplayable + playable + ottPlayable + recordable + subscribed + cloudRecordable + catchUpWindowInHours + isOttNPVREnabled + ottNPVRStart + subscription { + channelRef + subscribed + upselling { + upsellable + packages + __typename + } + __typename + } + packages + __typename + } + }` + } + const result = await axios + .post('https://api.proximusmwc.be/tiams/v3/graphql', query) + .then(r => r.data) + .catch(console.error) + + return ( + result?.data?.channels + .filter( + channel => + !channel.radio && (!lang || channel.language === (lang === 'de' ? 'ger' : lang)) + ) + .map(channel => { + return { + lang: channel.language === 'ger' ? 'de' : channel.language, + site_id: channel.id, + name: channel.name + } + }) || [] + ) + } +} +async function fetchApiVersion() { + // you'll never find what happened here :) + // load the pickx page and get the hash from the MWC configuration. + // it's not the best way to get the version but it's the only way to get it. + const hashUrl = 'https://www.pickx.be/nl/televisie/tv-gids' + const hashData = await axios + .get(hashUrl) + .then(r => { + const re = /"hashes":\["(.*)"\]/ + const match = r.data.match(re) + if (match && match[1]) { + return match[1] + } else { + throw new Error('React app version hash not found') + } + }) + .catch(console.error) + + const versionUrl = `https://www.pickx.be/api/s-${hashData}` + const response = await axios.get(versionUrl, { + headers: { + Origin: 'https://www.pickx.be', + Referer: 'https://www.pickx.be/' + } + }) + + return new Promise((resolve, reject) => { + try { + if (response.status === 200) { + apiVersion = response.data.version + resolve() + } else { + console.error(`Failed to fetch API version. Status: ${response.status}`) + reject(`Failed to fetch API version. Status: ${response.status}`) + } + } catch (error) { + console.error('Error during fetchApiVersion:', error) + reject(error) + } + }) +} diff --git a/sites/pickx.be/pickx.be.test.js b/sites/pickx.be/pickx.be.test.js index aa89f09c..05a37ae0 100644 --- a/sites/pickx.be/pickx.be.test.js +++ b/sites/pickx.be/pickx.be.test.js @@ -1,76 +1,69 @@ -jest.mock('./pickx.be.config.js', () => { - const originalModule = jest.requireActual('./pickx.be.config.js') - return { - ...originalModule, - fetchApiVersion: jest.fn(() => Promise.resolve()) - } -}) - -const { - parser, - url, - request, - fetchApiVersion, - setApiVersion, - getApiVersion -} = require('./pickx.be.config.js') - -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -const date = dayjs.utc('2023-12-13').startOf('d') -const channel = { - lang: 'fr', - site_id: 'UID0118', - xmltv_id: 'Vedia.be' -} - -beforeEach(() => { - setApiVersion('mockedApiVersion') -}) - -it('can generate valid url', async () => { - const generatedUrl = await url({ channel, date }) - expect(generatedUrl).toBe( - `https://px-epg.azureedge.net/airings/mockedApiVersion/2023-12-13/channel/UID0118?timezone=Europe%2FBrussels` - ) -}) - -it('can generate valid request headers', () => { - expect(request.headers).toMatchObject({ - Origin: 'https://www.pickx.be', - Referer: 'https://www.pickx.be/' - }) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) - const result = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result[0]).toMatchObject({ - start: '2023-12-12T23:55:00.000Z', - stop: '2023-12-13T00:15:00.000Z', - title: 'Le 22h30', - description: 'Le journal de vivre ici.', - category: 'Info', - image: - 'https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/250_250_4B990CC58066A7B2A660AFA0BDDE5C41.jpg' - }) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: '' - }) - expect(result).toMatchObject([]) -}) +jest.mock('./pickx.be.config.js', () => { + const originalModule = jest.requireActual('./pickx.be.config.js') + return { + ...originalModule, + fetchApiVersion: jest.fn(() => Promise.resolve()) + } +}) + +const { parser, url, request, setApiVersion } = require('./pickx.be.config.js') + +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const date = dayjs.utc('2023-12-13').startOf('d') +const channel = { + lang: 'fr', + site_id: 'UID0118', + xmltv_id: 'Vedia.be' +} + +beforeEach(() => { + setApiVersion('mockedApiVersion') +}) + +it('can generate valid url', async () => { + const generatedUrl = await url({ channel, date }) + expect(generatedUrl).toBe( + 'https://px-epg.azureedge.net/airings/mockedApiVersion/2023-12-13/channel/UID0118?timezone=Europe%2FBrussels' + ) +}) + +it('can generate valid request headers', () => { + expect(request.headers).toMatchObject({ + Origin: 'https://www.pickx.be', + Referer: 'https://www.pickx.be/' + }) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) + const result = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result[0]).toMatchObject({ + start: '2023-12-12T23:55:00.000Z', + stop: '2023-12-13T00:15:00.000Z', + title: 'Le 22h30', + description: 'Le journal de vivre ici.', + category: 'Info', + image: + 'https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/250_250_4B990CC58066A7B2A660AFA0BDDE5C41.jpg' + }) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: '' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/player.ee.co.uk/player.ee.co.uk.config.js b/sites/player.ee.co.uk/player.ee.co.uk.config.js index f8a9411e..6914b017 100644 --- a/sites/player.ee.co.uk/player.ee.co.uk.config.js +++ b/sites/player.ee.co.uk/player.ee.co.uk.config.js @@ -1,102 +1,104 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -module.exports = { - site: 'player.ee.co.uk', - days: 2, - url({ date, channel, hour = 0 }) { - return `https://api.youview.tv/metadata/linear/v2/schedule/by-servicelocator?serviceLocator=${ - encodeURIComponent(channel.site_id) - }&interval=${date.format('YYYY-MM-DD')}T${hour.toString().padStart(2,'0')}Z/PT12H` - }, - request: { - headers: { - Referer: 'https://player.ee.co.uk/' - } - }, - async parser({ content, channel, date }) { - const programs = [] - if (content) { - const schedule = JSON.parse(content) - // fetch next 12 hours schedule - const { url, request } = module.exports - const nextSchedule = await axios - .get(url({ channel, date, hour: 12 }), { headers: request.headers }) - .then(response => response.data) - .catch(console.error) - - if (schedule?.items) { - // merge schedules - if (nextSchedule?.items) { - schedule.items.push(...nextSchedule.items) - } - schedule.items.forEach(item => { - let season, episode - const start = dayjs.utc(item.publishedStartTime) - const stop = start.add(item.publishedDuration, 's') - const description = item.synopsis - if (description) { - const matches = description.trim().match(/\(?S(\d+)[\/\s]Ep(\d+)\)?/) - if (matches) { - if (matches[1]) { - season = parseInt(matches[1]) - } - if (matches[2]) { - episode = parseInt(matches[2]) - } - } - } - programs.push({ - title: item.title, - description, - season, - episode, - start, - stop - }) - }) - } - } - - return programs - }, - async channels() { - const token = - 'eyJkaXNjb3ZlcnlVc2VyR3JvdXBzIjpbIkFMTFVTRVJTIiwiYWxsIiwiaHR0cDovL3JlZmRhd' + - 'GEueW91dmlldy5jb20vbXBlZzdjcy9Zb3VWaWV3QXBwbGljYXRpb25QbGF5ZXJDUy8yMDIxLT' + - 'A5LTEwI2FuZHJvaWRfcnVudGltZS1wcm9maWxlMSIsInRhZzpidC5jb20sMjAxOC0wNy0xMTp' + - '1c2VyZ3JvdXAjR0JSLWJ0X25vd1RWX211bHRpY2FzdCIsInRhZzpidC5jb20sMjAyMS0xMC0y' + - 'NTp1c2VyZ3JvdXAjR0JSLWJ0X2V1cm9zcG9ydCJdLCJyZWdpb25zIjpbIkFMTFJFR0lPTlMiL' + - 'CJHQlIiLCJHQlItRU5HIiwiR0JSLUVORy1sb25kb24iLCJhbGwiXSwic3Vic2V0IjoiMy41Lj' + - 'EvYW5kcm9pZF9ydW50aW1lLXByb2ZpbGUxL0JST0FEQ0FTVF9JUC9HQlItYnRfYnJvYWRiYW5' + - 'kIiwic3Vic2V0cyI6WyIvLy8iLCIvL0JST0FEQ0FTVF9JUC8iLCIzLjUvLy8iXX0=' - const extensions = [ - 'LinearCategoriesExtension', - 'LogicalChannelNumberExtension', - 'BTSubscriptionCodesExtension' - ] - const result = await axios - .get(`https://api.youview.tv/metadata/linear/v2/linear-services`, { - params: { - contentTargetingToken: token, - extensions: extensions.join(',') - }, - headers: module.exports.request.headers - }) - .then(response => response.data) - .catch(console.error) - - return result?.items - .filter(channel => channel.contentTypes.indexOf('tv') >= 0) - .map(channel => { - return { - lang: 'en', - site_id: channel.serviceLocator, - name: channel.fullName - } - }) || [] - } -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +module.exports = { + site: 'player.ee.co.uk', + days: 2, + url({ date, channel, hour = 0 }) { + return `https://api.youview.tv/metadata/linear/v2/schedule/by-servicelocator?serviceLocator=${encodeURIComponent( + channel.site_id + )}&interval=${date.format('YYYY-MM-DD')}T${hour.toString().padStart(2, '0')}Z/PT12H` + }, + request: { + headers: { + Referer: 'https://player.ee.co.uk/' + } + }, + async parser({ content, channel, date }) { + const programs = [] + if (content) { + const schedule = JSON.parse(content) + // fetch next 12 hours schedule + const { url, request } = module.exports + const nextSchedule = await axios + .get(url({ channel, date, hour: 12 }), { headers: request.headers }) + .then(response => response.data) + .catch(console.error) + + if (schedule?.items) { + // merge schedules + if (nextSchedule?.items) { + schedule.items.push(...nextSchedule.items) + } + schedule.items.forEach(item => { + let season, episode + const start = dayjs.utc(item.publishedStartTime) + const stop = start.add(item.publishedDuration, 's') + const description = item.synopsis + if (description) { + const matches = description.trim().match(/\(?S(\d+)[/\s]Ep(\d+)\)?/) + if (matches) { + if (matches[1]) { + season = parseInt(matches[1]) + } + if (matches[2]) { + episode = parseInt(matches[2]) + } + } + } + programs.push({ + title: item.title, + description, + season, + episode, + start, + stop + }) + }) + } + } + + return programs + }, + async channels() { + const token = + 'eyJkaXNjb3ZlcnlVc2VyR3JvdXBzIjpbIkFMTFVTRVJTIiwiYWxsIiwiaHR0cDovL3JlZmRhd' + + 'GEueW91dmlldy5jb20vbXBlZzdjcy9Zb3VWaWV3QXBwbGljYXRpb25QbGF5ZXJDUy8yMDIxLT' + + 'A5LTEwI2FuZHJvaWRfcnVudGltZS1wcm9maWxlMSIsInRhZzpidC5jb20sMjAxOC0wNy0xMTp' + + '1c2VyZ3JvdXAjR0JSLWJ0X25vd1RWX211bHRpY2FzdCIsInRhZzpidC5jb20sMjAyMS0xMC0y' + + 'NTp1c2VyZ3JvdXAjR0JSLWJ0X2V1cm9zcG9ydCJdLCJyZWdpb25zIjpbIkFMTFJFR0lPTlMiL' + + 'CJHQlIiLCJHQlItRU5HIiwiR0JSLUVORy1sb25kb24iLCJhbGwiXSwic3Vic2V0IjoiMy41Lj' + + 'EvYW5kcm9pZF9ydW50aW1lLXByb2ZpbGUxL0JST0FEQ0FTVF9JUC9HQlItYnRfYnJvYWRiYW5' + + 'kIiwic3Vic2V0cyI6WyIvLy8iLCIvL0JST0FEQ0FTVF9JUC8iLCIzLjUvLy8iXX0=' + const extensions = [ + 'LinearCategoriesExtension', + 'LogicalChannelNumberExtension', + 'BTSubscriptionCodesExtension' + ] + const result = await axios + .get('https://api.youview.tv/metadata/linear/v2/linear-services', { + params: { + contentTargetingToken: token, + extensions: extensions.join(',') + }, + headers: module.exports.request.headers + }) + .then(response => response.data) + .catch(console.error) + + return ( + result?.items + .filter(channel => channel.contentTypes.indexOf('tv') >= 0) + .map(channel => { + return { + lang: 'en', + site_id: channel.serviceLocator, + name: channel.fullName + } + }) || [] + ) + } +} diff --git a/sites/player.ee.co.uk/player.ee.co.uk.test.js b/sites/player.ee.co.uk/player.ee.co.uk.test.js index 19c90cda..30424e74 100644 --- a/sites/player.ee.co.uk/player.ee.co.uk.test.js +++ b/sites/player.ee.co.uk/player.ee.co.uk.test.js @@ -1,72 +1,74 @@ -const { parser, url } = require('./player.ee.co.uk.config.js') -const fs = require('fs') -const path = require('path') -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -jest.mock('axios') - -const date = dayjs.utc('2023-12-13').startOf('d') -const channel = { - site_id: 'dvb://233a..6d60', - xmltv_id: 'HGTV.uk' -} - -axios.get.mockImplementation((url, opts) => { - if (url === 'https://api.youview.tv/metadata/linear/v2/schedule/by-servicelocator?serviceLocator=dvb%3A%2F%2F233a..6d60&interval=2023-12-13T12Z/PT12H') { - return Promise.resolve({ - data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/data1.json'))) - }) - } - - return Promise.resolve({ data: '' }) -}) - -it('can generate valid url', () => { - expect(url({ date, channel })).toBe( - 'https://api.youview.tv/metadata/linear/v2/schedule/by-servicelocator?serviceLocator=dvb%3A%2F%2F233a..6d60&interval=2023-12-13T00Z/PT12H' - ) -}) - -it('can parse response', async () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) - const result = (await parser({ content, channel, date })) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - title: 'Bargain Mansions', - description: - 'Tamara and her dad help a recent widow who loves to cook for her family design her dream kitchen, perfect for entertaining and large gatherings. S4/Ep1', - season: 4, - episode: 1, - start: '2023-12-13T13:00:00.000Z', - stop: '2023-12-13T14:00:00.000Z' - }, - { - title: 'Flip Or Flop', - description: - 'Tarek and Christina are contacted by a cash strapped flipper who needs to unload a project house. S2/Ep2', - season: 2, - episode: 2, - start: '2023-12-13T14:00:00.000Z', - stop: '2023-12-13T14:30:00.000Z' - } - ]) -}) - -it('can handle empty guide', async () => { - const result = await parser({ - channel, - date, - content: '' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./player.ee.co.uk.config.js') +const fs = require('fs') +const path = require('path') +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +jest.mock('axios') + +const date = dayjs.utc('2023-12-13').startOf('d') +const channel = { + site_id: 'dvb://233a..6d60', + xmltv_id: 'HGTV.uk' +} + +axios.get.mockImplementation(url => { + if ( + url === + 'https://api.youview.tv/metadata/linear/v2/schedule/by-servicelocator?serviceLocator=dvb%3A%2F%2F233a..6d60&interval=2023-12-13T12Z/PT12H' + ) { + return Promise.resolve({ + data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/data1.json'))) + }) + } + + return Promise.resolve({ data: '' }) +}) + +it('can generate valid url', () => { + expect(url({ date, channel })).toBe( + 'https://api.youview.tv/metadata/linear/v2/schedule/by-servicelocator?serviceLocator=dvb%3A%2F%2F233a..6d60&interval=2023-12-13T00Z/PT12H' + ) +}) + +it('can parse response', async () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json')) + const result = (await parser({ content, channel, date })).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + title: 'Bargain Mansions', + description: + 'Tamara and her dad help a recent widow who loves to cook for her family design her dream kitchen, perfect for entertaining and large gatherings. S4/Ep1', + season: 4, + episode: 1, + start: '2023-12-13T13:00:00.000Z', + stop: '2023-12-13T14:00:00.000Z' + }, + { + title: 'Flip Or Flop', + description: + 'Tarek and Christina are contacted by a cash strapped flipper who needs to unload a project house. S2/Ep2', + season: 2, + episode: 2, + start: '2023-12-13T14:00:00.000Z', + stop: '2023-12-13T14:30:00.000Z' + } + ]) +}) + +it('can handle empty guide', async () => { + const result = await parser({ + channel, + date, + content: '' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/playtv.unifi.com.my/playtv.unifi.com.my.config.js b/sites/playtv.unifi.com.my/playtv.unifi.com.my.config.js index 787d235e..d426eeb5 100644 --- a/sites/playtv.unifi.com.my/playtv.unifi.com.my.config.js +++ b/sites/playtv.unifi.com.my/playtv.unifi.com.my.config.js @@ -43,7 +43,7 @@ module.exports = { const axios = require('axios') const data = await axios .post( - `https://playtv.unifi.com.my:7053/VSP/V3/QueryAllChannel`, + 'https://playtv.unifi.com.my:7053/VSP/V3/QueryAllChannel', { isReturnAllMedia: '0' }, { params: { @@ -74,7 +74,7 @@ function parseItems(content, channel) { const channelData = data.find(i => i.id == channel.site_id) return channelData.items && Array.isArray(channelData.items) ? channelData.items : [] - } catch (err) { + } catch { return [] } } diff --git a/sites/programetv.ro/programetv.ro.config.js b/sites/programetv.ro/programetv.ro.config.js index f55eea31..4a14f0e5 100644 --- a/sites/programetv.ro/programetv.ro.config.js +++ b/sites/programetv.ro/programetv.ro.config.js @@ -46,10 +46,10 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const axios = require('axios') const data = await axios - .get(`https://www.programetv.ro/api/station/index/`) + .get('https://www.programetv.ro/api/station/index/') .then(r => r.data) .catch(console.log) diff --git a/sites/programme-tv.net/programme-tv.net.config.js b/sites/programme-tv.net/programme-tv.net.config.js index 21810bef..4d69ed6e 100644 --- a/sites/programme-tv.net/programme-tv.net.config.js +++ b/sites/programme-tv.net/programme-tv.net.config.js @@ -62,7 +62,7 @@ module.exports = { $('.channelList-listItemsLink').each((i, el) => { const name = $(el).attr('title') const url = $(el).attr('href') - const [, site_id] = url.match(/\/programme\-(.*)\.html$/i) + const [, site_id] = url.match(/\/programme-(.*)\.html$/i) channels.push({ lang: 'fr', diff --git a/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js b/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js index 6d17bb8b..1e697583 100644 --- a/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js +++ b/sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js @@ -51,7 +51,7 @@ module.exports = { return data.programmes.map(item => { const site_id = item.url.replace('/', '') - const name = site_id.replace(/\-/gi, ' ') + const name = site_id.replace(/-/gi, ' ') return { lang: 'fr', diff --git a/sites/programme.tvb.com/programme.tvb.com.config.js b/sites/programme.tvb.com/programme.tvb.com.config.js index c487257e..87c3580e 100644 --- a/sites/programme.tvb.com/programme.tvb.com.config.js +++ b/sites/programme.tvb.com/programme.tvb.com.config.js @@ -13,19 +13,17 @@ module.exports = { site: 'programme.tvb.com', days: 2, url({ channel, date, time = null }) { - return `https://programme.tvb.com/api/schedule?input_date=${ - date.format('YYYYMMDD') - }&network_code=${channel.site_id}&_t=${time ? time : parseInt(Date.now() / 1000)}` + return `https://programme.tvb.com/api/schedule?input_date=${date.format( + 'YYYYMMDD' + )}&network_code=${channel.site_id}&_t=${time ? time : parseInt(Date.now() / 1000)}` }, parser({ content, channel, date }) { const programs = [] const data = content ? JSON.parse(content) : {} if (Array.isArray(data.data?.list)) { - const dt = date.format('YYYY-MM-DD') for (const d of data.data.list) { if (Array.isArray(d.schedules)) { - const schedules = d.schedules - .filter(s => s.network_code === channel.site_id) + const schedules = d.schedules.filter(s => s.network_code === channel.site_id) schedules.forEach((s, i) => { const start = dayjs.tz(s.event_datetime, 'YYYY-MM-DD HH:mm:ss', tz) let stop @@ -64,7 +62,7 @@ module.exports = { if (assets) { queues.push(...assets.map(a => base + '/' + a)) } else { - const metadata = content.match(/e\=(\[(.*?)\])/) + const metadata = content.match(/e=(\[(.*?)\])/) if (metadata) { const infos = eval(metadata[1]) if (Array.isArray(infos)) { diff --git a/sites/programme.tvb.com/programme.tvb.com.test.js b/sites/programme.tvb.com/programme.tvb.com.test.js index 8bcf56f7..558f4600 100644 --- a/sites/programme.tvb.com/programme.tvb.com.test.js +++ b/sites/programme.tvb.com/programme.tvb.com.test.js @@ -34,7 +34,7 @@ it('can parse response (en)', () => { expect(results[1]).toMatchObject({ start: '2024-12-06T15:55:00.000Z', stop: '2024-12-06T16:55:00.000Z', - title: 'Line Walker: Bull Fight#16[Can][PG]', + title: 'Line Walker: Bull Fight#16[Can][PG]' }) }) @@ -51,7 +51,7 @@ it('can parse response (zh)', () => { stop: '2024-12-06T16:55:00.000Z', title: '使徒行者3#16[粵][PG]', description: - '文鼎從淑梅手上救走大聖爺兒子,大聖爺還恩於歡喜,答允支持九指強。崇聯社定下選舉日子,恰巧是韋傑出獄之日,頭目們顧念舊日恩義,紛紛轉投浩洋。浩洋帶亞希逛傢俬店,憧憬二人未來。亞希向家強承認愛上浩洋,要求退出臥底任務。作榮與歡喜暗中會面,將國際犯罪組織「永恆幫」情報交給他。阿火遭家強出賣,到沐足店搶錢。家強逮住阿火,惟被合星誤會而受拘捕。家強把正植遺下的頸鏈和學生證交還,合星意識到家強已知悉正植身世。', + '文鼎從淑梅手上救走大聖爺兒子,大聖爺還恩於歡喜,答允支持九指強。崇聯社定下選舉日子,恰巧是韋傑出獄之日,頭目們顧念舊日恩義,紛紛轉投浩洋。浩洋帶亞希逛傢俬店,憧憬二人未來。亞希向家強承認愛上浩洋,要求退出臥底任務。作榮與歡喜暗中會面,將國際犯罪組織「永恆幫」情報交給他。阿火遭家強出賣,到沐足店搶錢。家強逮住阿火,惟被合星誤會而受拘捕。家強把正植遺下的頸鏈和學生證交還,合星意識到家強已知悉正植身世。' }) }) diff --git a/sites/programtv.onet.pl/programtv.onet.pl.config.js b/sites/programtv.onet.pl/programtv.onet.pl.config.js index 62e4c447..64ff12df 100644 --- a/sites/programtv.onet.pl/programtv.onet.pl.config.js +++ b/sites/programtv.onet.pl/programtv.onet.pl.config.js @@ -50,7 +50,7 @@ module.exports = { $('ul.channelList a').each((i, el) => { const name = $(el).text() const url = $(el).attr('href') - const [, site_id] = url.match(/^\/program\-tv\/(.*)$/i) + const [, site_id] = url.match(/^\/program-tv\/(.*)$/i) channels.push({ lang: 'pl', diff --git a/sites/rev.bs/rev.bs.config.js b/sites/rev.bs/rev.bs.config.js index 67dcd7bd..c956fd1c 100644 --- a/sites/rev.bs/rev.bs.config.js +++ b/sites/rev.bs/rev.bs.config.js @@ -58,7 +58,7 @@ function parseItems(content, channel) { let data try { data = JSON.parse(content) - } catch (error) { + } catch { return [] } diff --git a/sites/rotana.net/rotana.net.config.js b/sites/rotana.net/rotana.net.config.js index 9eb0b930..f38abbff 100644 --- a/sites/rotana.net/rotana.net.config.js +++ b/sites/rotana.net/rotana.net.config.js @@ -11,9 +11,7 @@ dayjs.extend(timezone) dayjs.extend(utc) dayjs.extend(customParseFormat) -doFetch - .setCheckResult(false) - .setDebugger(debug) +doFetch.setCheckResult(false).setDebugger(debug) const tz = 'Asia/Riyadh' const defaultHeaders = { @@ -47,7 +45,7 @@ module.exports = { headers: { ...defaultHeaders, 'X-Requested-With': 'XMLHttpRequest', - cookie: cookies[channel.lang], + cookie: cookies[channel.lang] } } queues.push({ i: item, url, params }) @@ -61,7 +59,7 @@ module.exports = { }, async channels({ lang = 'en' }) { const result = await axios - .get(`https://rotana.net/api/channels`) + .get('https://rotana.net/api/channels') .then(response => response.data) .catch(console.error) @@ -88,34 +86,37 @@ function parseProgram(item, result) { item.description = desc } } - break; + break case 'Element': if (el.name === 'span') { - const [k, v] = $(el).text().split(':').map(a => a.trim()) + const [k, v] = $(el) + .text() + .split(':') + .map(a => a.trim()) switch (k) { case 'Category': case 'التصنيف': - item.category = v; - break; + item.category = v + break case 'Country': case 'البلد': - item.country = v; - break; + item.country = v + break case 'Director': case 'المخرج': - item.director = v; - break; + item.director = v + break case 'Language': case 'اللغة': - item.language = v; - break; + item.language = v + break case 'Release Year': case 'سنة الإصدار': - item.date = v; - break; + item.date = v + break } } - break; + break } } } @@ -142,7 +143,9 @@ function parseItems(content, date) { const heading = top.find('.iq-accordion-title .big-title') if (heading.length) { const progId = top.attr('id') - const title = heading.find('span:eq(1)').text() + const title = heading + .find('span:eq(1)') + .text() .split('\n') .map(a => a.trim()) .join(' ') @@ -151,7 +154,7 @@ function parseItems(content, date) { items.push({ program: progId.substr(progId.indexOf('-') + 1), title: title ? title.trim() : title, - start: `${y}-${m}-${d} ${time.trim()}`, + start: `${y}-${m}-${d} ${time.trim()}` }) } } diff --git a/sites/rotana.net/rotana.net.test.js b/sites/rotana.net/rotana.net.test.js index 17803fdd..ef49b147 100644 --- a/sites/rotana.net/rotana.net.test.js +++ b/sites/rotana.net/rotana.net.test.js @@ -19,7 +19,7 @@ const channel = { } const channelAr = Object.assign({}, channel, { lang: 'ar' }) -axios.get.mockImplementation((url, opts) => { +axios.get.mockImplementation(url => { if (url === 'https://rotana.net/en/streams?channel=439&itemId=736970') { return Promise.resolve({ data: fs.readFileSync(path.resolve(__dirname, '__data__/program_en.html')) @@ -52,11 +52,13 @@ it('can generate valid arabic url', () => { }) it('can parse english response', async () => { - const result = (await parser({ - channel, - date, - content: fs.readFileSync(path.join(__dirname, '/__data__/content_en.html')) - })).map(a => { + const result = ( + await parser({ + channel, + date, + content: fs.readFileSync(path.join(__dirname, '/__data__/content_en.html')) + }) + ).map(a => { a.start = a.start.toJSON() a.stop = a.stop.toJSON() return a @@ -69,17 +71,20 @@ it('can parse english response', async () => { title: 'Khiyana Mashroua', description: 'Hisham knows that his father has given all his wealth to his elder brother. This leads him to plan to kill his brother to make it look like a defense of honor, which he does by killing his wife along...', - image: 'https://s3.eu-central-1.amazonaws.com/rotana.website/spider_storage/1398X1000/1687084565', + image: + 'https://s3.eu-central-1.amazonaws.com/rotana.website/spider_storage/1398X1000/1687084565', category: 'Movie' }) }) it('can parse arabic response', async () => { - const result = (await parser({ - channel: channelAr, - date, - content: fs.readFileSync(path.join(__dirname, '/__data__/content_ar.html')) - })).map(a => { + const result = ( + await parser({ + channel: channelAr, + date, + content: fs.readFileSync(path.join(__dirname, '/__data__/content_ar.html')) + }) + ).map(a => { a.start = a.start.toJSON() a.stop = a.stop.toJSON() return a @@ -92,7 +97,8 @@ it('can parse arabic response', async () => { title: 'خيانة مشروعة', description: 'يعلم هشام البحيري أن والده قد حرمه من الميراث، ووهب كل ثروته لشقيقه اﻷكبر، وهو ما يدفعه لتدبير جريمة قتل شقيقه لتبدو وكأنها دفاع عن الشرف، وذلك حين يقتل هشام زوجته مع شقيقه.', - image: 'https://s3.eu-central-1.amazonaws.com/rotana.website/spider_storage/1398X1000/1687084565', + image: + 'https://s3.eu-central-1.amazonaws.com/rotana.website/spider_storage/1398X1000/1687084565', category: 'فيلم' }) }) diff --git a/sites/rtb.gov.bn/rtb.gov.bn.config.js b/sites/rtb.gov.bn/rtb.gov.bn.config.js index 3af095de..c560f224 100644 --- a/sites/rtb.gov.bn/rtb.gov.bn.config.js +++ b/sites/rtb.gov.bn/rtb.gov.bn.config.js @@ -53,7 +53,7 @@ async function parseItems(buffer) { let data try { data = await pdf(buffer) - } catch (err) { + } catch { return [] } diff --git a/sites/rtp.pt/rtp.pt.config.js b/sites/rtp.pt/rtp.pt.config.js index a2f1e008..0108e255 100644 --- a/sites/rtp.pt/rtp.pt.config.js +++ b/sites/rtp.pt/rtp.pt.config.js @@ -1,5 +1,4 @@ const _ = require('lodash') -const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') diff --git a/sites/s.mxtv.jp/s.mxtv.jp.config.js b/sites/s.mxtv.jp/s.mxtv.jp.config.js index e676d826..d85d3c06 100644 --- a/sites/s.mxtv.jp/s.mxtv.jp.config.js +++ b/sites/s.mxtv.jp/s.mxtv.jp.config.js @@ -1,5 +1,5 @@ const dayjs = require('dayjs') -const duration = require("dayjs/plugin/duration") +const duration = require('dayjs/plugin/duration') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -10,72 +10,74 @@ dayjs.extend(customParseFormat) dayjs.extend(duration) module.exports = { - site: 's.mxtv.jp', - days: 1, - lang: 'ja', - url: function ({ date, channel }) { - const id = `SV${channel.site_id}EPG${date.format('YYYYMMDD')}` - return `https://s.mxtv.jp/bangumi_file/json01/${id}.json` - }, - parser: function ({ content }) { - let programs = [] - const items = parseItems(content) - items.forEach(item => { - programs.push({ - title: item.Event_name, - description: item.Event_text, - category: parseCategory(item), - image: parseImage(item), - start: parseStart(item), - stop: parseStop(item) - }) - }) - return programs - }, - channels() { - return [ - { - lang: 'ja', - site_id: '1', - name: 'Tokyo MX1', - xmltv_id: 'TokyoMX1.jp' - }, - { - lang: 'ja', - site_id: '2', - name: 'Tokyo MX2', - xmltv_id: 'TokyoMX2.jp' - } - ] - } + site: 's.mxtv.jp', + days: 1, + lang: 'ja', + url: function ({ date, channel }) { + const id = `SV${channel.site_id}EPG${date.format('YYYYMMDD')}` + return `https://s.mxtv.jp/bangumi_file/json01/${id}.json` + }, + parser: function ({ content }) { + let programs = [] + const items = parseItems(content) + items.forEach(item => { + programs.push({ + title: item.Event_name, + description: item.Event_text, + category: parseCategory(item), + image: parseImage(item), + start: parseStart(item), + stop: parseStop(item) + }) + }) + return programs + }, + channels() { + return [ + { + lang: 'ja', + site_id: '1', + name: 'Tokyo MX1', + xmltv_id: 'TokyoMX1.jp' + }, + { + lang: 'ja', + site_id: '2', + name: 'Tokyo MX2', + xmltv_id: 'TokyoMX2.jp' + } + ] + } } -function parseImage(item) { - // Should return a string if we can output an image URL - // Might be done with `https://s.mxtv.jp/bangumi/link/weblinkU.csv?1722421896752` ? - return null +function parseImage() { + // Should return a string if we can output an image URL + // Might be done with `https://s.mxtv.jp/bangumi/link/weblinkU.csv?1722421896752` ? + return null } -function parseCategory(item) { - // Should return a string if we can determine the category - // Might be done with `https://s.mxtv.jp/index_set/csv/ranking_bangumi_allU.csv` ? - return null +function parseCategory() { + // Should return a string if we can determine the category + // Might be done with `https://s.mxtv.jp/index_set/csv/ranking_bangumi_allU.csv` ? + return null } function parseStart(item) { - return dayjs.tz(item.Start_time.toString(), 'YYYY年MM月DD日HH時mm分ss秒', 'Asia/Tokyo') + return dayjs.tz(item.Start_time.toString(), 'YYYY年MM月DD日HH時mm分ss秒', 'Asia/Tokyo') } function parseStop(item) { - // Add the duration to the start time - const durationDate = dayjs(item.Duration, 'HH:mm:ss'); - return parseStart(item).add(dayjs.duration({ - hours: durationDate.hour(), - minutes: durationDate.minute(), - seconds: durationDate.second() - })) + // Add the duration to the start time + const durationDate = dayjs(item.Duration, 'HH:mm:ss') + return parseStart(item).add( + dayjs.duration({ + hours: durationDate.hour(), + minutes: durationDate.minute(), + seconds: durationDate.second() + }) + ) } function parseItems(content) { - return JSON.parse(content) || [] + return JSON.parse(content) || [] } diff --git a/sites/s.mxtv.jp/s.mxtv.jp.test.js b/sites/s.mxtv.jp/s.mxtv.jp.test.js index f2219d31..b6891abc 100644 --- a/sites/s.mxtv.jp/s.mxtv.jp.test.js +++ b/sites/s.mxtv.jp/s.mxtv.jp.test.js @@ -11,7 +11,8 @@ const channel = { name: 'Tokyo MX2', xmltv_id: 'TokyoMX2.jp' } -const content = `[{ "Event_id": "0x6a57", "Start_time": "2024年07月27日05時00分00秒", "Duration": "01:00:00", "Event_name": "ヒーリングタイム&ヘッドラインニュース", "Event_text": "ねこの足跡", "Component": "480i 16:9 パンベクトルなし", "Sound": "ステレオ", "Event_detail": ""}]` +const content = + '[{ "Event_id": "0x6a57", "Start_time": "2024年07月27日05時00分00秒", "Duration": "01:00:00", "Event_name": "ヒーリングタイム&ヘッドラインニュース", "Event_text": "ねこの足跡", "Component": "480i 16:9 パンベクトルなし", "Sound": "ステレオ", "Event_detail": ""}]' it('can generate valid url', () => { const result = url({ date, channel }) diff --git a/sites/sat.tv/sat.tv.config.js b/sites/sat.tv/sat.tv.config.js index c0568c5a..8a011a33 100644 --- a/sites/sat.tv/sat.tv.config.js +++ b/sites/sat.tv/sat.tv.config.js @@ -114,7 +114,7 @@ module.exports = { const $ = cheerio.load(data) $('.main-container-channels-events > .container-channel-events').each((i, el) => { const name = $(el).find('.channel-title').text().trim() - const channelId = name.replace(/\s\&\s/gi, ' & ') + const channelId = name.replace(/\s&\s/gi, ' & ') if (!name) return diff --git a/sites/shahid.mbc.net/shahid.mbc.net.config.js b/sites/shahid.mbc.net/shahid.mbc.net.config.js index 0e31cbc2..a847c769 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net.config.js +++ b/sites/shahid.mbc.net/shahid.mbc.net.config.js @@ -1,74 +1,79 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'shahid.mbc.net', - days: 2, - url({ channel, date}) { - return `https://api2.shahid.net/proxy/v2.1/shahid-epg-api/?csvChannelIds=${channel.site_id}&from=${date.format('YYYY-MM-DD')}T00:00:00.000Z&to=${date.format('YYYY-MM-DD')}T23:59:59.999Z&country=SA&language=${channel.lang}&Accept-Language=${channel.lang}` - }, - parser({ content, channel }) { - const programs = parseItems(content, channel) - .map(item => { - return { - title: item.title, - description: item.description, - session: item.seasonNumber, - episode: item.episodeNumber, - start: dayjs.tz(item.actualFrom, 'Asia/Riyadh').toISOString(), - stop: dayjs.tz(item.actualTo, 'Asia/Riyadh').toISOString() - } - }) - - return programs - }, - async channels({lang = 'en'}) { - const axios = require('axios') - const items = [] - let page = 0 - while (true) { - const result = await axios - .get(`https://api2.shahid.net/proxy/v2.1/product/filter?filter=%7B"pageNumber":${page},"pageSize":100,"productType":"LIVESTREAM","productSubType":"LIVE_CHANNEL"%7D&country=SA&language=${lang}&Accept-Language=${lang}`) - .then(response => response.data) - .catch(console.error) - if (result.productList) { - items.push(...result.productList.products) - if (result.productList.hasMore) { - page++ - continue - } - } - break; - } - const channels = items.map(channel => { - return { - lang, - site_id: channel.id, - name: channel.title - } - }) - - return channels - } -} - -function parseItems(content, channel) { - const items = [] - content = content ? JSON.parse(content) : [] - if (content.items) { - content.items.forEach(schedules => { - if (schedules.channelId == channel.site_id) { - items.push(...schedules.items) - return true - } - }) - } - - return items -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'shahid.mbc.net', + days: 2, + url({ channel, date }) { + return `https://api2.shahid.net/proxy/v2.1/shahid-epg-api/?csvChannelIds=${ + channel.site_id + }&from=${date.format('YYYY-MM-DD')}T00:00:00.000Z&to=${date.format( + 'YYYY-MM-DD' + )}T23:59:59.999Z&country=SA&language=${channel.lang}&Accept-Language=${channel.lang}` + }, + parser({ content, channel }) { + const programs = parseItems(content, channel).map(item => { + return { + title: item.title, + description: item.description, + session: item.seasonNumber, + episode: item.episodeNumber, + start: dayjs.tz(item.actualFrom, 'Asia/Riyadh').toISOString(), + stop: dayjs.tz(item.actualTo, 'Asia/Riyadh').toISOString() + } + }) + + return programs + }, + async channels({ lang = 'en' }) { + const axios = require('axios') + const items = [] + let page = 0 + while (true) { + const result = await axios + .get( + `https://api2.shahid.net/proxy/v2.1/product/filter?filter=%7B"pageNumber":${page},"pageSize":100,"productType":"LIVESTREAM","productSubType":"LIVE_CHANNEL"%7D&country=SA&language=${lang}&Accept-Language=${lang}` + ) + .then(response => response.data) + .catch(console.error) + if (result.productList) { + items.push(...result.productList.products) + if (result.productList.hasMore) { + page++ + continue + } + } + break + } + const channels = items.map(channel => { + return { + lang, + site_id: channel.id, + name: channel.title + } + }) + + return channels + } +} + +function parseItems(content, channel) { + const items = [] + content = content ? JSON.parse(content) : [] + if (content.items) { + content.items.forEach(schedules => { + if (schedules.channelId == channel.site_id) { + items.push(...schedules.items) + return true + } + }) + } + + return items +} diff --git a/sites/shahid.mbc.net/shahid.mbc.net.test.js b/sites/shahid.mbc.net/shahid.mbc.net.test.js index 920fff1e..7cc03032 100644 --- a/sites/shahid.mbc.net/shahid.mbc.net.test.js +++ b/sites/shahid.mbc.net/shahid.mbc.net.test.js @@ -1,36 +1,40 @@ -const { url, parser } = require('./shahid.mbc.net.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(utc) - -const date = dayjs.utc('2023-11-11').startOf('d') -const channel = { site_id: '996520', xmltv_id: 'AlAanTV.ae', lang: 'en' } - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - `https://api2.shahid.net/proxy/v2.1/shahid-epg-api/?csvChannelIds=${channel.site_id}&from=${date.format('YYYY-MM-DD')}T00:00:00.000Z&to=${date.format('YYYY-MM-DD')}T23:59:59.999Z&country=SA&language=${channel.lang}&Accept-Language=${channel.lang}` - ) -}) - -it('can parse response', () => { - const content = - '{"items":[{"channelId":"996520","items":[{"actualFrom":"2023-11-11T00:00:00.000+00:00","actualTo":"2023-11-11T00:30:00.000+00:00","description":"The presenter reviews the most prominent episodes of news programs produced by the channel\'s team on a weekly basis, which include the most important global updates and developments at all levels.","duration":null,"emptySlot":false,"episodeNumber":194,"from":"2023-11-11T00:00:00.000+00:00","genres":["TV Show"],"productId":null,"productionYear":null,"productPoster":"https://imagesmbc.whatsonindia.com/dasimages/landscape/1920x1080/F968D4A39DB25793E9EED1BDAFBAD2EA8A8F9B30Z.jpg","productSubType":null,"productType":null,"replay":false,"restritectContent":null,"seasonId":null,"seasonNumber":"1","showId":null,"streamInfo":null,"title":"Menassaatona Fi Osboo\'","to":"2023-11-11T00:30:00.000+00:00"}]}]}' - const result = parser({ content, channel, date }) - - expect(result).toMatchObject([ - { - start: '2023-11-10T21:00:00.000Z', - stop: '2023-11-10T21:30:00.000Z', - title: 'Menassaatona Fi Osboo\'', - description: - 'The presenter reviews the most prominent episodes of news programs produced by the channel\'s team on a weekly basis, which include the most important global updates and developments at all levels.' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ content: '' }) - - expect(result).toMatchObject([]) -}) +const { url, parser } = require('./shahid.mbc.net.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const date = dayjs.utc('2023-11-11').startOf('d') +const channel = { site_id: '996520', xmltv_id: 'AlAanTV.ae', lang: 'en' } + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe( + `https://api2.shahid.net/proxy/v2.1/shahid-epg-api/?csvChannelIds=${ + channel.site_id + }&from=${date.format('YYYY-MM-DD')}T00:00:00.000Z&to=${date.format( + 'YYYY-MM-DD' + )}T23:59:59.999Z&country=SA&language=${channel.lang}&Accept-Language=${channel.lang}` + ) +}) + +it('can parse response', () => { + const content = + '{"items":[{"channelId":"996520","items":[{"actualFrom":"2023-11-11T00:00:00.000+00:00","actualTo":"2023-11-11T00:30:00.000+00:00","description":"The presenter reviews the most prominent episodes of news programs produced by the channel\'s team on a weekly basis, which include the most important global updates and developments at all levels.","duration":null,"emptySlot":false,"episodeNumber":194,"from":"2023-11-11T00:00:00.000+00:00","genres":["TV Show"],"productId":null,"productionYear":null,"productPoster":"https://imagesmbc.whatsonindia.com/dasimages/landscape/1920x1080/F968D4A39DB25793E9EED1BDAFBAD2EA8A8F9B30Z.jpg","productSubType":null,"productType":null,"replay":false,"restritectContent":null,"seasonId":null,"seasonNumber":"1","showId":null,"streamInfo":null,"title":"Menassaatona Fi Osboo\'","to":"2023-11-11T00:30:00.000+00:00"}]}]}' + const result = parser({ content, channel, date }) + + expect(result).toMatchObject([ + { + start: '2023-11-10T21:00:00.000Z', + stop: '2023-11-10T21:30:00.000Z', + title: "Menassaatona Fi Osboo'", + description: + "The presenter reviews the most prominent episodes of news programs produced by the channel's team on a weekly basis, which include the most important global updates and developments at all levels." + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ content: '' }) + + expect(result).toMatchObject([]) +}) diff --git a/sites/singtel.com/singtel.com.config.js b/sites/singtel.com/singtel.com.config.js index 368e4ded..07d3a33e 100644 --- a/sites/singtel.com/singtel.com.config.js +++ b/sites/singtel.com/singtel.com.config.js @@ -40,7 +40,7 @@ module.exports = { const cheerio = require('cheerio') const data = await axios - .get(`https://www.singtel.com/personal/products-services/tv/tv-programme-guide`) + .get('https://www.singtel.com/personal/products-services/tv/tv-programme-guide') .then(r => r.data) .catch(console.log) @@ -62,7 +62,7 @@ function parseItems(content, channel) { try { const data = JSON.parse(content) return data && data[channel.site_id] ? data[channel.site_id] : [] - } catch (err) { + } catch { return [] } } diff --git a/sites/sjonvarp.is/sjonvarp.is.config.js b/sites/sjonvarp.is/sjonvarp.is.config.js index 0721d0c0..7fd6c33f 100644 --- a/sites/sjonvarp.is/sjonvarp.is.config.js +++ b/sites/sjonvarp.is/sjonvarp.is.config.js @@ -44,7 +44,7 @@ module.exports = { const cheerio = require('cheerio') const data = await axios - .get(`https://sjonvarp.is/`) + .get('https://sjonvarp.is/') .then(r => r.data) .catch(console.log) diff --git a/sites/sky.com/sky.com.config.js b/sites/sky.com/sky.com.config.js index cf024178..3183834d 100644 --- a/sites/sky.com/sky.com.config.js +++ b/sites/sky.com/sky.com.config.js @@ -12,9 +12,7 @@ module.exports = { site: 'sky.com', days: 2, url({ date, channel }) { - return `https://awk.epgsky.com/hawk/linear/schedule/${ - date.format('YYYYMMDD') - }/${ + return `https://awk.epgsky.com/hawk/linear/schedule/${date.format('YYYYMMDD')}/${ channel.site_id }` }, @@ -27,19 +25,18 @@ module.exports = { .filter(schedule => schedule.sid === channel.site_id) .forEach(schedule => { if (Array.isArray(schedule.events)) { - schedule.events - .forEach(event => { - const start = dayjs.utc(event.st * 1000) - const stop = start.add(event.d, 's') - programs.push({ - title: event.t, - description: event.sy, - season: event.seasonnumber, - episode: event.episodenumber, - start, - stop - }) + schedule.events.forEach(event => { + const start = dayjs.utc(event.st * 1000) + const stop = start.add(event.d, 's') + programs.push({ + title: event.t, + description: event.sy, + season: event.seasonnumber, + episode: event.episodenumber, + start, + stop }) + }) } }) } @@ -55,10 +52,12 @@ module.exports = { if (queue.t === 'r') { const $ = cheerio.load(res) const initialData = JSON.parse(decodeURIComponent($('#initialData').text())) - initialData.state.epgData.regions - .forEach(region => { - queues.push({ t: 'c', url: `https://awk.epgsky.com/hawk/linear/services/${region.bouquet}/${region.subBouquet}` }) + initialData.state.epgData.regions.forEach(region => { + queues.push({ + t: 'c', + url: `https://awk.epgsky.com/hawk/linear/services/${region.bouquet}/${region.subBouquet}` }) + }) } // process channels if (queue.t === 'c') { diff --git a/sites/sky.com/sky.com.test.js b/sites/sky.com/sky.com.test.js index c4cce548..4ac89758 100644 --- a/sites/sky.com/sky.com.test.js +++ b/sites/sky.com/sky.com.test.js @@ -15,9 +15,7 @@ const channel = { } it('can generate valid url', () => { - expect(url({ channel, date })).toBe( - 'https://awk.epgsky.com/hawk/linear/schedule/20241214/4086' - ) + expect(url({ channel, date })).toBe('https://awk.epgsky.com/hawk/linear/schedule/20241214/4086') }) it('can parse response', () => { @@ -34,7 +32,7 @@ it('can parse response', () => { stop: '2024-12-13T23:00:00.000Z', title: 'The UnXplained With...', description: - 'The Hunt for Jack the Ripper: Jack the Ripper\'s identity has eluded police, historians and armchair detectives for over a century. What do we know about the notorious killer? (S3, ep 21)', + "The Hunt for Jack the Ripper: Jack the Ripper's identity has eluded police, historians and armchair detectives for over a century. What do we know about the notorious killer? (S3, ep 21)", season: 4, episode: 14 }) diff --git a/sites/skylife.co.kr/skylife.co.kr.test.js b/sites/skylife.co.kr/skylife.co.kr.test.js index 8ac317ee..c35e85d4 100644 --- a/sites/skylife.co.kr/skylife.co.kr.test.js +++ b/sites/skylife.co.kr/skylife.co.kr.test.js @@ -1,4 +1,4 @@ -const { parser, url, request } = require('./skylife.co.kr.config.js') +const { parser, url } = require('./skylife.co.kr.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') diff --git a/sites/skyperfectv.co.jp/__data__/content.html b/sites/skyperfectv.co.jp/__data__/content.html new file mode 100644 index 00000000..aa569a31 --- /dev/null +++ b/sites/skyperfectv.co.jp/__data__/content.html @@ -0,0 +1 @@ +番組表(アニメシアターX(AT-X))|スカパー!

現在マイリストを更新中です。

現在マイリストに登録中です。

現在マイリストから削除中です。

番組放送予定表

基本プラン
選択した日付から1週間の番組表を表示します
番組放送予定表
基本プラン
選択した日付から1週間の番組表を表示します

前週

次週

午前(4時~)

午後(12時~)

深夜(24時~)

  • 04:00〜04:30

    ヴァルキリードライヴマーメイド #06

    番組サムネイル
            newAppBannerImgnewAppBannerImg

            番組情報は予告なく変更となる場合がありますのでご了承ください

            ・このサイトでは、当日から1週間分はEPGと同等の番組情報が表示され、その先1ヶ月後まではガイド誌(有料)と同等の番組情報が表示されます。番組や放送予定は予告なく変更される場合がありますのでご了承ください。
            ・このサイトは、ウェブブラウザーMicrosoftEdge最新版、GoogleChrome最新版、Firefox最新版、Safari最新版での動作を確認しております。上記以外のウェブブラウザーで閲覧されますと、表示の乱れや予期せぬ動作を起こす場合がございますので、予めご了承ください。

            ##ERROR_MSG##

            ##ERROR_MSG##

            ##ERROR_MSG##

            マイリストから削除してもよいですか?

            ログインをしてお気に入り番組を登録しよう!
            Myスカパー!にログインをすると、マイリストにお気に入り番組リストを作成することができます!
            ログイン新規会員登録
            マイリストに番組を登録できません
            ##ERROR_MSG##
            \ No newline at end of file diff --git a/sites/skyperfectv.co.jp/__data__/empty.html b/sites/skyperfectv.co.jp/__data__/empty.html new file mode 100644 index 00000000..9560ec25 --- /dev/null +++ b/sites/skyperfectv.co.jp/__data__/empty.html @@ -0,0 +1 @@ +番組表(アニメシアターX(AT-X))|スカパー!

            現在マイリストを更新中です。

            現在マイリストに登録中です。

            現在マイリストから削除中です。

            番組放送予定表

            基本プラン
            選択した日付から1週間の番組表を表示します
            番組放送予定表
            基本プラン
            選択した日付から1週間の番組表を表示します

            前週

            次週

            午前(4時~)

            午後(12時~)

            深夜(24時~)

                        newAppBannerImgnewAppBannerImg

                        番組情報は予告なく変更となる場合がありますのでご了承ください

                        ・このサイトでは、当日から1週間分はEPGと同等の番組情報が表示され、その先1ヶ月後まではガイド誌(有料)と同等の番組情報が表示されます。番組や放送予定は予告なく変更される場合がありますのでご了承ください。
                        ・このサイトは、ウェブブラウザーMicrosoftEdge最新版、GoogleChrome最新版、Firefox最新版、Safari最新版での動作を確認しております。上記以外のウェブブラウザーで閲覧されますと、表示の乱れや予期せぬ動作を起こす場合がございますので、予めご了承ください。

                        ##ERROR_MSG##

                        ##ERROR_MSG##

                        ##ERROR_MSG##

                        マイリストから削除してもよいですか?

                        ログインをしてお気に入り番組を登録しよう!
                        Myスカパー!にログインをすると、マイリストにお気に入り番組リストを作成することができます!
                        ログイン新規会員登録
                        マイリストに番組を登録できません
                        ##ERROR_MSG##
                        \ No newline at end of file diff --git a/sites/skyperfectv.co.jp/skyperfectv.co.jp.config.js b/sites/skyperfectv.co.jp/skyperfectv.co.jp.config.js index c2d4aa23..1963124d 100644 --- a/sites/skyperfectv.co.jp/skyperfectv.co.jp.config.js +++ b/sites/skyperfectv.co.jp/skyperfectv.co.jp.config.js @@ -12,103 +12,110 @@ dayjs.extend(customParseFormat) dayjs.extend(duration) const exported = { - site: 'skyperfectv.co.jp', - days: 1, - lang: 'ja', - url: function ({ date, channel }) { - let [type, ...code] = channel.site_id.split('_') - code = code.join('_') - return `https://www.skyperfectv.co.jp/program/schedule/${type}/channel:${code}/date:${date.format('YYMMDD')}` - }, - logo: function ({ channel }) { - return `https://www.skyperfectv.co.jp/library/common/img/channel/icon/basic/m_${channel.site_id.toLowerCase()}.gif` - }, - // Specific function that permits to gather NSFW channels (needs confirmation) - async fetchSchedule({ date, channel }) { - const url = exported.url({ date, channel }) - const response = await axios.get(url, { - headers: { - 'Cookie': 'adult_auth=true' - } + site: 'skyperfectv.co.jp', + days: 1, + lang: 'ja', + url: function ({ date, channel }) { + let [type, ...code] = channel.site_id.split('_') + code = code.join('_') + return `https://www.skyperfectv.co.jp/program/schedule/${type}/channel:${code}/date:${date.format( + 'YYMMDD' + )}` + }, + logo: function ({ channel }) { + return `https://www.skyperfectv.co.jp/library/common/img/channel/icon/basic/m_${channel.site_id.toLowerCase()}.gif` + }, + // Specific function that permits to gather NSFW channels (needs confirmation) + async fetchSchedule({ date, channel }) { + const url = exported.url({ date, channel }) + const response = await axios.get(url, { + headers: { + Cookie: 'adult_auth=true' + } + }) + return response.data + }, + parser({ content, date }) { + const $ = cheerio.load(content) + const programs = [] + + const sections = [ + { id: 'js-am', addition: 0 }, + { id: 'js-pm', addition: 0 }, + { id: 'js-md', addition: 1 } + ] + + sections.forEach(({ id, addition }) => { + $(`#${id} > td`).each((index, element) => { + // `td` is a column for a day + // the next `td` will be the next day + const today = date.add(index + addition, 'd').tz('Asia/Tokyo') + + const parseTime = timeString => { + // timeString is in the format "HH:mm" + // replace `today` with the time from timeString + const [hour, minute] = timeString.split(':').map(Number) + return today.hour(hour).minute(minute) + } + + const $element = $(element) // Wrap element with Cheerio + $element.find('.p-program__item').each((itemIndex, itemElement) => { + const $itemElement = $(itemElement) // Wrap itemElement with Cheerio + const [start, stop] = $itemElement + .find('.p-program__range') + .first() + .text() + .split('〜') + .map(parseTime) + const title = $itemElement.find('.p-program__name').first().text() + const image = $itemElement.find('.js-program_thumbnail').first().attr('data-lazysrc') + programs.push({ + title, + start, + stop, + image + }) }) - return response.data - }, - parser({ content, date }) { - const $ = cheerio.load(content) - const programs = [] + }) + }) - const sections = [ - { id: 'js-am', addition: 0 }, - { id: 'js-pm', addition: 0 }, - { id: 'js-md', addition: 1 } - ] + return programs + }, + async channels() { + const pageParser = (content, type) => { + // type: "basic" | "premium" + // Returns an array of channel objects - sections.forEach(({ id, addition }) => { - $(`#${id} > td`).each((index, element) => { - // `td` is a column for a day - // the next `td` will be the next day - const today = date.add(index + addition, 'd').tz('Asia/Tokyo') + const $ = cheerio.load(content) + const channels = [] - const parseTime = (timeString) => { - // timeString is in the format "HH:mm" - // replace `today` with the time from timeString - const [hour, minute] = timeString.split(':').map(Number) - return today.hour(hour).minute(minute) - } + $('.p-channel').each((index, element) => { + const site_id = `${type}_${$(element).find('.p-channel__id').text()}` + const name = $(element).find('.p-channel__name').text() + channels.push({ site_id, name, lang: 'ja' }) + }) - const $element = $(element) // Wrap element with Cheerio - $element.find('.p-program__item').each((itemIndex, itemElement) => { - const $itemElement = $(itemElement) // Wrap itemElement with Cheerio - const [start, stop] = $itemElement.find('.p-program__range').first().text().split('〜').map(parseTime) - const title = $itemElement.find('.p-program__name').first().text() - const image = $itemElement.find('.js-program_thumbnail').first().attr('data-lazysrc') - programs.push({ - title, - start, - stop, - image - }) - }) - }) - }) - - return programs - }, - async channels() { - const pageParser = (content, type) => { - // type: "basic" | "premium" - // Returns an array of channel objects - - const $ = cheerio.load(content) - const channels = [] - - $('.p-channel').each((index, element) => { - const site_id = `${type}_${$(element).find('.p-channel__id').text()}` - const name = $(element).find('.p-channel__name').text() - channels.push({ site_id, name, lang: 'ja' }) - }) - - return channels - } - - const getChannels = async (type) => { - const response = await axios.get(`https://www.skyperfectv.co.jp/program/schedule/${type}/`, { - headers: { - 'Cookie': 'adult_auth=true;' - } - }) - return pageParser(response.data, type) - } - - const fetchAllChannels = async () => { - const basicChannels = await getChannels('basic') - const premiumChannels = await getChannels('premium') - const results = [...basicChannels, ...premiumChannels] - return results - } - - return await fetchAllChannels() + return channels } + + const getChannels = async type => { + const response = await axios.get(`https://www.skyperfectv.co.jp/program/schedule/${type}/`, { + headers: { + Cookie: 'adult_auth=true;' + } + }) + return pageParser(response.data, type) + } + + const fetchAllChannels = async () => { + const basicChannels = await getChannels('basic') + const premiumChannels = await getChannels('premium') + const results = [...basicChannels, ...premiumChannels] + return results + } + + return await fetchAllChannels() + } } -module.exports = exported \ No newline at end of file +module.exports = exported diff --git a/sites/skyperfectv.co.jp/skyperfectv.co.jp.test.js b/sites/skyperfectv.co.jp/skyperfectv.co.jp.test.js index eae08e3f..c70ae27c 100644 --- a/sites/skyperfectv.co.jp/skyperfectv.co.jp.test.js +++ b/sites/skyperfectv.co.jp/skyperfectv.co.jp.test.js @@ -1,4 +1,6 @@ const { parser, url } = require('./skyperfectv.co.jp.config.js') +const fs = require('fs') +const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -12,13 +14,13 @@ const channel = { xmltv_id: 'WOWOWCinema.jp' } -const content = ` -番組表(アニメシアターX(AT-X))|スカパー!

                        現在マイリストを更新中です。

                        現在マイリストに登録中です。

                        現在マイリストから削除中です。

                        番組放送予定表

                        基本プラン
                        選択した日付から1週間の番組表を表示します
                        番組放送予定表
                        基本プラン
                        選択した日付から1週間の番組表を表示します

                        前週

                        次週

                        午前(4時~)

                        午後(12時~)

                        深夜(24時~)

                        • 04:00〜04:30

                          ヴァルキリードライヴマーメイド #06

                          番組サムネイル
                                  newAppBannerImgnewAppBannerImg

                                  番組情報は予告なく変更となる場合がありますのでご了承ください

                                  ・このサイトでは、当日から1週間分はEPGと同等の番組情報が表示され、その先1ヶ月後まではガイド誌(有料)と同等の番組情報が表示されます。番組や放送予定は予告なく変更される場合がありますのでご了承ください。
                                  ・このサイトは、ウェブブラウザーMicrosoftEdge最新版、GoogleChrome最新版、Firefox最新版、Safari最新版での動作を確認しております。上記以外のウェブブラウザーで閲覧されますと、表示の乱れや予期せぬ動作を起こす場合がございますので、予めご了承ください。

                                  ##ERROR_MSG##

                                  ##ERROR_MSG##

                                  ##ERROR_MSG##

                                  マイリストから削除してもよいですか?

                                  ログインをしてお気に入り番組を登録しよう!
                                  Myスカパー!にログインをすると、マイリストにお気に入り番組リストを作成することができます!
                                  ログイン新規会員登録
                                  マイリストに番組を登録できません
                                  ##ERROR_MSG##
                                  -` +const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) it('can generate valid url', () => { const result = url({ date, channel }) - expect(result).toBe('https://www.skyperfectv.co.jp/program/schedule/basic/channel:BS193/date:240801') + expect(result).toBe( + 'https://www.skyperfectv.co.jp/program/schedule/basic/channel:BS193/date:240801' + ) }) it('can parse response', async () => { @@ -33,15 +35,13 @@ it('can parse response', async () => { start: '2024-07-31T19:00:00.000Z', // UTC time stop: '2024-07-31T19:30:00.000Z', // UTC title: 'ヴァルキリードライヴマーメイド #06', - image: 'https://pm-img-ap.skyperfectv.co.jp/uploads/thumbnail/image/11301805/S_BC929697780313_be7975d4e26a4cad9b89fc6c94807e38_20240613144158569.jpg' + image: + 'https://pm-img-ap.skyperfectv.co.jp/uploads/thumbnail/image/11301805/S_BC929697780313_be7975d4e26a4cad9b89fc6c94807e38_20240613144158569.jpg' } ]) }) - -const empty = ` -番組表(アニメシアターX(AT-X))|スカパー!

                                  現在マイリストを更新中です。

                                  現在マイリストに登録中です。

                                  現在マイリストから削除中です。

                                  番組放送予定表

                                  基本プラン
                                  選択した日付から1週間の番組表を表示します
                                  番組放送予定表
                                  基本プラン
                                  選択した日付から1週間の番組表を表示します

                                  前週

                                  次週

                                  午前(4時~)

                                  午後(12時~)

                                  深夜(24時~)

                                              newAppBannerImgnewAppBannerImg

                                              番組情報は予告なく変更となる場合がありますのでご了承ください

                                              ・このサイトでは、当日から1週間分はEPGと同等の番組情報が表示され、その先1ヶ月後まではガイド誌(有料)と同等の番組情報が表示されます。番組や放送予定は予告なく変更される場合がありますのでご了承ください。
                                              ・このサイトは、ウェブブラウザーMicrosoftEdge最新版、GoogleChrome最新版、Firefox最新版、Safari最新版での動作を確認しております。上記以外のウェブブラウザーで閲覧されますと、表示の乱れや予期せぬ動作を起こす場合がございますので、予めご了承ください。

                                              ##ERROR_MSG##

                                              ##ERROR_MSG##

                                              ##ERROR_MSG##

                                              マイリストから削除してもよいですか?

                                              ログインをしてお気に入り番組を登録しよう!
                                              Myスカパー!にログインをすると、マイリストにお気に入り番組リストを作成することができます!
                                              ログイン新規会員登録
                                              マイリストに番組を登録できません
                                              ##ERROR_MSG##
                                              -` +const empty = fs.readFileSync(path.resolve(__dirname, '__data__/empty.html')) it('can handle empty guide', async () => { const result = parser({ diff --git a/sites/snrt.ma/snrt.ma.config.js b/sites/snrt.ma/snrt.ma.config.js index f1251b4e..06b692f7 100644 --- a/sites/snrt.ma/snrt.ma.config.js +++ b/sites/snrt.ma/snrt.ma.config.js @@ -1,97 +1,86 @@ -const cheerio = require('cheerio') -const { DateTime } = require('luxon') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -const channel = [{ site_id: '1208', xmltv_id: 'AlAoula.ma', lang: 'ar' }, - { site_id: '4069', xmltv_id: 'Laayoune.ma', lang: 'ar' }, - { site_id: '4070', xmltv_id: 'Arryadia.ma', lang: 'ar' }, - { site_id: '4071', xmltv_id: 'Athaqafia.ma', lang: 'ar' }, - { site_id: '4072', xmltv_id: 'AlMaghribia.ma', lang: 'ar' }, - { site_id: '4073', xmltv_id: 'Assadissa.ma', lang: 'ar' }, - { site_id: '4075', xmltv_id: 'Tamazight.ma', lang: 'ar' }] - - -module.exports = { - site: 'snrt.ma', - channels: 'snrt.ma.channels.xml', - days: 2, - url: function ({ channel }) { - return `https://www.snrt.ma/ar/node/${channel.site_id}` - }, - request: { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - data: function ({ date }) { - const params = new URLSearchParams() - params.append('_method', 'POST') - params.append('data-date', date.format('YYYYMMDD')) - params.append('current_date', date.format('YYYYMMDD')) - - return params - } - }, - parser: function ({ content, date }) { - const programs = [] - const items = parseItems(content) - items.forEach(item => { - const prev = programs[programs.length - 1] - const $item = cheerio.load(item) - let start = parseStart($item, date) - if (prev) { - if (start.isBefore(prev.start)) { - start = start.add(1, 'd') - date = date.add(1, 'd') - } - prev.stop = start - } - const stop = start.add(30, 'm') - programs.push({ - title: parseTitle($item), - description: parseDescription($item), - category: parseCategory($item), - start, - stop - }) - }) - - return programs - } -} - -function parseStart($item, date) { - const timeString = $item('.grille-time').text().trim() - const [hours, minutes] = timeString.split('H').map(Number) - const formattedTime = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:00` - - const dateString = `${date.format('YYYY-MM-DD')} ${formattedTime}` - - return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm:ss', 'Africa/Casablanca') -} - - -function parseTitle($item) { - return $item('.program-title-sm').text().trim() -} - -function parseDescription($item) { - return $item('.program-description-sm').text().trim() -} - -function parseCategory($item) { - return $item('.genre-first').text().trim() -} - -function parseItems(content) { - const $ = cheerio.load(content) - - return $('.grille-line').toArray() -} \ No newline at end of file +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'snrt.ma', + channels: 'snrt.ma.channels.xml', + days: 2, + url: function ({ channel }) { + return `https://www.snrt.ma/ar/node/${channel.site_id}` + }, + request: { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + data: function ({ date }) { + const params = new URLSearchParams() + params.append('_method', 'POST') + params.append('data-date', date.format('YYYYMMDD')) + params.append('current_date', date.format('YYYYMMDD')) + + return params + } + }, + parser: function ({ content, date }) { + const programs = [] + const items = parseItems(content) + items.forEach(item => { + const prev = programs[programs.length - 1] + const $item = cheerio.load(item) + let start = parseStart($item, date) + if (prev) { + if (start.isBefore(prev.start)) { + start = start.add(1, 'd') + date = date.add(1, 'd') + } + prev.stop = start + } + const stop = start.add(30, 'm') + programs.push({ + title: parseTitle($item), + description: parseDescription($item), + category: parseCategory($item), + start, + stop + }) + }) + + return programs + } +} + +function parseStart($item, date) { + const timeString = $item('.grille-time').text().trim() + const [hours, minutes] = timeString.split('H').map(Number) + const formattedTime = `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}:00` + + const dateString = `${date.format('YYYY-MM-DD')} ${formattedTime}` + + return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm:ss', 'Africa/Casablanca') +} + +function parseTitle($item) { + return $item('.program-title-sm').text().trim() +} + +function parseDescription($item) { + return $item('.program-description-sm').text().trim() +} + +function parseCategory($item) { + return $item('.genre-first').text().trim() +} + +function parseItems(content) { + const $ = cheerio.load(content) + + return $('.grille-line').toArray() +} diff --git a/sites/snrt.ma/snrt.ma.test.js b/sites/snrt.ma/snrt.ma.test.js index b97ac1f3..97dcf197 100644 --- a/sites/snrt.ma/snrt.ma.test.js +++ b/sites/snrt.ma/snrt.ma.test.js @@ -1,6 +1,4 @@ const { parser, url } = require('./snrt.ma.config.js') -const cheerio = require('cheerio') -const { DateTime } = require('luxon') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') @@ -25,16 +23,14 @@ it('can parse response', () => { }) expect(results[0]).toMatchObject({ - "category": "القرآن الكريم", - "description": "", - "start": "2024-12-19T06:00:00.000Z", - "stop": "2024-12-19T06:10:00.000Z", - "stop": "2024-12-19T06:30:00.000Z", - "title": "ﺍﻟﺴﻼﻡ ﺍﻟﻮﻃﻨﻲ + ﺍﻟﻘﺮﺁﻥ ﺍﻟﻜﺮﻳﻢ" + category: 'القرآن الكريم', + description: '', + start: '2024-12-19T06:00:00.000Z', + stop: '2024-12-19T06:30:00.000Z', + title: 'ﺍﻟﺴﻼﻡ ﺍﻟﻮﻃﻨﻲ + ﺍﻟﻘﺮﺁﻥ ﺍﻟﻜﺮﻳﻢ' }) }) - it('can handle empty guide', () => { const result = parser({ date, @@ -42,4 +38,4 @@ it('can handle empty guide', () => { content: '' }) expect(result).toMatchObject([]) -}) \ No newline at end of file +}) diff --git a/sites/starhubtvplus.com/starhubtvplus.com.config.js b/sites/starhubtvplus.com/starhubtvplus.com.config.js index c93af434..c9710bae 100644 --- a/sites/starhubtvplus.com/starhubtvplus.com.config.js +++ b/sites/starhubtvplus.com/starhubtvplus.com.config.js @@ -9,15 +9,9 @@ module.exports = { url({ date, channel }) { return `https://waf-starhub-metadata-api-p001.ifs.vubiquity.com/v3.1/epg/schedules?locale=${ languages[channel.lang] - }&locale_default=${ - languages[channel.lang] - }&device=1&in_channel_id=${ + }&locale_default=${languages[channel.lang]}&device=1&in_channel_id=${ channel.site_id - }>_end=${ - date.unix() - }<_start=${ - date.add(1, 'd').unix() - }&limit=100&page=1` + }>_end=${date.unix()}<_start=${date.add(1, 'd').unix()}&limit=100&page=1` }, async parser({ content, date, channel }) { const programs = [] @@ -29,7 +23,11 @@ module.exports = { } if (res.page && res.page.current < res.page.total) { res = await axios - .get(module.exports.url({ date, channel }).replace(/page=(\d+)/, `page=${res.page.current + 1}`)) + .get( + module.exports + .url({ date, channel }) + .replace(/page=(\d+)/, `page=${res.page.current + 1}`) + ) .then(r => r.data) .catch(console.error) } else { @@ -39,7 +37,7 @@ module.exports = { } const season = s => { if (s) { - const [ , , n ] = s.match(/(S|Season )(\d+)/) || [null, null, null] + const [, , n] = s.match(/(S|Season )(\d+)/) || [null, null, null] if (n) { return parseInt(n) } @@ -66,11 +64,9 @@ module.exports = { let page = 1 while (true) { const items = await axios - .get(`https://waf-starhub-metadata-api-p001.ifs.vubiquity.com/v3.1/epg/channels?locale=${ - languages[lang] - }&locale_default=${ - languages[lang] - }&device=1&limit=50&page=${page}`) + .get( + `https://waf-starhub-metadata-api-p001.ifs.vubiquity.com/v3.1/epg/channels?locale=${languages[lang]}&locale_default=${languages[lang]}&device=1&limit=50&page=${page}` + ) .then(r => r.data) .catch(console.error) if (items.resources) { diff --git a/sites/starhubtvplus.com/starhubtvplus.com.test.js b/sites/starhubtvplus.com/starhubtvplus.com.test.js index 71561072..78d97c5b 100644 --- a/sites/starhubtvplus.com/starhubtvplus.com.test.js +++ b/sites/starhubtvplus.com/starhubtvplus.com.test.js @@ -1,4 +1,4 @@ -const { parser, url, request } = require('./starhubtvplus.com.config.js') +const { parser, url } = require('./starhubtvplus.com.config.js') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -36,9 +36,12 @@ it('can parse response', async () => { title: 'Northern Rexposure', subTitle: 'Hudson & Rex (Season 5)', description: - 'When Jesse\'s sister contacts him for help, he, Sarah and Rex head to Northern Ontario and find themselves in the middle of a deadly situation.', + "When Jesse's sister contacts him for help, he, Sarah and Rex head to Northern Ontario and find themselves in the middle of a deadly situation.", category: ['Drama'], - image: ['https://poster.starhubgo.com/poster/ch511_hudson_rex5.jpg?w=960&h=540', 'https://poster.starhubgo.com/poster/ch511_hudson_rex5.jpg?w=341&h=192'], + image: [ + 'https://poster.starhubgo.com/poster/ch511_hudson_rex5.jpg?w=960&h=540', + 'https://poster.starhubgo.com/poster/ch511_hudson_rex5.jpg?w=341&h=192' + ], season: 5, episode: 15, rating: 'PG13' diff --git a/sites/startimestv.com/startimestv.com.config.js b/sites/startimestv.com/startimestv.com.config.js index 83b6a4d4..214e28b1 100644 --- a/sites/startimestv.com/startimestv.com.config.js +++ b/sites/startimestv.com/startimestv.com.config.js @@ -8,9 +8,7 @@ const debug = require('debug')('site:startimestv.com') dayjs.extend(utc) dayjs.extend(customParseFormat) -doFetch - .setDebugger(debug) - .setMaxWorker(5) +doFetch.setDebugger(debug).setMaxWorker(5) module.exports = { site: 'startimestv.com', @@ -24,7 +22,8 @@ module.exports = { const programs = [] if (content) { const $ = cheerio.load(content) - $('.box .mask').toArray() + $('.box .mask') + .toArray() .forEach(el => { let title = parseText($(el).find('h4')) const [s, e] = title.substr(0, title.indexOf(' ')).split('-') || [null, null] @@ -53,7 +52,8 @@ module.exports = { // process area-id if (queue.t === 'a') { const $ = cheerio.load(res) - $('dd.update-areaID').toArray() + $('dd.update-areaID') + .toArray() .forEach(el => { const dd = $(el) const areaId = dd.attr('area-id') @@ -72,7 +72,8 @@ module.exports = { if (queue.t === 's') { if (res) { const $ = cheerio.load(res) - $(`.channl .c`).toArray() + $('.channl .c') + .toArray() .forEach(el => { // only process channel with schedule only const clazz = $(el).attr('class') @@ -98,13 +99,10 @@ module.exports = { } function parseText($item) { - let text = $item.text() - .replace(/\t/g, '') - .replace(/\n/g, ' ') - .trim() + let text = $item.text().replace(/\t/g, '').replace(/\n/g, ' ').trim() while (true) { - if (text.match(/ /)) { - text = text.replace(/ /g, ' ') + if (text.match(/\s\s/)) { + text = text.replace(/\s\s/g, ' ') continue } break diff --git a/sites/streamingtvguides.com/streamingtvguides.com.config.js b/sites/streamingtvguides.com/streamingtvguides.com.config.js index 0807c0d6..440ca9e1 100644 --- a/sites/streamingtvguides.com/streamingtvguides.com.config.js +++ b/sites/streamingtvguides.com/streamingtvguides.com.config.js @@ -33,10 +33,10 @@ module.exports = { return programs }, - async channels({ country, lang }) { + async channels() { const axios = require('axios') const data = await axios - .get(`https://streamingtvguides.com/Preferences`) + .get('https://streamingtvguides.com/Preferences') .then(r => r.data) .catch(console.log) diff --git a/sites/telenet.tv/telenet.tv.config.js b/sites/telenet.tv/telenet.tv.config.js index fa392183..7f286001 100644 --- a/sites/telenet.tv/telenet.tv.config.js +++ b/sites/telenet.tv/telenet.tv.config.js @@ -3,7 +3,7 @@ const dayjs = require('dayjs') const API_STATIC_ENDPOINT = 'https://static.spark.telenet.tv/eng/web/epg-service-lite/be' const API_PROD_ENDPOINT = 'https://spark-prod-be.gnp.cloud.telenet.tv/eng/web/linear-service/v2' -const API_IMAGE_ENDPOINT = 'https://staticqbr-prod-be.gnp.cloud.telenet.tv/image-service'; +const API_IMAGE_ENDPOINT = 'https://staticqbr-prod-be.gnp.cloud.telenet.tv/image-service' module.exports = { site: 'telenet.tv', @@ -94,7 +94,7 @@ module.exports = { async function loadProgramDetails(item, channel) { if (!item.id) return {} - const url = `${API_PROD_ENDPOINT}/replayEvent/${item.id}?returnLinearContent=true&language=${channel.lang}` + const url = `${API_PROD_ENDPOINT}/replayEvent/${item.id}?returnLinearContent=true&language=${channel.lang}` const data = await axios .get(url) .then(r => r.data) @@ -134,5 +134,5 @@ function parseEpisode(detail) { } function parseIcon(item) { - return `${API_IMAGE_ENDPOINT}/intent/${item.id}/posterTile`; -} \ No newline at end of file + return `${API_IMAGE_ENDPOINT}/intent/${item.id}/posterTile` +} diff --git a/sites/telkussa.fi/telkussa.fi.config.js b/sites/telkussa.fi/telkussa.fi.config.js index d1b54f08..d9eeb6c2 100644 --- a/sites/telkussa.fi/telkussa.fi.config.js +++ b/sites/telkussa.fi/telkussa.fi.config.js @@ -27,10 +27,10 @@ module.exports = { return programs }, - async channels({ lang }) { + async channels() { const axios = require('axios') const data = await axios - .get(`https://telkussa.fi/API/Channels`) + .get('https://telkussa.fi/API/Channels') .then(r => r.data) .catch(console.log) diff --git a/sites/tivie.id/tivie.id.config.js b/sites/tivie.id/tivie.id.config.js index cb6be07c..080a74e7 100644 --- a/sites/tivie.id/tivie.id.config.js +++ b/sites/tivie.id/tivie.id.config.js @@ -1,132 +1,134 @@ -const axios = require('axios') -const cheerio = require('cheerio') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') -const doFetch = require('@ntlab/sfetch') -const debug = require('debug')('site:tivie.id') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -doFetch - .setDebugger(debug) - -const tz = 'Asia/Jakarta' - -module.exports = { - site: 'tivie.id', - days: 2, - url({ channel, date }) { - return `https://tivie.id/channel/${ - channel.site_id - }/${ - date.format('YYYYMMDD') - }` - }, - async parser({ content, date }) { - const programs = [] - if (content) { - const $ = cheerio.load(content) - const items = $('ul[x-data] > li[id*="event-"] > div.w-full').toArray() - .map(item => { - const $item = $(item) - const time = $item.find('div:nth-child(1) span:nth-child(1)') - const info = $item.find('div:nth-child(2) h5') - const detail = info.find('a') - const p = { - start: dayjs.tz(`${date.format('YYYY-MM-DD')} ${time.html()}`, 'YYYY-MM-DD HH:mm', tz) - } - if (detail.length) { - const subtitle = detail.find('div') - p.title = parseText(subtitle.length ? subtitle : detail) - p.url = detail.attr('href') - } else { - p.title = parseText(info) - } - if (p.title) { - const [, , season, episode] = p.title.match(/( S(\d+))?, Ep\. (\d+)/) || [null, null, null, null] - if (season) { - p.season = parseInt(season) - } - if (episode) { - p.episode = parseInt(episode) - } - } - return p - }) - // fetch detailed guide if necessary - const queues = items - .filter(i => i.url) - .map(i => { - const url = i.url - delete i.url - return {i, url} - }) - if (queues.length) { - await doFetch(queues, (queue, res) => { - const $ = cheerio.load(res) - const img = $('#main-content > div > div:nth-child(1) img') - const info = $('#main-content > div > div:nth-child(2)') - const title = parseText(info.find('h2:nth-child(2)')) - if (!queue.i.title.startsWith(title)) { - queue.i.subTitle = parseText(info.find('h2:nth-child(2)')) - } - queue.i.description = parseText(info.find('div[class=""]:nth-child(4)')) - queue.i.date = parseText(info.find('h2:nth-child(3)')) - queue.i.image = img.length ? img.attr('src') : null - }) - } - // fill start-stop - for (let i = 0; i < items.length; i++) { - if (i < items.length - 1) { - items[i].stop = items[i + 1].start - } else { - items[i].stop = dayjs.tz(`${date.add(1, 'd').format('YYYY-MM-DD')} 00:00`, 'YYYY-MM-DD HH:mm', tz) - } - } - // add programs - programs.push(...items) - } - - return programs - }, - async channels({ lang = 'id' }) { - const result = await axios - .get('https://tivie.id/channel') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(result) - const items = $('ul[x-data] li[x-data] div header h2 a').toArray() - const channels = items.map(item => { - const $item = $(item) - const url = $item.attr('href') - return { - lang, - site_id: url.substr(url.lastIndexOf('/') + 1), - name: $item.find('strong').text() - } - }) - - return channels - } -} - -function parseText($item) { - let text = $item.text() - .replace(/\t/g, '') - .replace(/\n/g, ' ') - .trim() - while (true) { - if (text.match(/ /)) { - text = text.replace(/ /g, ' ') - continue - } - break - } - - return text -} +const axios = require('axios') +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') +const doFetch = require('@ntlab/sfetch') +const debug = require('debug')('site:tivie.id') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +doFetch.setDebugger(debug) + +const tz = 'Asia/Jakarta' + +module.exports = { + site: 'tivie.id', + days: 2, + url({ channel, date }) { + return `https://tivie.id/channel/${channel.site_id}/${date.format('YYYYMMDD')}` + }, + async parser({ content, date }) { + const programs = [] + if (content) { + const $ = cheerio.load(content) + const items = $('ul[x-data] > li[id*="event-"] > div.w-full') + .toArray() + .map(item => { + const $item = $(item) + const time = $item.find('div:nth-child(1) span:nth-child(1)') + const info = $item.find('div:nth-child(2) h5') + const detail = info.find('a') + const p = { + start: dayjs.tz(`${date.format('YYYY-MM-DD')} ${time.html()}`, 'YYYY-MM-DD HH:mm', tz) + } + if (detail.length) { + const subtitle = detail.find('div') + p.title = parseText(subtitle.length ? subtitle : detail) + p.url = detail.attr('href') + } else { + p.title = parseText(info) + } + if (p.title) { + const [, , season, episode] = p.title.match(/( S(\d+))?, Ep\. (\d+)/) || [ + null, + null, + null, + null + ] + if (season) { + p.season = parseInt(season) + } + if (episode) { + p.episode = parseInt(episode) + } + } + return p + }) + // fetch detailed guide if necessary + const queues = items + .filter(i => i.url) + .map(i => { + const url = i.url + delete i.url + return { i, url } + }) + if (queues.length) { + await doFetch(queues, (queue, res) => { + const $ = cheerio.load(res) + const img = $('#main-content > div > div:nth-child(1) img') + const info = $('#main-content > div > div:nth-child(2)') + const title = parseText(info.find('h2:nth-child(2)')) + if (!queue.i.title.startsWith(title)) { + queue.i.subTitle = parseText(info.find('h2:nth-child(2)')) + } + queue.i.description = parseText(info.find('div[class=""]:nth-child(4)')) + queue.i.date = parseText(info.find('h2:nth-child(3)')) + queue.i.image = img.length ? img.attr('src') : null + }) + } + // fill start-stop + for (let i = 0; i < items.length; i++) { + if (i < items.length - 1) { + items[i].stop = items[i + 1].start + } else { + items[i].stop = dayjs.tz( + `${date.add(1, 'd').format('YYYY-MM-DD')} 00:00`, + 'YYYY-MM-DD HH:mm', + tz + ) + } + } + // add programs + programs.push(...items) + } + + return programs + }, + async channels({ lang = 'id' }) { + const result = await axios + .get('https://tivie.id/channel') + .then(response => response.data) + .catch(console.error) + + const $ = cheerio.load(result) + const items = $('ul[x-data] li[x-data] div header h2 a').toArray() + const channels = items.map(item => { + const $item = $(item) + const url = $item.attr('href') + return { + lang, + site_id: url.substr(url.lastIndexOf('/') + 1), + name: $item.find('strong').text() + } + }) + + return channels + } +} + +function parseText($item) { + let text = $item.text().replace(/\t/g, '').replace(/\n/g, ' ').trim() + while (true) { + if (text.match(/\s\s/)) { + text = text.replace(/\s\s/g, ' ') + continue + } + break + } + + return text +} diff --git a/sites/tivie.id/tivie.id.test.js b/sites/tivie.id/tivie.id.test.js index e03247d2..dcc4e0ee 100644 --- a/sites/tivie.id/tivie.id.test.js +++ b/sites/tivie.id/tivie.id.test.js @@ -1,77 +1,75 @@ -const { parser, url } = require('./tivie.id.config') -const fs = require('fs') -const path = require('path') -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -jest.mock('axios') - -const date = dayjs.utc('2024-12-31').startOf('d') -const channel = { - site_id: 'axn', - xmltv_id: 'AXN.id', - lang: 'id' -} - -axios.get.mockImplementation(url => { - const urls = { - 'https://tivie.id/film/white-house-down-nwzDnwz9nAv6': - 'program01.html', - 'https://tivie.id/program/hudson-rex-s6-e14-nwzDnwvBmQr9': - 'program02.html', - } - let data = '' - if (urls[url] !== undefined) { - data = fs.readFileSync(path.join(__dirname, '__data__', urls[url])).toString() - } - return Promise.resolve({ data }) -}) - -it('can generate valid url', () => { - expect(url({ channel, date })).toBe('https://tivie.id/channel/axn/20241231') -}) - -it('can parse response', async () => { - const content = fs.readFileSync(path.join(__dirname, '__data__', 'content.html')) - const results = ( - await parser({ date, content, channel }) - ).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results.length).toBe(27) - expect(results[0]).toMatchObject({ - start: '2024-12-30T17:00:00.000Z', - stop: '2024-12-30T17:05:00.000Z', - title: 'White House Down', - description: - 'Saat melakukan tur di Gedung Putih bersama putrinya yang masih kecil, seorang perwira polisi beraksi untuk melindungi anaknya dan presiden dari sekelompok penjajah paramiliter bersenjata lengkap.', - image: 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2023/09/65116c78791c2-1695640694.jpg?resize=480,270', - }) - expect(results[2]).toMatchObject({ - start: '2024-12-30T18:00:00.000Z', - stop: '2024-12-30T18:55:00.000Z', - title: 'Hudson & Rex S6, Ep. 14', - description: - 'Saat guru musik Jesse terbunuh di studio rekamannya, Charlie dan Rex menghubungkan kejahatan tersebut dengan pembunuhan yang tampaknya tak ada hubungannya.', - image: 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2024/07/668b7ced47b25-1720417517.jpg?resize=480,270', - season: 6, - episode: 14, - }) -}) - -it('can handle empty guide', async () => { - const results = await parser({ - date, - channel, - content: '', - }) - expect(results).toMatchObject([]) -}) +const { parser, url } = require('./tivie.id.config') +const fs = require('fs') +const path = require('path') +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +jest.mock('axios') + +const date = dayjs.utc('2024-12-31').startOf('d') +const channel = { + site_id: 'axn', + xmltv_id: 'AXN.id', + lang: 'id' +} + +axios.get.mockImplementation(url => { + const urls = { + 'https://tivie.id/film/white-house-down-nwzDnwz9nAv6': 'program01.html', + 'https://tivie.id/program/hudson-rex-s6-e14-nwzDnwvBmQr9': 'program02.html' + } + let data = '' + if (urls[url] !== undefined) { + data = fs.readFileSync(path.join(__dirname, '__data__', urls[url])).toString() + } + return Promise.resolve({ data }) +}) + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe('https://tivie.id/channel/axn/20241231') +}) + +it('can parse response', async () => { + const content = fs.readFileSync(path.join(__dirname, '__data__', 'content.html')) + const results = (await parser({ date, content, channel })).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(27) + expect(results[0]).toMatchObject({ + start: '2024-12-30T17:00:00.000Z', + stop: '2024-12-30T17:05:00.000Z', + title: 'White House Down', + description: + 'Saat melakukan tur di Gedung Putih bersama putrinya yang masih kecil, seorang perwira polisi beraksi untuk melindungi anaknya dan presiden dari sekelompok penjajah paramiliter bersenjata lengkap.', + image: + 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2023/09/65116c78791c2-1695640694.jpg?resize=480,270' + }) + expect(results[2]).toMatchObject({ + start: '2024-12-30T18:00:00.000Z', + stop: '2024-12-30T18:55:00.000Z', + title: 'Hudson & Rex S6, Ep. 14', + description: + 'Saat guru musik Jesse terbunuh di studio rekamannya, Charlie dan Rex menghubungkan kejahatan tersebut dengan pembunuhan yang tampaknya tak ada hubungannya.', + image: + 'https://i0.wp.com/is3.cloudhost.id/tivie/poster/2024/07/668b7ced47b25-1720417517.jpg?resize=480,270', + season: 6, + episode: 14 + }) +}) + +it('can handle empty guide', async () => { + const results = await parser({ + date, + channel, + content: '' + }) + expect(results).toMatchObject([]) +}) diff --git a/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js b/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js index 64140b30..933b6513 100644 --- a/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js +++ b/sites/turksatkablo.com.tr/turksatkablo.com.tr.config.js @@ -73,7 +73,7 @@ function parseItems(content, channel) { let parsed try { parsed = JSON.parse(content) - } catch (error) { + } catch { return [] } if (!parsed || !parsed.k) return [] diff --git a/sites/tv.mail.ru/tv.mail.ru.config.js b/sites/tv.mail.ru/tv.mail.ru.config.js index 25691c14..92c19623 100644 --- a/sites/tv.mail.ru/tv.mail.ru.config.js +++ b/sites/tv.mail.ru/tv.mail.ru.config.js @@ -70,7 +70,7 @@ module.exports = { async function getTotalPageCount(region) { const data = await axios - .get(`https://tv.mail.ru/ajax/channel/list/`, { + .get('https://tv.mail.ru/ajax/channel/list/', { params: { page: 0 }, headers: { cookie: `s=fver=0|geo=${region};` diff --git a/sites/tv.nu/tv.nu.config.js b/sites/tv.nu/tv.nu.config.js index 9afa14ea..5dd28959 100644 --- a/sites/tv.nu/tv.nu.config.js +++ b/sites/tv.nu/tv.nu.config.js @@ -40,7 +40,7 @@ module.exports = { let offset = 0 while (offset !== undefined) { const data = await axios - .get(`https://web-api.tv.nu/tableauLinearChannels`, { + .get('https://web-api.tv.nu/tableauLinearChannels', { params: { modules, date: dayjs().format('YYYY-MM-DD'), diff --git a/sites/tv.trueid.net/tv.trueid.net.config.js b/sites/tv.trueid.net/tv.trueid.net.config.js index f0736044..2de101cf 100644 --- a/sites/tv.trueid.net/tv.trueid.net.config.js +++ b/sites/tv.trueid.net/tv.trueid.net.config.js @@ -24,7 +24,7 @@ module.exports = { return programs }, - async channels({ token, lang = en }) { + async channels({ token, lang = 'en' }) { const axios = require('axios') const ACCESS_TOKEN = token ? token diff --git a/sites/tv.yandex.ru/tv.yandex.ru.config.js b/sites/tv.yandex.ru/tv.yandex.ru.config.js index e12df5d0..0dd19c00 100644 --- a/sites/tv.yandex.ru/tv.yandex.ru.config.js +++ b/sites/tv.yandex.ru/tv.yandex.ru.config.js @@ -2,9 +2,7 @@ const dayjs = require('dayjs') const doFetch = require('@ntlab/sfetch') const debug = require('debug')('site:tv.yandex.ru') -doFetch - .setDebugger(debug) - .setMaxWorker(10) +doFetch.setDebugger(debug).setMaxWorker(10) // enable to fetch guide description but its take a longer time const detailedGuide = true @@ -12,14 +10,16 @@ const detailedGuide = true // update this data by heading to https://tv.yandex.ru and change the values accordingly const cookies = { i: 'eIUfSP+/mzQWXcH+Cuz8o1vY+D2K8fhBd6Sj0xvbPZeO4l3cY+BvMp8fFIuM17l6UE1Z5+R2a18lP00ex9iYVJ+VT+c=', - spravka: 'dD0xNzM0MjA0NjM4O2k9MTI1LjE2NC4xNDkuMjAwO0Q9QTVCQ0IyOTI5RDQxNkU5NkEyOTcwMTNDMzZGMDAzNjRDNTFFNDM4QkE2Q0IyOTJDRjhCOTZDRDIzODdBQzk2MzRFRDc5QTk2Qjc2OEI1MUY5MTM5M0QzNkY3OEQ2OUY3OTUwNkQ3RjBCOEJGOEJDMjAwMTQ0RDUwRkFCMDNEQzJFMDI2OEI5OTk5OUJBNEFERUYwOEQ1MjUwQTE0QTI3RDU1MEQwM0U0O3U9MTczNDIwNDYzODUyNDYyNzg1NDtoPTIxNTc0ZTc2MDQ1ZjcwMDBkYmY0NTVkM2Q2ZWMyM2Y1', + spravka: + 'dD0xNzM0MjA0NjM4O2k9MTI1LjE2NC4xNDkuMjAwO0Q9QTVCQ0IyOTI5RDQxNkU5NkEyOTcwMTNDMzZGMDAzNjRDNTFFNDM4QkE2Q0IyOTJDRjhCOTZDRDIzODdBQzk2MzRFRDc5QTk2Qjc2OEI1MUY5MTM5M0QzNkY3OEQ2OUY3OTUwNkQ3RjBCOEJGOEJDMjAwMTQ0RDUwRkFCMDNEQzJFMDI2OEI5OTk5OUJBNEFERUYwOEQ1MjUwQTE0QTI3RDU1MEQwM0U0O3U9MTczNDIwNDYzODUyNDYyNzg1NDtoPTIxNTc0ZTc2MDQ1ZjcwMDBkYmY0NTVkM2Q2ZWMyM2Y1', yandexuid: '1197179041732383499', yashr: '4682342911732383504', yuidss: '1197179041732383499', - user_display: 824, + user_display: 824 } const headers = { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0' } const caches = {} @@ -50,7 +50,9 @@ module.exports = { } caches[cacheid].forEach(schedule => { schedule.events - .filter(event => event.channelFamilyId == channel.site_id && date.isSame(event.start, 'day')) + .filter( + event => event.channelFamilyId == channel.site_id && date.isSame(event.start, 'day') + ) .forEach(event => { if (events.indexOf(event.id) < 0) { events.push(event.id) @@ -171,7 +173,10 @@ function parseContent(content, date, checkOnly = false) { content = content.toString() } // got captcha, its look like our cookies has expired - if (content?.type === 'captcha' || (typeof content === 'string' && content.match(/SmartCaptcha/))) { + if ( + content?.type === 'captcha' || + (typeof content === 'string' && content.match(/SmartCaptcha/)) + ) { throw new Error('Got captcha, please goto https://tv.yandex.ru and update cookies!') } if (typeof content === 'object') { @@ -210,35 +215,41 @@ function parseContent(content, date, checkOnly = false) { headers['X-User-Session-Id'] = sessionId } if (checkOnly && region && tvSk.key && sessionId) { - valid = true; + valid = true } } } - return checkOnly ? valid : [queues, schedules] + return checkOnly ? valid : [queues, schedules] } function parseCookies(headers) { if (Array.isArray(headers['set-cookie'])) { - headers['set-cookie'] - .forEach(cookie => { - const [key, value] = cookie.split('; ')[0].split('=') - if (cookies[key] !== value) { - cookies[key] = value - debug(`Update cookie ${key}=${value}`) - } - }) + headers['set-cookie'].forEach(cookie => { + const [key, value] = cookie.split('; ')[0].split('=') + if (cookies[key] !== value) { + cookies[key] = value + debug(`Update cookie ${key}=${value}`) + } + }) } } function getSchedules(schedules) { - return schedules.filter(schedule => schedule.events.length); + return schedules.filter(schedule => schedule.events.length) } function getHeaders(data = {}) { - return Object.assign({}, headers, { - Cookie: Object.keys(cookies).map(cookie => `${cookie}=${cookies[cookie]}`).join('; ') - }, data) + return Object.assign( + {}, + headers, + { + Cookie: Object.keys(cookies) + .map(cookie => `${cookie}=${cookies[cookie]}`) + .join('; ') + }, + data + ) } function getUrl(date, region = null, page = null, event = null) { @@ -253,7 +264,9 @@ function getUrl(date, region = null, page = null, event = null) { url += `${url.endsWith('/') ? '' : '/'}event?eventId=${event.id}&programCoId=` } if (date) { - url += `${url.indexOf('?') < 0 ? '?' : '&'}date=${date.format('YYYY-MM-DD')}${!page ? '&grid=all' : ''}&period=all-day` + url += `${url.indexOf('?') < 0 ? '?' : '&'}date=${date.format('YYYY-MM-DD')}${ + !page ? '&grid=all' : '' + }&period=all-day` } if (page && page.id !== undefined && page.offset !== undefined) { url += `${url.indexOf('?') < 0 ? '?' : '&'}offset=${page.offset}` @@ -266,7 +279,7 @@ function getUrl(date, region = null, page = null, event = null) { function getQueue(url, referer) { const data = { - 'Origin': 'https://tv.yandex.ru', + Origin: 'https://tv.yandex.ru' } if (referer) { data['Referer'] = referer @@ -279,4 +292,4 @@ function getQueue(url, referer) { url, params: { headers } } -} \ No newline at end of file +} diff --git a/sites/tv.yandex.ru/tv.yandex.ru.test.js b/sites/tv.yandex.ru/tv.yandex.ru.test.js index ea72df5b..9661089f 100644 --- a/sites/tv.yandex.ru/tv.yandex.ru.test.js +++ b/sites/tv.yandex.ru/tv.yandex.ru.test.js @@ -16,7 +16,7 @@ const channel = { site_id: '16', xmltv_id: 'ChannelOne.ru' } -axios.get.mockImplementation((url, opts) => { +axios.get.mockImplementation(url => { if (url === 'https://tv.yandex.ru/?date=2023-11-26&grid=all&period=all-day') { return Promise.resolve({ headers: {}, @@ -29,7 +29,10 @@ axios.get.mockImplementation((url, opts) => { data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/schedule.json'))) }) } - if (url === 'https://tv.yandex.ru/api/120809/main/chunk?page=0&date=2023-11-26&period=all-day&offset=0&limit=11') { + if ( + url === + 'https://tv.yandex.ru/api/120809/main/chunk?page=0&date=2023-11-26&period=all-day&offset=0&limit=11' + ) { return Promise.resolve({ headers: {}, data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/schedule0.json'))) @@ -44,9 +47,7 @@ axios.get.mockImplementation((url, opts) => { }) it('can generate valid url', () => { - expect(url({ date })).toBe( - 'https://tv.yandex.ru/?date=2023-11-26&grid=all&period=all-day' - ) + expect(url({ date })).toBe('https://tv.yandex.ru/?date=2023-11-26&grid=all&period=all-day') }) it('can generate valid request headers', () => { @@ -63,9 +64,7 @@ it('can generate valid request headers', () => { it('can parse response', async () => { const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) - const result = ( - await parser({ content, date, channel }) - ).map(p => { + const result = (await parser({ content, date, channel })).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() return p @@ -77,7 +76,8 @@ it('can parse response', async () => { stop: '2023-11-26T02:10:00.000Z', title: 'ПОДКАСТ.ЛАБ. Мелодии моей жизни', category: 'досуг', - description: 'Впереди вся ночь и есть о чем поговорить. Фильмы, музыка, любовь, звезды, еда, мода, анекдоты, спорт, деньги, настоящее, будущее - все это в творческом эксперименте.\nЛариса Гузеева читает любовные письма. Леонид Якубович рассказывает, кого не берут в пилоты. Арина Холина - какой секс способен довести до мужа или до развода. Валерий Сюткин на ходу сочиняет песню для Карины Кросс и Вали Карнавал. Дмитрий Дибров дарит новую жизнь любимой \"Антропологии\". Денис Казанский - все о футболе, хоккее и не только.\n\"ПОДКАСТЫ. ЛАБ\" - серия подкастов разной тематики, которые невозможно проспать. Интеллектуальные дискуссии после полуночи с самыми компетентными экспертами и актуальными спикерами.' + description: + 'Впереди вся ночь и есть о чем поговорить. Фильмы, музыка, любовь, звезды, еда, мода, анекдоты, спорт, деньги, настоящее, будущее - все это в творческом эксперименте.\nЛариса Гузеева читает любовные письма. Леонид Якубович рассказывает, кого не берут в пилоты. Арина Холина - какой секс способен довести до мужа или до развода. Валерий Сюткин на ходу сочиняет песню для Карины Кросс и Вали Карнавал. Дмитрий Дибров дарит новую жизнь любимой "Антропологии". Денис Казанский - все о футболе, хоккее и не только.\n"ПОДКАСТЫ. ЛАБ" - серия подкастов разной тематики, которые невозможно проспать. Интеллектуальные дискуссии после полуночи с самыми компетентными экспертами и актуальными спикерами.' } ]) }) diff --git a/sites/tv2go.t-2.net/tv2go.t-2.net.config.js b/sites/tv2go.t-2.net/tv2go.t-2.net.config.js index 9b77abec..2fc449f3 100644 --- a/sites/tv2go.t-2.net/tv2go.t-2.net.config.js +++ b/sites/tv2go.t-2.net/tv2go.t-2.net.config.js @@ -109,7 +109,7 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (e) { + } catch { return [] } if (!data || !Array.isArray(data.entries)) return [] diff --git a/sites/tvarenasport.com/tvarenasport.com.config.js b/sites/tvarenasport.com/tvarenasport.com.config.js index f30d2efa..d2297d9c 100644 --- a/sites/tvarenasport.com/tvarenasport.com.config.js +++ b/sites/tvarenasport.com/tvarenasport.com.config.js @@ -26,22 +26,25 @@ module.exports = { if (content) { const dates = [] const $ = cheerio.load(content) - const parent = $(`.tv-scheme-chanel-header img[src*="chanel-${channel.site_id}.png"]`) - .parents('div') + const parent = $( + `.tv-scheme-chanel-header img[src*="chanel-${channel.site_id}.png"]` + ).parents('div') parent .siblings('.tv-scheme-days') - .find('a').toArray() - .forEach(el => { - const a = $(el) - const dt = a.find('span:nth-child(3)').text() - dates.push(dayjs(dt + date.year(), 'DD.MM.YYYY')) - }) + .find('a') + .toArray() + .forEach(el => { + const a = $(el) + const dt = a.find('span:nth-child(3)').text() + dates.push(dayjs(dt + date.year(), 'DD.MM.YYYY')) + }) parent .siblings('.tv-scheme-new-slider-wrapper') - .find('.tv-scheme-new-slider-item').toArray() - .forEach((el, i) => { - programs.push(...parseSchedules($(el), dates[i], module.exports.tz)) - }) + .find('.tv-scheme-new-slider-item') + .toArray() + .forEach((el, i) => { + programs.push(...parseSchedules($(el), dates[i], module.exports.tz)) + }) programs.forEach((s, i) => { if (i < programs.length - 2) { s.stop = programs[i + 1].start @@ -51,8 +54,11 @@ module.exports = { }) } - return programs - .filter(p => p.start.format('YYYY-MM-DD') === expectedDate || p.stop.format('YYYY-MM-DD') === expectedDate) + return programs.filter( + p => + p.start.format('YYYY-MM-DD') === expectedDate || + p.stop.format('YYYY-MM-DD') === expectedDate + ) }, async channels() { const channels = [] @@ -81,7 +87,9 @@ module.exports = { const $ = cheerio.load(data) const items = $('.tv-scheme-chanel-header img').toArray() for (const item of items) { - const [, id] = $(item).attr('src').match(/chanel-([a-z0-9]+)\.png/) || [null, null] + const [, id] = $(item) + .attr('src') + .match(/chanel-([a-z0-9]+)\.png/) || [null, null] if (id) { channels.push({ lang: this.lang, @@ -99,7 +107,8 @@ module.exports = { function parseSchedules($s, date, tz) { const schedules = [] const $ = $s._make - $s.find('.slider-content').toArray() + $s.find('.slider-content') + .toArray() .forEach(el => { schedules.push(parseSchedule($(el), date, tz)) }) diff --git a/sites/tvarenasport.com/tvarenasport.com.test.js b/sites/tvarenasport.com/tvarenasport.com.test.js index 54ff2c33..1866f963 100644 --- a/sites/tvarenasport.com/tvarenasport.com.test.js +++ b/sites/tvarenasport.com/tvarenasport.com.test.js @@ -32,12 +32,12 @@ it('can parse response', () => { stop: '2024-12-07T05:00:00.000Z', title: 'EVROPSKO PRVENSTVO Ž', description: 'Francuska - Crna Gora', - category: 'Rukomet', + category: 'Rukomet' }) expect(result[8]).toMatchObject({ start: '2024-12-07T11:00:00.000Z', stop: '2024-12-07T11:05:00.000Z', - title: 'Arena News', + title: 'Arena News' }) }) diff --git a/sites/tvarenasport.hr/tvarenasport.hr.test.js b/sites/tvarenasport.hr/tvarenasport.hr.test.js index eaf115da..9358952c 100644 --- a/sites/tvarenasport.hr/tvarenasport.hr.test.js +++ b/sites/tvarenasport.hr/tvarenasport.hr.test.js @@ -32,14 +32,14 @@ it('can parse response', () => { stop: '2024-12-07T00:30:00.000Z', title: 'MAGAZIN', description: 'NBA ACTION', - category: 'Košarka', + category: 'Košarka' }) expect(result[4]).toMatchObject({ start: '2024-12-07T06:00:00.000Z', stop: '2024-12-07T07:30:00.000Z', title: 'EHF LIGA PRVAKA', description: 'DINAMO BUKUREŠT - PSG', - category: 'Rukomet', + category: 'Rukomet' }) }) diff --git a/sites/tvcesoir.fr/tvcesoir.fr.config.js b/sites/tvcesoir.fr/tvcesoir.fr.config.js index 937f6583..306f819f 100644 --- a/sites/tvcesoir.fr/tvcesoir.fr.config.js +++ b/sites/tvcesoir.fr/tvcesoir.fr.config.js @@ -49,7 +49,7 @@ module.exports = { const channels = [] for (let provider of providers) { const data = await axios - .post(`https://www.tvcesoir.fr/guide/schedule`, null, { + .post('https://www.tvcesoir.fr/guide/schedule', null, { params: { provider, region: 'France', @@ -81,7 +81,7 @@ module.exports = { } } -function parseStart($item, date, channel) { +function parseStart($item, date) { const timeString = $item('td:eq(0)').text().trim() const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` diff --git a/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js b/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js index 515da300..41edebca 100644 --- a/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js +++ b/sites/tvcubana.icrt.cu/tvcubana.icrt.cu.config.js @@ -39,7 +39,7 @@ function parseItems(content) { let data try { data = JSON.parse(content) - } catch (error) { + } catch { return [] } if (!data || !Array.isArray(data)) return [] diff --git a/sites/tvguide.com/tvguide.com.config.js b/sites/tvguide.com/tvguide.com.config.js index 5ddddf8b..54b08bbb 100644 --- a/sites/tvguide.com/tvguide.com.config.js +++ b/sites/tvguide.com/tvguide.com.config.js @@ -82,7 +82,10 @@ function parseItems(content) { } async function loadProgramDetails(item) { - item.programDetails = item.programDetails.replace('player1-backend-prod-internal.apigee.net', 'internal-prod.apigee.fandom.net') + item.programDetails = item.programDetails.replace( + 'player1-backend-prod-internal.apigee.net', + 'internal-prod.apigee.fandom.net' + ) const data = await axios .get(item.programDetails) .then(r => r.data) diff --git a/sites/tvheute.at/tvheute.at.config.js b/sites/tvheute.at/tvheute.at.config.js index 4862eec1..d73706c8 100644 --- a/sites/tvheute.at/tvheute.at.config.js +++ b/sites/tvheute.at/tvheute.at.config.js @@ -28,7 +28,7 @@ module.exports = { async channels() { const axios = require('axios') const html = await axios - .get(`https://tvheute.at/part/channel-selection`) + .get('https://tvheute.at/part/channel-selection') .then(r => r.data) .catch(console.log) diff --git a/sites/tvim.tv/tvim.tv.config.js b/sites/tvim.tv/tvim.tv.config.js index 678291af..f67ac2ea 100644 --- a/sites/tvim.tv/tvim.tv.config.js +++ b/sites/tvim.tv/tvim.tv.config.js @@ -29,7 +29,7 @@ module.exports = { async channels() { const axios = require('axios') const data = await axios - .get(`https://www.tvim.tv/script/epg/category_channels?category=all&filter=playable`) + .get('https://www.tvim.tv/script/epg/category_channels?category=all&filter=playable') .then(r => r.data) .catch(console.log) diff --git a/sites/tvireland.ie/tvireland.ie.config.js b/sites/tvireland.ie/tvireland.ie.config.js index 93e712af..c28eb8c8 100644 --- a/sites/tvireland.ie/tvireland.ie.config.js +++ b/sites/tvireland.ie/tvireland.ie.config.js @@ -49,7 +49,7 @@ module.exports = { const channels = [] for (let provider of providers) { const data = await axios - .post(`https://www.tvireland.ie/tv/schedule`, null, { + .post('https://www.tvireland.ie/tv/schedule', null, { params: { provider, region: 'Ireland', @@ -81,7 +81,7 @@ module.exports = { } } -function parseStart($item, date, channel) { +function parseStart($item, date) { const timeString = $item('td:eq(0)').text().trim() const dateString = `${date.format('YYYY-MM-DD')} ${timeString}` diff --git a/sites/tvpassport.com/tvpassport.com.config.js b/sites/tvpassport.com/tvpassport.com.config.js index c8d28d3f..fe95d1b4 100644 --- a/sites/tvpassport.com/tvpassport.com.config.js +++ b/sites/tvpassport.com/tvpassport.com.config.js @@ -70,7 +70,7 @@ module.exports = { let i = 1 for (let el of elements) { const url = $(el).text() - const [, site_id] = url.match(/\/tv\-listings\/stations\/(.*)$/) + const [, site_id] = url.match(/\/tv-listings\/stations\/(.*)$/) console.log(`[${i}/${total}]`, url) diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js index 391f3929..60ed9aa2 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.config.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js @@ -24,15 +24,7 @@ module.exports = { debug('Got build id', module.exports.buildId) } const channelId = channel.site_id.replace('/', '--') - return `https://tvplus.com.tr/_next/data/${ - module.exports.buildId - }/${ - channel.lang - }/canli-tv/yayin-akisi/${ - channelId - }.json?title=${ - channelId - }` + return `https://tvplus.com.tr/_next/data/${module.exports.buildId}/${channel.lang}/canli-tv/yayin-akisi/${channelId}.json?title=${channelId}` }, parser({ content, date }) { const programs = [] @@ -43,7 +35,9 @@ module.exports = { .filter(i => i.length && i[0].starttime.startsWith(date.format('YYYY-MM-DD'))) .forEach(i => { for (const schedule of i) { - const [, season, episode] = schedule.seasonInfo?.match(/(\d+)\. Sezon \- (\d+)\. Bölüm/) || [null, null, null] + const [, season, episode] = schedule.seasonInfo?.match( + /(\d+)\. Sezon - (\d+)\. Bölüm/ + ) || [null, null, null] programs.push({ title: schedule.name, description: schedule.introduce, @@ -69,14 +63,19 @@ module.exports = { .catch(console.error) const $ = cheerio.load(data) - $('.channel-list-item a').toArray() + $('.channel-list-item a') + .toArray() .forEach(el => { const a = $(el) channels.push({ lang: 'tr', - name: a.attr('title').replace(/Yayın Akışı/, '').trim(), - site_id: a.attr('href') - .replace(/\/canli\-tv\/yayin\-akisi\//, '') + name: a + .attr('title') + .replace(/Yayın Akışı/, '') + .trim(), + site_id: a + .attr('href') + .replace(/\/canli-tv\/yayin-akisi\//, '') .replace('--', '/') // change -- to / as it used in xml comment }) }) diff --git a/sites/tvplus.com.tr/tvplus.com.tr.test.js b/sites/tvplus.com.tr/tvplus.com.tr.test.js index c0f5c13e..d7586cda 100644 --- a/sites/tvplus.com.tr/tvplus.com.tr.test.js +++ b/sites/tvplus.com.tr/tvplus.com.tr.test.js @@ -18,7 +18,7 @@ const channel = { xmltv_id: 'NickJr.tr' } -axios.get.mockImplementation((url, opts) => { +axios.get.mockImplementation(url => { if (url === 'https://tvplus.com.tr/canli-tv/yayin-akisi') { return Promise.resolve({ data: fs.readFileSync(path.join(__dirname, '__data__', 'build.html')).toString() @@ -27,17 +27,18 @@ axios.get.mockImplementation((url, opts) => { }) it('can generate valid url', async () => { - expect(await url({ channel })).toBe('https://tvplus.com.tr/_next/data/kUzvz_bbQJNaShlFUkrR3/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353') + expect(await url({ channel })).toBe( + 'https://tvplus.com.tr/_next/data/kUzvz_bbQJNaShlFUkrR3/tr/canli-tv/yayin-akisi/nick-jr--4353.json?title=nick-jr--4353' + ) }) it('can parse response', () => { const content = fs.readFileSync(path.join(__dirname, '__data__', 'content.json')) - const results = parser({ date, channel, content }) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + const results = parser({ date, channel, content }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(results.length).toBe(88) expect(results[0]).toMatchObject({ @@ -45,7 +46,7 @@ it('can parse response', () => { stop: '2024-12-14T21:20:00.000Z', title: 'Camgöz (2020)', description: - 'Max\'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz\'ü saklamaya çalışsa da Sisli Pınarlar\'da, en iyi arkadaşlar, meraklı komşular ve hatta Max\'in ailesi bile yaramaz yeni arkadaşını fark edecektir.', + "Max'in Camgöz adında yarı köpek balığı yarı köpek eşsiz bir evcil havyanı vardır. İlk başlarda Camgöz'ü saklamaya çalışsa da Sisli Pınarlar'da, en iyi arkadaşlar, meraklı komşular ve hatta Max'in ailesi bile yaramaz yeni arkadaşını fark edecektir.", image: 'https://gbzeottvsc01.tvplus.com.tr:33207/CPS/images/universal/film/program/202412/20241209/21/2126356250845eb88428_0_XL.jpg', category: 'Çocuk', diff --git a/sites/tvtv.us/tvtv.us.config.js b/sites/tvtv.us/tvtv.us.config.js index dec7fb9e..b1eb7629 100644 --- a/sites/tvtv.us/tvtv.us.config.js +++ b/sites/tvtv.us/tvtv.us.config.js @@ -1,4 +1,4 @@ -const dayjs = require('dayjs') +const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') dayjs.extend(utc) diff --git a/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js b/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js index a26c23fd..dba45f8d 100644 --- a/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js +++ b/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js @@ -18,11 +18,9 @@ module.exports = { } }, url({ date, segment = 0 }) { - return `https://staticqbr-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/epg-service-lite/gb/en/events/segments/${ - date.format('YYYYMMDD') - }${ - segment.toString().padStart(2, '0') - }0000` + return `https://staticqbr-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/epg-service-lite/gb/en/events/segments/${date.format( + 'YYYYMMDD' + )}${segment.toString().padStart(2, '0')}0000` }, async parser({ content, channel, date }) { const programs = [] @@ -31,9 +29,9 @@ module.exports = { if (Array.isArray(items.entries)) { // fetch other segments const queues = [ - module.exports.url({ date, segment: 6}), - module.exports.url({ date, segment: 12}), - module.exports.url({ date, segment: 18}), + module.exports.url({ date, segment: 6 }), + module.exports.url({ date, segment: 12 }), + module.exports.url({ date, segment: 18 }) ] await doFetch(queues, (url, res) => { if (Array.isArray(res.entries)) { @@ -43,13 +41,12 @@ module.exports = { items.entries .filter(item => item.channelId === channel.site_id) .forEach(item => { - if (Array.isArray(item.events)){ + if (Array.isArray(item.events)) { if (detailedGuide) { - queues.push(...item.events - .map(event => - `https://spark-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/linear-service/v2/replayEvent/${ - event.id - }?returnLinearContent=true&forceLinearResponse=true&language=en` + queues.push( + ...item.events.map( + event => + `https://spark-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/linear-service/v2/replayEvent/${event.id}?returnLinearContent=true&forceLinearResponse=true&language=en` ) ) } else { @@ -92,20 +89,23 @@ module.exports = { const channels = [] const axios = require('axios') const res = await axios - .get('https://spark-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/linear-service/v2/channels?cityId=40980&language=en&productClass=Orion-DASH&platform=web') + .get( + 'https://spark-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/linear-service/v2/channels?cityId=40980&language=en&productClass=Orion-DASH&platform=web' + ) .then(r => r.data) .catch(console.error) if (Array.isArray(res)) { - channels.push(...res - .filter(item => !item.isHidden) - .map(item => { - return { - lang: 'en', - site_id: item.id, - name: item.name - } - }) + channels.push( + ...res + .filter(item => !item.isHidden) + .map(item => { + return { + lang: 'en', + site_id: item.id, + name: item.name + } + }) ) } diff --git a/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.test.js b/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.test.js index d2213198..1fbc3400 100644 --- a/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.test.js +++ b/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.test.js @@ -32,7 +32,7 @@ axios.get.mockImplementation(url => { 'https://spark-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/linear-service/v2/replayEvent/crid:~~2F~~2Fgn.tv~~2F17641069~~2FEP026460800059,imi:23c363d12af79f43134f4a15b96dd12df81b19ab?returnLinearContent=true&forceLinearResponse=true&language=en': 'program02.json', 'https://spark-prod-gb.gnp.cloud.virgintvgo.virginmedia.com/eng/web/linear-service/v2/replayEvent/crid:~~2F~~2Fgn.tv~~2F19221598~~2FSH037146530000~~2F333458689,imi:f1060b3f63cd5399e0f97901b25a85ef71097891?returnLinearContent=true&forceLinearResponse=true&language=en': - 'program03.json', + 'program03.json' } let data = '' if (urls[url] !== undefined) { @@ -50,16 +50,16 @@ it('can generate valid url', () => { ) }) -it('can parse response', async() => { - const content = await axios.get(url({ date })) +it('can parse response', async () => { + const content = await axios + .get(url({ date })) .then(response => response.data) .catch(console.error) - const result = (await parser({ content, channel, date })) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + const result = (await parser({ content, channel, date })).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(result.length).toBe(3) expect(result[0]).toMatchObject({ diff --git a/sites/visionplus.id/visionplus.id.config.js b/sites/visionplus.id/visionplus.id.config.js index f2f5ca49..e4220ca4 100644 --- a/sites/visionplus.id/visionplus.id.config.js +++ b/sites/visionplus.id/visionplus.id.config.js @@ -13,11 +13,11 @@ module.exports = { site: 'visionplus.id', days: 2, url({ date, channel }) { - return `https://www.visionplus.id/managetv/tvinfo/events/schedule?language=${languages[channel.lang]}&serviceId=${channel.site_id}&start=${date.format( - 'YYYY-MM-DD' - )}T00%3A00%3A00Z&end=${date.add(1, 'd').format( - 'YYYY-MM-DD' - )}T00%3A00%3A00Z&view=cd-events-grid-view` + return `https://www.visionplus.id/managetv/tvinfo/events/schedule?language=${ + languages[channel.lang] + }&serviceId=${channel.site_id}&start=${date.format('YYYY-MM-DD')}T00%3A00%3A00Z&end=${date + .add(1, 'd') + .format('YYYY-MM-DD')}T00%3A00%3A00Z&view=cd-events-grid-view` }, parser({ content, channel }) { const programs = [] @@ -26,7 +26,13 @@ module.exports = { for (const ev of json.evs) { if (ev.sid === channel.site_id) { const title = ev.con && ev.con.loc ? ev.con.loc[0].tit : ev.con.oti - const [, , season, , episode] = title.match(/( S(\d+))?(, Ep (\d+))/) || [null, null, null, null, null] + const [, , season, , episode] = title.match(/( S(\d+))?(, Ep (\d+))/) || [ + null, + null, + null, + null, + null + ] programs.push({ title, description: ev.con && ev.con.loc ? ev.con.loc[0].syn : null, diff --git a/sites/visionplus.id/visionplus.id.test.js b/sites/visionplus.id/visionplus.id.test.js index 99b1398c..f71f7c6f 100644 --- a/sites/visionplus.id/visionplus.id.test.js +++ b/sites/visionplus.id/visionplus.id.test.js @@ -16,7 +16,7 @@ const channel = { xmltv_id: 'AXN.id', lang: 'en' } -const channelId = { ...channel, lang: 'id' } +const channelId = { ...channel, lang: 'id' } it('can generate valid url', () => { expect(url({ channel, date })).toBe( @@ -29,37 +29,37 @@ it('can generate valid url', () => { it('can parse response', () => { let content = fs.readFileSync(path.resolve(__dirname, '__data__/content_en.json')) - let results = parser({ content, channel, date }) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + let results = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(results.length).toBe(1) expect(results[0]).toMatchObject({ start: '2024-11-23T23:30:00.000Z', stop: '2024-11-24T00:15:00.000Z', title: 'FBI: Most Wanted S4, Ep 18', - description: 'After two agents from the Bureau of Land Management go missing while executing a land seizure warrant in Wyoming, the Fugitive Task Force heads west to track them down in an unwelcoming county.', + description: + 'After two agents from the Bureau of Land Management go missing while executing a land seizure warrant in Wyoming, the Fugitive Task Force heads west to track them down in an unwelcoming county.', season: 4, episode: 18 }) content = fs.readFileSync(path.resolve(__dirname, '__data__/content_id.json')) - results = parser({ content, channel: channelId, date }) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + results = parser({ content, channel: channelId, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(results.length).toBe(1) expect(results[0]).toMatchObject({ start: '2024-11-23T23:30:00.000Z', stop: '2024-11-24T00:15:00.000Z', title: 'FBI: Most Wanted S4, Ep 18', - description: 'Satgas Buronan pergi ke wilayah barat untuk melacak keberadaan dua petugas Biro Pengelolaan Lahan yang menghilang saat menjalankan perintah penyitaan lahan di negara bagian yang tak ramah, Wyoming.', + description: + 'Satgas Buronan pergi ke wilayah barat untuk melacak keberadaan dua petugas Biro Pengelolaan Lahan yang menghilang saat menjalankan perintah penyitaan lahan di negara bagian yang tak ramah, Wyoming.', season: 4, episode: 18 }) diff --git a/sites/watch.sportsnet.ca/watch.sportsnet.ca.config.js b/sites/watch.sportsnet.ca/watch.sportsnet.ca.config.js index 88e3db99..a3e956e9 100644 --- a/sites/watch.sportsnet.ca/watch.sportsnet.ca.config.js +++ b/sites/watch.sportsnet.ca/watch.sportsnet.ca.config.js @@ -29,11 +29,11 @@ module.exports = { async channels() { const axios = require('axios') const html = await axios - .get(`https://watch.sportsnet.ca/schedule/tvlistings`) + .get('https://watch.sportsnet.ca/schedule/tvlistings') .then(r => r.data) .catch(console.log) - let [, __data] = html.match(/window\.__data \= ([^<]+)<\/script>/) + let [, __data] = html.match(/window\.__data = ([^<]+)<\/script>/) const func = new Function(`"use strict";return ${__data}`) const data = func() diff --git a/sites/web.magentatv.de/web.magentatv.de.config.js b/sites/web.magentatv.de/web.magentatv.de.config.js index b5ecbaa2..722ef2a5 100644 --- a/sites/web.magentatv.de/web.magentatv.de.config.js +++ b/sites/web.magentatv.de/web.magentatv.de.config.js @@ -30,7 +30,8 @@ module.exports = { offset: 0, properties: [ { - include: 'endtime,genres,id,name,starttime,channelid,pictures,introduce,subName,seasonNum,subNum,cast,country,producedate,externalIds', + include: + 'endtime,genres,id,name,starttime,channelid,pictures,introduce,subName,seasonNum,subNum,cast,country,producedate,externalIds', name: 'playbill' } ], @@ -113,15 +114,15 @@ function parseCategory(item) { } function parseDirectors(item) { - if (!item.cast || !item.cast.director) return []; + if (!item.cast || !item.cast.director) return [] return item.cast.director .replace('und', ',') .split(',') - .map(i => i.trim()); + .map(i => i.trim()) } function parseProducers(item) { - if (!item.cast || !item.cast.producer) return []; + if (!item.cast || !item.cast.producer) return [] return item.cast.producer .replace('und', ',') .split(',') @@ -129,7 +130,7 @@ function parseProducers(item) { } function parseAdapters(item) { - if (!item.cast || !item.cast.adaptor) return []; + if (!item.cast || !item.cast.adaptor) return [] return item.cast.adaptor .replace('und', ',') .split(',') @@ -138,7 +139,7 @@ function parseAdapters(item) { function parseUrls(item) { // currently only a imdb id is returned by the api, thus we can construct the url here - if (!item.externalIds) return []; + if (!item.externalIds) return [] return JSON.parse(item.externalIds) .filter(externalId => externalId.type === 'imdb' && externalId.id) .map(externalId => ({ system: 'imdb', value: `https://www.imdb.com/title/${externalId.id}` })) diff --git a/sites/web.magentatv.de/web.magentatv.de.test.js b/sites/web.magentatv.de/web.magentatv.de.test.js index 935b0828..95332580 100644 --- a/sites/web.magentatv.de/web.magentatv.de.test.js +++ b/sites/web.magentatv.de/web.magentatv.de.test.js @@ -41,7 +41,8 @@ it('can generate valid request data', () => { offset: 0, properties: [ { - include: 'endtime,genres,id,name,starttime,channelid,pictures,introduce,subName,seasonNum,subNum,cast,country,producedate,externalIds', + include: + 'endtime,genres,id,name,starttime,channelid,pictures,introduce,subName,seasonNum,subNum,cast,country,producedate,externalIds', name: 'playbill' } ], @@ -78,20 +79,27 @@ it('can parse response', () => { sub_title: 'Tritte unter dem Tisch', description: 'Amy arbeitet für eine Weile in Sheldons Universität, er freut sich darüber, doch sie warnt ihn, dass sie sich jetzt häufiger zu Gesicht bekommen. Als Leonard, Sheldon, Raj und Howard zusammen sitzen, diskutieren sie darüber. Sheldon lässt auf sich einreden und informiert Amy, dass er ein Problem mit ihr auf seiner Arbeit hat. Sie ist enttäuscht, während Bernadette mit Howard darüber spricht, warum er auf Sheldon eingeredet hat.', - season: "7", - episode: "5", + season: '7', + episode: '5', image: 'http://ngiss.t-online.de/cm1s/media/gracenote/1/0/p10262968_e_h9_ah_2021-10-20T07_16_16.jpg', category: ['Sitcom'], - directors: ["Mark Cendrowski"], - producers: ["Chuck Lorre","Bill Prady","Steven Molaro"], - adapters: ["Steven Molaro","Steve Holland","Maria Ferrari","Chuck Lorre","Eric Kaplan","Jim Reynolds"], + directors: ['Mark Cendrowski'], + producers: ['Chuck Lorre', 'Bill Prady', 'Steven Molaro'], + adapters: [ + 'Steven Molaro', + 'Steve Holland', + 'Maria Ferrari', + 'Chuck Lorre', + 'Eric Kaplan', + 'Jim Reynolds' + ], country: 'US', - date: "2013-01-01", + date: '2013-01-01', urls: [ { - system: "imdb", - value: "https://www.imdb.com/title/tt0898266" + system: 'imdb', + value: 'https://www.imdb.com/title/tt0898266' } ] } diff --git a/sites/winplay.co/winplay.co.config.js b/sites/winplay.co/winplay.co.config.js index 39375208..831fecc7 100644 --- a/sites/winplay.co/winplay.co.config.js +++ b/sites/winplay.co/winplay.co.config.js @@ -1,4 +1,3 @@ -const axios = require('axios') const dayjs = require('dayjs') module.exports = { diff --git a/sites/ziggogo.tv/ziggogo.tv.config.js b/sites/ziggogo.tv/ziggogo.tv.config.js index 0de4cc63..480904dc 100644 --- a/sites/ziggogo.tv/ziggogo.tv.config.js +++ b/sites/ziggogo.tv/ziggogo.tv.config.js @@ -18,11 +18,9 @@ module.exports = { } }, url({ date, segment = 0 }) { - return `https://static.spark.ziggogo.tv/eng/web/epg-service-lite/nl/en/events/segments/${ - date.format('YYYYMMDD') - }${ - segment.toString().padStart(2, '0') - }0000` + return `https://static.spark.ziggogo.tv/eng/web/epg-service-lite/nl/en/events/segments/${date.format( + 'YYYYMMDD' + )}${segment.toString().padStart(2, '0')}0000` }, async parser({ content, channel, date }) { const programs = [] @@ -31,9 +29,9 @@ module.exports = { if (Array.isArray(items.entries)) { // fetch other segments const queues = [ - module.exports.url({ date, segment: 6}), - module.exports.url({ date, segment: 12}), - module.exports.url({ date, segment: 18}), + module.exports.url({ date, segment: 6 }), + module.exports.url({ date, segment: 12 }), + module.exports.url({ date, segment: 18 }) ] await doFetch(queues, (url, res) => { if (Array.isArray(res.entries)) { @@ -43,13 +41,12 @@ module.exports = { items.entries .filter(item => item.channelId === channel.site_id) .forEach(item => { - if (Array.isArray(item.events)){ + if (Array.isArray(item.events)) { if (detailedGuide) { - queues.push(...item.events - .map(event => - `https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/replayEvent/${ - event.id - }?returnLinearContent=true&forceLinearResponse=true&language=nl` + queues.push( + ...item.events.map( + event => + `https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/replayEvent/${event.id}?returnLinearContent=true&forceLinearResponse=true&language=nl` ) ) } else { @@ -92,20 +89,23 @@ module.exports = { const channels = [] const axios = require('axios') const res = await axios - .get('https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/channels?cityId=65535&language=en&productClass=Orion-DASH&platform=web') + .get( + 'https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/channels?cityId=65535&language=en&productClass=Orion-DASH&platform=web' + ) .then(r => r.data) .catch(console.error) if (Array.isArray(res)) { - channels.push(...res - .filter(item => !item.isHidden) - .map(item => { - return { - lang: 'nl', - site_id: item.id, - name: item.name - } - }) + channels.push( + ...res + .filter(item => !item.isHidden) + .map(item => { + return { + lang: 'nl', + site_id: item.id, + name: item.name + } + }) ) } diff --git a/sites/ziggogo.tv/ziggogo.tv.test.js b/sites/ziggogo.tv/ziggogo.tv.test.js index e4d9aef1..bfc5b2d4 100644 --- a/sites/ziggogo.tv/ziggogo.tv.test.js +++ b/sites/ziggogo.tv/ziggogo.tv.test.js @@ -32,7 +32,7 @@ axios.get.mockImplementation(url => { 'https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/replayEvent/crid:~~2F~~2Fgn.tv~~2F28842707~~2FEP022675661065,imi:33138a61bfa639696f386a5b8da9052e98cffdf8?returnLinearContent=true&forceLinearResponse=true&language=nl': 'program02.json', 'https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/replayEvent/crid:~~2F~~2Fgn.tv~~2F28728829~~2FEP052397600066,imi:34a0b026912de96e3546b15ad2983070a250dfd5?returnLinearContent=true&forceLinearResponse=true&language=nl': - 'program03.json', + 'program03.json' } let data = '' if (urls[url] !== undefined) { @@ -51,15 +51,15 @@ it('can generate valid url', () => { }) it('can parse response', async () => { - const content = await axios.get(url({ date })) + const content = await axios + .get(url({ date })) .then(response => response.data) .catch(console.error) - const result = (await parser({ content, channel, date })) - .map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + const result = (await parser({ content, channel, date })).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(result.length).toBe(3) expect(result[0]).toMatchObject({ @@ -91,11 +91,7 @@ it('can parse response', async () => { category: ['Talkshow'], season: 1, episode: 65, - actor: [ - 'Sophie Hilbrand', - 'Jeroen Pauw', - 'Tim de Wit' - ] + actor: ['Sophie Hilbrand', 'Jeroen Pauw', 'Tim de Wit'] }) }) From 66be6c5a818f5fd0b9a616b384069d411b3b1e6a Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:02:24 +0300 Subject: [PATCH 32/64] Install husky --- .husky/pre-commit | 1 + package-lock.json | 20 ++++++++++++++++++++ yarn.lock | 5 +++++ 3 files changed, 26 insertions(+) create mode 100644 .husky/pre-commit diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..3867a0fe --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npm run lint diff --git a/package-lock.json b/package-lock.json index 757079f1..f3218067 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,7 @@ "fs-extra": "^10.0.1", "glob": "^7.2.0", "globals": "^15.14.0", + "husky": "^9.1.7", "iconv-lite": "^0.4.24", "inquirer": "^8.2.6", "jest": "^29.7.0", @@ -5026,6 +5027,20 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -12623,6 +12638,11 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" }, + "husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", diff --git a/yarn.lock b/yarn.lock index 58a6adce..7fb0e29a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2841,6 +2841,11 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +husky@^9.1.7: + version "9.1.7" + resolved "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz" + integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA== + iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" From b0c8dffa1a7777712c806b18eaa069f85d87432b Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:03:27 +0300 Subject: [PATCH 33/64] Update package.json --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e93b469e..452b171b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "epg", "scripts": { + "act:check": "act pull_request -W .github/workflows/check.yml", "act:update": "act workflow_dispatch -W .github/workflows/update.yml", "api:load": "npx tsx scripts/commands/api/load.ts", "api:generate": "npx tsx scripts/commands/api/generate.ts", @@ -15,7 +16,8 @@ "test": "run-script-os", "test:win32": "SET \"TZ=Pacific/Nauru\" && npx jest --runInBand", "test:default": "TZ=Pacific/Nauru npx jest --runInBand", - "postinstall": "npm run api:load" + "postinstall": "npm run api:load", + "prepare": "husky" }, "private": true, "author": "Arhey", @@ -63,6 +65,7 @@ "fs-extra": "^10.0.1", "glob": "^7.2.0", "globals": "^15.14.0", + "husky": "^9.1.7", "iconv-lite": "^0.4.24", "inquirer": "^8.2.6", "jest": "^29.7.0", From 2f670a54670a60dddc79e705502d6905d85a4932 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:03:48 +0300 Subject: [PATCH 34/64] Create check.yml --- .github/workflows/check.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/check.yml diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 00000000..7bf7ec33 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,35 @@ +name: check +on: + workflow_dispatch: + pull_request: + types: [opened, synchronize, reopened, edited] +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 2 + - uses: tj-actions/changed-files@v45 + id: files + with: + files: | + tests/**/*.{js,ts} + scripts/**/*.{js,ts} + sites/**/*.{js,ts} + - run: echo ${{ steps.files.outputs.all_changed_files }} + - uses: actions/setup-node@v4 + if: ${{ !env.ACT && steps.files.outputs.any_changed == 'true' }} + with: + node-version: 22 + cache: 'npm' + - name: install dependencies + if: steps.files.outputs.any_changed == 'true' + run: npm install + - name: check changed files + if: steps.files.outputs.any_changed == 'true' + run: | + npx eslint ${{ steps.files.outputs.all_changed_files }} \ No newline at end of file From 222e65b3ea42176b1d5e24bee06376cc9b5a81a3 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:04:01 +0300 Subject: [PATCH 35/64] Update CONTRIBUTING.md --- CONTRIBUTING.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 35ba2356..3aa8d2b0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -147,6 +147,7 @@ For scripts to work, you must have [Node.js](https://nodejs.org/en) installed on To run scripts use the `npm run ` command. +- `act:check`: allows to test the [check](https://github.com/iptv-org/iptv/blob/master/.github/workflows/check.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). - `act:update`: allows to test the [update](https://github.com/iptv-org/iptv/blob/master/.github/workflows/update.yml) workflow locally. Depends on [nektos/act](https://github.com/nektos/act). - `api:load`: downloads the latest channels data from the [iptv-org/api](https://github.com/iptv-org/api). - `api:generate`: generates a JSON file with all channels for the [iptv-org/api](https://github.com/iptv-org/api) repository. From d134f2d044dc227ea1901927aa6463ba999881c8 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:23:57 +0300 Subject: [PATCH 36/64] Update check.yml --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 7bf7ec33..7226bce4 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -16,6 +16,7 @@ jobs: - uses: tj-actions/changed-files@v45 id: files with: + since_last_remote_commit: true files: | tests/**/*.{js,ts} scripts/**/*.{js,ts} From 5c3df01cef31ccbf7bc293bb24902a3aecced303 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Wed, 1 Jan 2025 13:24:57 +0300 Subject: [PATCH 37/64] Update check.yml --- .github/workflows/check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 7226bce4..5adc97e6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,7 +21,6 @@ jobs: tests/**/*.{js,ts} scripts/**/*.{js,ts} sites/**/*.{js,ts} - - run: echo ${{ steps.files.outputs.all_changed_files }} - uses: actions/setup-node@v4 if: ${{ !env.ACT && steps.files.outputs.any_changed == 'true' }} with: From cbeac9dd3512e9bf437790d70727771602bfe73d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 11:52:23 +0300 Subject: [PATCH 38/64] Update tests/__data__ --- .../{channels-lint.channels.xml => error.channels.xml} | 0 tests/__data__/input/channels-lint/invalid.channels.xml | 5 +++++ 2 files changed, 5 insertions(+) rename tests/__data__/input/channels-lint/{channels-lint.channels.xml => error.channels.xml} (100%) create mode 100644 tests/__data__/input/channels-lint/invalid.channels.xml diff --git a/tests/__data__/input/channels-lint/channels-lint.channels.xml b/tests/__data__/input/channels-lint/error.channels.xml similarity index 100% rename from tests/__data__/input/channels-lint/channels-lint.channels.xml rename to tests/__data__/input/channels-lint/error.channels.xml diff --git a/tests/__data__/input/channels-lint/invalid.channels.xml b/tests/__data__/input/channels-lint/invalid.channels.xml new file mode 100644 index 00000000..f69d9631 --- /dev/null +++ b/tests/__data__/input/channels-lint/invalid.channels.xml @@ -0,0 +1,5 @@ + + + + Bravo + \ No newline at end of file From bb36840b72b10a2362226a94d2939761720844ac Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 11:52:50 +0300 Subject: [PATCH 39/64] Update lint.test.ts --- tests/commands/channels/lint.test.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts index 4e37d7a9..d9037663 100644 --- a/tests/commands/channels/lint.test.ts +++ b/tests/commands/channels/lint.test.ts @@ -9,13 +9,27 @@ describe('channels:lint', () => { it('will show a message if the file contains a syntax error', () => { try { const cmd = - 'npm run channels:lint --- --channels=tests/__data__/input/channels-lint/channels-lint.channels.xml' + 'npm run channels:lint --- --channels=tests/__data__/input/channels-lint/error.channels.xml' execSync(cmd, { encoding: 'utf8' }) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) expect((error as ExecError).stdout).toContain( - "channels-lint.channels.xml\n 3:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n" + "error.channels.xml\n 3:0 Element 'channel': The attribute 'lang' is required but missing.\n\n1 error(s)\n" + ) + } + }) + + it('will show a message if an error occurred while parsing an xml file', () => { + try { + const cmd = + 'npm run channels:lint --- --channels=tests/__data__/input/channels-lint/invalid.channels.xml' + execSync(cmd, { encoding: 'utf8' }) + process.exit(1) + } catch (error) { + expect((error as ExecError).status).toBe(1) + expect((error as ExecError).stdout).toContain( + 'invalid.channels.xml\n 2:6 XML declaration allowed only at the start of the document\n' ) } }) From 3525735885fa35240374428d8099f9d189b3ec50 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 11:53:02 +0300 Subject: [PATCH 40/64] Update lint.ts --- scripts/commands/channels/lint.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/commands/channels/lint.ts b/scripts/commands/channels/lint.ts index 37c6b646..c336a677 100644 --- a/scripts/commands/channels/lint.ts +++ b/scripts/commands/channels/lint.ts @@ -51,11 +51,15 @@ async function main() { let localErrors: ValidationError[] = [] - const xsdDoc = libxml.parseXml(xsd) - const doc = libxml.parseXml(xml) + try { + const xsdDoc = libxml.parseXml(xsd) + const doc = libxml.parseXml(xml) - if (!doc.validate(xsdDoc)) { - localErrors = doc.validationErrors + if (!doc.validate(xsdDoc)) { + localErrors = doc.validationErrors + } + } catch (error) { + localErrors.push(error) } if (localErrors.length) { From 382d4a310eace0c194638f7aaa828e220abf72fb Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:00:46 +0300 Subject: [PATCH 41/64] Fix pluto.tv linter issues --- sites/pluto.tv/pluto.tv.config.js | 99 ++++++++++++------------- sites/pluto.tv/pluto.tv.test.js | 13 ++-- sites/pluto.tv/pluto.tv_ca.channels.xml | 1 - sites/pluto.tv/pluto.tv_uk.channels.xml | 1 - 4 files changed, 57 insertions(+), 57 deletions(-) diff --git a/sites/pluto.tv/pluto.tv.config.js b/sites/pluto.tv/pluto.tv.config.js index ade3ea2c..294e130e 100644 --- a/sites/pluto.tv/pluto.tv.config.js +++ b/sites/pluto.tv/pluto.tv.config.js @@ -1,50 +1,49 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const axios = require('axios') - -dayjs.extend(utc) -dayjs.extend(timezone) - -module.exports = { - site: 'pluto.tv', - days: 3, - - url: function ({ date, channel }) { - const channelId = channel.site_id - - const localTimezone = dayjs.tz.guess() - - const startTime = dayjs(date).tz(localTimezone).startOf('day').toISOString() - const endTime = dayjs(date).tz(localTimezone).add(this.days, 'day').endOf('day').toISOString() - - const generatedUrl = `https://api.pluto.tv/v2/channels/${channelId}?start=${startTime}&stop=${endTime}` - return generatedUrl - }, - - parser: function ({ content }) { - const data = JSON.parse(content) - const programs = [] - - if (data.timelines) { - data.timelines.forEach(item => { - programs.push({ - title: item.title, - subTitle: item.episode?.name || '', - description: item.episode?.description || '', - episode: item.episode?.number || '', - season: item.episode?.season || '', - actors: item.episode?.clip?.actors || [], - categories: [item.episode?.genre, item.episode?.subGenre].filter(Boolean), - rating: item.episode?.rating || '', - date: item.episode?.clip?.originalReleaseDate || '', - icon: item.episode?.series?.tile?.path || '', - start: item.start, - stop: item.stop - }) - }) - } - - return programs - } -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +module.exports = { + site: 'pluto.tv', + days: 3, + + url: function ({ date, channel }) { + const channelId = channel.site_id + + const localTimezone = dayjs.tz.guess() + + const startTime = dayjs(date).tz(localTimezone).startOf('day').toISOString() + const endTime = dayjs(date).tz(localTimezone).add(this.days, 'day').endOf('day').toISOString() + + const generatedUrl = `https://api.pluto.tv/v2/channels/${channelId}?start=${startTime}&stop=${endTime}` + return generatedUrl + }, + + parser: function ({ content }) { + const data = JSON.parse(content) + const programs = [] + + if (data.timelines) { + data.timelines.forEach(item => { + programs.push({ + title: item.title, + subTitle: item.episode?.name || '', + description: item.episode?.description || '', + episode: item.episode?.number || '', + season: item.episode?.season || '', + actors: item.episode?.clip?.actors || [], + categories: [item.episode?.genre, item.episode?.subGenre].filter(Boolean), + rating: item.episode?.rating || '', + date: item.episode?.clip?.originalReleaseDate || '', + icon: item.episode?.series?.tile?.path || '', + start: item.start, + stop: item.stop + }) + }) + } + + return programs + } +} diff --git a/sites/pluto.tv/pluto.tv.test.js b/sites/pluto.tv/pluto.tv.test.js index eed3fbd5..37ec1a81 100644 --- a/sites/pluto.tv/pluto.tv.test.js +++ b/sites/pluto.tv/pluto.tv.test.js @@ -33,14 +33,17 @@ it('can parse response', () => { start: '2024-12-28T00:21:00.000Z', stop: '2024-12-28T00:48:00.000Z', title: 'Naruto: El Tercer Hokage, Eternamente', - description: 'Gaara y Naruto continúan combatiendo con todas sus fuerzas. Decidido a proteger a Sakura, Naruto ataca a Gaara una y otra vez.', + description: + 'Gaara y Naruto continúan combatiendo con todas sus fuerzas. Decidido a proteger a Sakura, Naruto ataca a Gaara una y otra vez.', subTitle: 'El Tercer Hokage, Eternamente', episode: 80, season: 2, - actors: ["Isabel Martion (Naruto Uzumaki)", - "Christine Byrd (Sakura Haruno)", - "Victor Ugarte (Sasuke Uchiha)", - "Alfonso Obreg (Kakashi Hatake)"], + actors: [ + 'Isabel Martion (Naruto Uzumaki)', + 'Christine Byrd (Sakura Haruno)', + 'Victor Ugarte (Sasuke Uchiha)', + 'Alfonso Obreg (Kakashi Hatake)' + ], categories: ['Anime', 'Anime Action & Adventure'], rating: 'TV-14', date: '2004-04-21T00:00:00.000Z', diff --git a/sites/pluto.tv/pluto.tv_ca.channels.xml b/sites/pluto.tv/pluto.tv_ca.channels.xml index 980c61ad..1d714c33 100644 --- a/sites/pluto.tv/pluto.tv_ca.channels.xml +++ b/sites/pluto.tv/pluto.tv_ca.channels.xml @@ -1,4 +1,3 @@ - Pluto TV Advent Calendar diff --git a/sites/pluto.tv/pluto.tv_uk.channels.xml b/sites/pluto.tv/pluto.tv_uk.channels.xml index ae052b92..23c413b5 100644 --- a/sites/pluto.tv/pluto.tv_uk.channels.xml +++ b/sites/pluto.tv/pluto.tv_uk.channels.xml @@ -1,4 +1,3 @@ - Diane, femme flic From e2bf048d542244fb7ea2399823cc654cbc26292f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:01:02 +0300 Subject: [PATCH 42/64] Update pre-commit --- .husky/pre-commit | 1 + 1 file changed, 1 insertion(+) diff --git a/.husky/pre-commit b/.husky/pre-commit index 3867a0fe..3c60e992 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1,2 @@ npm run lint +npm run channels:lint From 532386af91c805748e59d5521572ac9afe5effc2 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:54:42 +0300 Subject: [PATCH 43/64] Update lint.test.ts --- tests/commands/channels/lint.test.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts index d9037663..d7d8e2c0 100644 --- a/tests/commands/channels/lint.test.ts +++ b/tests/commands/channels/lint.test.ts @@ -8,8 +8,7 @@ type ExecError = { describe('channels:lint', () => { it('will show a message if the file contains a syntax error', () => { try { - const cmd = - 'npm run channels:lint --- --channels=tests/__data__/input/channels-lint/error.channels.xml' + const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/error.channels.xml' execSync(cmd, { encoding: 'utf8' }) process.exit(1) } catch (error) { @@ -23,7 +22,7 @@ describe('channels:lint', () => { it('will show a message if an error occurred while parsing an xml file', () => { try { const cmd = - 'npm run channels:lint --- --channels=tests/__data__/input/channels-lint/invalid.channels.xml' + 'npm run channels:lint --- tests/__data__/input/channels-lint/invalid.channels.xml' execSync(cmd, { encoding: 'utf8' }) process.exit(1) } catch (error) { @@ -33,4 +32,22 @@ describe('channels:lint', () => { ) } }) + + it('can test multiple files at ones', () => { + try { + const cmd = + 'npm run channels:lint --- tests/__data__/input/channels-lint/error.channels.xml tests/__data__/input/channels-lint/invalid.channels.xml' + execSync(cmd, { encoding: 'utf8' }) + process.exit(1) + } catch (error) { + expect((error as ExecError).status).toBe(1) + expect((error as ExecError).stdout).toContain( + "error.channels.xml\n 3:0 Element 'channel': The attribute 'lang' is required but missing.\n" + ) + expect((error as ExecError).stdout).toContain( + 'invalid.channels.xml\n 2:6 XML declaration allowed only at the start of the document\n' + ) + expect((error as ExecError).stdout).toContain('2 error(s)') + } + }) }) From 786e95a388e61c0abbbcce7c94c79aa83c12e16c Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:55:00 +0300 Subject: [PATCH 44/64] Update lint.ts --- scripts/commands/channels/lint.ts | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/scripts/commands/channels/lint.ts b/scripts/commands/channels/lint.ts index c336a677..c865d7f6 100644 --- a/scripts/commands/channels/lint.ts +++ b/scripts/commands/channels/lint.ts @@ -1,7 +1,7 @@ import chalk from 'chalk' import libxml, { ValidationError } from 'libxmljs2' import { program } from 'commander' -import { Logger, Storage, File } from '@freearhey/core' +import { Storage, File } from '@freearhey/core' const xsd = ` @@ -23,26 +23,14 @@ const xsd = ` ` -program - .option( - '-c, --channels ', - 'Path to channels.xml file to validate', - 'sites/**/*.channels.xml' - ) - .parse(process.argv) - -const options = program.opts() +program.argument('[filepath]', 'Path to *.channels.xml files to validate').parse(process.argv) async function main() { - const logger = new Logger() const storage = new Storage() - logger.info('options:') - logger.tree(options) - let errors: ValidationError[] = [] - const files: string[] = await storage.list(options.channels) + const files = program.args.length ? program.args : await storage.list('sites/**/*.channels.xml') for (const filepath of files) { const file = new File(filepath) if (file.extension() !== 'xml') continue From fef6c50bf165a6ab5f5b1f78347488a9d16b946a Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:55:19 +0300 Subject: [PATCH 45/64] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 452b171b..104754b8 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test": "run-script-os", "test:win32": "SET \"TZ=Pacific/Nauru\" && npx jest --runInBand", "test:default": "TZ=Pacific/Nauru npx jest --runInBand", - "postinstall": "npm run api:load", + "postinstall": "test -n \"$SKIP_POSTINSTALL\" || npm run api:load", "prepare": "husky" }, "private": true, From 7e303db1f5e45d95fa6c1a8f3aa7327618152fcf Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:55:57 +0300 Subject: [PATCH 46/64] Update check.yml --- .github/workflows/check.yml | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5adc97e6..a8d8f70c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,19 +17,26 @@ jobs: id: files with: since_last_remote_commit: true - files: | - tests/**/*.{js,ts} - scripts/**/*.{js,ts} - sites/**/*.{js,ts} + files_yaml: | + js: + - tests/**/*.{js,ts} + - scripts/**/*.{js,ts} + - sites/**/*.{js,ts} + channels: + - sites/**/*.channels.xml - uses: actions/setup-node@v4 - if: ${{ !env.ACT && steps.files.outputs.any_changed == 'true' }} + if: ${{ !env.ACT && (steps.files.outputs.js_any_changed == 'true' || steps.files.outputs.channels_any_changed == 'true') }} with: node-version: 22 cache: 'npm' - name: install dependencies - if: steps.files.outputs.any_changed == 'true' - run: npm install - - name: check changed files - if: steps.files.outputs.any_changed == 'true' + if: steps.files.outputs.js_any_changed == 'true' || steps.files.outputs.channels_any_changed == 'true' + run: SKIP_POSTINSTALL=1 npm install + - name: check changed js-files + if: steps.files.outputs.js_any_changed == 'true' run: | - npx eslint ${{ steps.files.outputs.all_changed_files }} \ No newline at end of file + npx eslint ${{ steps.files.outputs.js_all_changed_files }} + - name: check changed *.channels.xml + if: steps.files.outputs.channels_any_changed == 'true' + run: | + npm run channels:lint -- ${{ steps.files.outputs.channels_all_changed_files }} \ No newline at end of file From 4aad8125f5345bec883cd5a929cf69752af1c15b Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 4 Jan 2025 20:43:36 +0300 Subject: [PATCH 47/64] Update sky.com.config.js --- sites/sky.com/sky.com.config.js | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/sites/sky.com/sky.com.config.js b/sites/sky.com/sky.com.config.js index 559fba4a..3be68669 100644 --- a/sites/sky.com/sky.com.config.js +++ b/sites/sky.com/sky.com.config.js @@ -25,20 +25,18 @@ module.exports = { .filter(schedule => schedule.sid === channel.site_id) .forEach(schedule => { if (Array.isArray(schedule.events)) { - schedule.events - .forEach(event => { - const start = dayjs.utc(event.st * 1000) - if (start.isSame(date, 'd')) { - programs.push({ - title: event.t, - description: event.sy, - season: event.seasonnumber, - episode: event.episodenumber, - start, - stop: start.add(event.d, 's') - }) - } - }) + schedule.events.forEach(event => { + const start = dayjs.utc(event.st * 1000) + if (start.isSame(date, 'd')) { + programs.push({ + title: event.t, + description: event.sy, + season: event.seasonnumber, + episode: event.episodenumber, + start, + stop: start.add(event.d, 's') + }) + } }) } }) From e8f89b216c767571e6f97380cefc1e7e1750f68a Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 4 Jan 2025 20:48:37 +0300 Subject: [PATCH 48/64] Fix linter issues --- sites/cyta.com.cy/cyta.com.cy.config.js | 119 +++++++++-------- sites/cyta.com.cy/cyta.com.cy.test.js | 102 +++++++-------- sites/stod2.is/stod2.is.config.js | 135 ++++++++++---------- sites/stod2.is/stod2.is.test.js | 163 ++++++++++++------------ 4 files changed, 255 insertions(+), 264 deletions(-) diff --git a/sites/cyta.com.cy/cyta.com.cy.config.js b/sites/cyta.com.cy/cyta.com.cy.config.js index ef9937a5..f698dfa4 100644 --- a/sites/cyta.com.cy/cyta.com.cy.config.js +++ b/sites/cyta.com.cy/cyta.com.cy.config.js @@ -1,60 +1,59 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') -const cheerio = require('cheerio') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'cyta.com.cy', - days: 7, - request: { - cache: { - ttl: 60 * 60 * 1000 // 1 hour - } - }, - url: function ({date, channel}) { - // Get the epoch timestamp - const todayEpoch = date.startOf('day').utc().valueOf() - // Get the epoch timestamp for the next day - const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf() - return `https://epg.cyta.com.cy/api/mediacatalog/fetchEpg?startTimeEpoch=${todayEpoch}&endTimeEpoch=${nextDayEpoch}&language=1&channelIds=${channel.site_id}` - }, - parser: function ({content}) { - const data = JSON.parse(content) - const programs = [] - - data.channelEpgs.forEach(channel => { - channel.epgPlayables.forEach(epg => { - const start = new Date(epg.startTime).toISOString(); - const stop = new Date(epg.endTime).toISOString(); - - programs.push({ - title: epg.name, - start, - stop - }) - }) - }) - - return programs - }, - async channels() { - const axios = require('axios') - const data = await axios - .get(`https://epg.cyta.com.cy/api/mediacatalog/fetchChannels?language=1`) - .then(r => r.data) - .catch(console.log) - - return data.channels.map(item => { - return { - lang: 'el', - site_id: item.id, - name: item.name - } - }) - } -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'cyta.com.cy', + days: 7, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1 hour + } + }, + url: function ({ date, channel }) { + // Get the epoch timestamp + const todayEpoch = date.startOf('day').utc().valueOf() + // Get the epoch timestamp for the next day + const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf() + return `https://epg.cyta.com.cy/api/mediacatalog/fetchEpg?startTimeEpoch=${todayEpoch}&endTimeEpoch=${nextDayEpoch}&language=1&channelIds=${channel.site_id}` + }, + parser: function ({ content }) { + const data = JSON.parse(content) + const programs = [] + + data.channelEpgs.forEach(channel => { + channel.epgPlayables.forEach(epg => { + const start = new Date(epg.startTime).toISOString() + const stop = new Date(epg.endTime).toISOString() + + programs.push({ + title: epg.name, + start, + stop + }) + }) + }) + + return programs + }, + async channels() { + const axios = require('axios') + const data = await axios + .get('https://epg.cyta.com.cy/api/mediacatalog/fetchChannels?language=1') + .then(r => r.data) + .catch(console.log) + + return data.channels.map(item => { + return { + lang: 'el', + site_id: item.id, + name: item.name + } + }) + } +} diff --git a/sites/cyta.com.cy/cyta.com.cy.test.js b/sites/cyta.com.cy/cyta.com.cy.test.js index d09f7bcc..95797a92 100644 --- a/sites/cyta.com.cy/cyta.com.cy.test.js +++ b/sites/cyta.com.cy/cyta.com.cy.test.js @@ -1,53 +1,49 @@ -const { url, parser } = require('./cyta.com.cy.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(utc) -dayjs.extend(customParseFormat) - -const date = dayjs.utc('2025-01-03', 'YYYY-MM-DD').startOf('day') -const channel = { - site_id: '561066', - xmltv_id: 'RIK1.cy' -} - -it('can generate valid url', () => { - const generatedUrl = url({ date, channel }) - expect(generatedUrl).toBe( - 'https://epg.cyta.com.cy/api/mediacatalog/fetchEpg?startTimeEpoch=1735862400000&endTimeEpoch=1735948800000&language=1&channelIds=561066' - ) -}) - -it('can parse response', () => { - const content = ` - { - "channelEpgs": [ - { - "epgPlayables": [ - { "name": "Πρώτη Ενημέρωση", "startTime": 1735879500000, "endTime": 1735889400000 } - ] - } - ] - }` - - const result = parser({ content }).map(p => { - p.start = p.start - p.stop = p.stop - return p - }) - - expect(result).toMatchObject([ - { - title: 'Πρώτη Ενημέρωση', - start: '2025-01-03T04:45:00.000Z', - stop: '2025-01-03T07:30:00.000Z' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - content: '{"channelEpgs":[]}' - }) - expect(result).toMatchObject([]) -}) +const { url, parser } = require('./cyta.com.cy.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(utc) +dayjs.extend(customParseFormat) + +const date = dayjs.utc('2025-01-03', 'YYYY-MM-DD').startOf('day') +const channel = { + site_id: '561066', + xmltv_id: 'RIK1.cy' +} + +it('can generate valid url', () => { + const generatedUrl = url({ date, channel }) + expect(generatedUrl).toBe( + 'https://epg.cyta.com.cy/api/mediacatalog/fetchEpg?startTimeEpoch=1735862400000&endTimeEpoch=1735948800000&language=1&channelIds=561066' + ) +}) + +it('can parse response', () => { + const content = ` + { + "channelEpgs": [ + { + "epgPlayables": [ + { "name": "Πρώτη Ενημέρωση", "startTime": 1735879500000, "endTime": 1735889400000 } + ] + } + ] + }` + + const result = parser({ content }) + + expect(result).toMatchObject([ + { + title: 'Πρώτη Ενημέρωση', + start: '2025-01-03T04:45:00.000Z', + stop: '2025-01-03T07:30:00.000Z' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: '{"channelEpgs":[]}' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/stod2.is/stod2.is.config.js b/sites/stod2.is/stod2.is.config.js index 6ae2d1d4..fc91355d 100644 --- a/sites/stod2.is/stod2.is.config.js +++ b/sites/stod2.is/stod2.is.config.js @@ -1,68 +1,67 @@ -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const axios = require('axios') - -dayjs.extend(utc) - -module.exports = { - site: 'stod2.is', - channels: 'stod2.is.channels.xml', - days: 7, - request: { - cache: { - ttl: 60 * 60 * 1000 // 1 hour - } - }, - url({ channel, date }) { - return `https://api.stod2.is/dagskra/api/${channel.site_id}/${date.format('YYYY-MM-DD')}` - }, - parser: function ({ content }) { - let data - try { - data = JSON.parse(content) - } catch (error) { - console.error('Error parsing JSON:', error) - return [] - } - - const programs = [] - - if (data && Array.isArray(data)) { - data.forEach(item => { - if (!item) return - const start = dayjs.utc(item.upphaf) - const stop = start.add(item.slott, 'm') - - programs.push({ - title: item.isltitill, - sub_title: item.undirtitill, - description: item.lysing, - actors: item.adalhlutverk, - directors: item.leikstjori, - start, - stop - }) - }) - } - - return programs - }, - async channels() { - try { - const response = await axios.get('https://api.stod2.is/dagskra/api') - if (!response.data || !Array.isArray(response.data)) { - console.error('Error: No channels data found') - return [] - } - return response.data.map(item => { - return { - lang: 'is', - site_id: item - } - }) - } catch (error) { - console.error('Error fetching channels:', error) - return [] - } - } -} +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const axios = require('axios') + +dayjs.extend(utc) + +module.exports = { + site: 'stod2.is', + days: 7, + request: { + cache: { + ttl: 60 * 60 * 1000 // 1 hour + } + }, + url({ channel, date }) { + return `https://api.stod2.is/dagskra/api/${channel.site_id}/${date.format('YYYY-MM-DD')}` + }, + parser: function ({ content }) { + let data + try { + data = JSON.parse(content) + } catch (error) { + console.error('Error parsing JSON:', error) + return [] + } + + const programs = [] + + if (data && Array.isArray(data)) { + data.forEach(item => { + if (!item) return + const start = dayjs.utc(item.upphaf) + const stop = start.add(item.slott, 'm') + + programs.push({ + title: item.isltitill, + sub_title: item.undirtitill, + description: item.lysing, + actors: item.adalhlutverk, + directors: item.leikstjori, + start, + stop + }) + }) + } + + return programs + }, + async channels() { + try { + const response = await axios.get('https://api.stod2.is/dagskra/api') + if (!response.data || !Array.isArray(response.data)) { + console.error('Error: No channels data found') + return [] + } + return response.data.map(item => { + return { + lang: 'is', + site_id: item + } + }) + } catch (error) { + console.error('Error fetching channels:', error) + return [] + } + } +} diff --git a/sites/stod2.is/stod2.is.test.js b/sites/stod2.is/stod2.is.test.js index 2a9efee5..4dba9150 100644 --- a/sites/stod2.is/stod2.is.test.js +++ b/sites/stod2.is/stod2.is.test.js @@ -1,83 +1,80 @@ -const { parser, url } = require('./stod2.is.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -const timezone = require('dayjs/plugin/timezone') -const axios = require('axios') - -dayjs.extend(utc) -dayjs.extend(customParseFormat) -dayjs.extend(timezone) - -jest.mock('axios') - -const date = dayjs.utc('2025-01-03', 'YYYY-MM-DD').startOf('day') -const channel = { site_id: 'stod2', xmltv_id: 'Stod2.is' } - -const mockEpgData = JSON.stringify([ - { - midill: 'STOD2', - midill_heiti: 'Stöð 2', - dagsetning: '2025-01-03T00:00:00Z', - upphaf: '2025-01-03T08:00:00Z', - titill: 'Telma Borgþórsdóttir', - isltitill: 'Heimsókn', - undirtitill: 'Telma Borgþórsdóttir', - seria: 8, - thattur: 5, - thattafjoldi: 10, - birta_thatt: 1, - opin: 0, - beint: 0, - frumsyning: 0, - framundan_i_beinni: 0, - tegund: 'SER', - flokkur: 'Icelandic', - adalhlutverk: '', - leikstjori: '', - ar: '2019', - bannad: 'Green', - recidefni: 592645105, - recidlidur: 592645184, - recidsyning: null, - refno: null, - frelsi: 0, - netdagar: 0, - lysing: - 'Frábærir þættir með Sindra Sindrasyni sem lítur inn hjá íslenskum fagurkerum. Heimilin eru jafn ólík og þau eru mörg en eiga það þó eitt sameiginlegt að vera sett saman af alúð og smekklegheitum. Sindri hefur líka einstakt lag á að ná fram því besta í viðmælendum sínum.', - slott: 15, - slotlengd: '00:15' - } -]) - -it('can generate valid url', () => { - const generatedUrl = url({ date, channel }) - expect(generatedUrl).toBe('https://api.stod2.is/dagskra/api/stod2/2025-01-03') -}) - -it('can parse response', () => { - const content = mockEpgData - const result = parser({ content }).map(p => { - p.start = p.start.toISOString() - p.stop = p.stop.toISOString() - return p - }) - - expect(result).toMatchObject([ - { - title: 'Heimsókn', - sub_title: 'Telma Borgþórsdóttir', - description: - 'Frábærir þættir með Sindra Sindrasyni sem lítur inn hjá íslenskum fagurkerum. Heimilin eru jafn ólík og þau eru mörg en eiga það þó eitt sameiginlegt að vera sett saman af alúð og smekklegheitum. Sindri hefur líka einstakt lag á að ná fram því besta í viðmælendum sínum.', - actors: '', - directors: '', - start: '2025-01-03T08:00:00.000Z', - stop: '2025-01-03T08:15:00.000Z' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ content: '[]' }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./stod2.is.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(customParseFormat) +dayjs.extend(timezone) + +const date = dayjs.utc('2025-01-03', 'YYYY-MM-DD').startOf('day') +const channel = { site_id: 'stod2', xmltv_id: 'Stod2.is' } + +const mockEpgData = JSON.stringify([ + { + midill: 'STOD2', + midill_heiti: 'Stöð 2', + dagsetning: '2025-01-03T00:00:00Z', + upphaf: '2025-01-03T08:00:00Z', + titill: 'Telma Borgþórsdóttir', + isltitill: 'Heimsókn', + undirtitill: 'Telma Borgþórsdóttir', + seria: 8, + thattur: 5, + thattafjoldi: 10, + birta_thatt: 1, + opin: 0, + beint: 0, + frumsyning: 0, + framundan_i_beinni: 0, + tegund: 'SER', + flokkur: 'Icelandic', + adalhlutverk: '', + leikstjori: '', + ar: '2019', + bannad: 'Green', + recidefni: 592645105, + recidlidur: 592645184, + recidsyning: null, + refno: null, + frelsi: 0, + netdagar: 0, + lysing: + 'Frábærir þættir með Sindra Sindrasyni sem lítur inn hjá íslenskum fagurkerum. Heimilin eru jafn ólík og þau eru mörg en eiga það þó eitt sameiginlegt að vera sett saman af alúð og smekklegheitum. Sindri hefur líka einstakt lag á að ná fram því besta í viðmælendum sínum.', + slott: 15, + slotlengd: '00:15' + } +]) + +it('can generate valid url', () => { + const generatedUrl = url({ date, channel }) + expect(generatedUrl).toBe('https://api.stod2.is/dagskra/api/stod2/2025-01-03') +}) + +it('can parse response', () => { + const content = mockEpgData + const result = parser({ content }).map(p => { + p.start = p.start.toISOString() + p.stop = p.stop.toISOString() + return p + }) + + expect(result).toMatchObject([ + { + title: 'Heimsókn', + sub_title: 'Telma Borgþórsdóttir', + description: + 'Frábærir þættir með Sindra Sindrasyni sem lítur inn hjá íslenskum fagurkerum. Heimilin eru jafn ólík og þau eru mörg en eiga það þó eitt sameiginlegt að vera sett saman af alúð og smekklegheitum. Sindri hefur líka einstakt lag á að ná fram því besta í viðmælendum sínum.', + actors: '', + directors: '', + start: '2025-01-03T08:00:00.000Z', + stop: '2025-01-03T08:15:00.000Z' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ content: '[]' }) + expect(result).toMatchObject([]) +}) From ae7b32b079276004d854e96c16228209e72b6e52 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sat, 4 Jan 2025 20:49:06 +0300 Subject: [PATCH 49/64] Fix "test" error on Windows Details: https://github.com/iptv-org/epg/pull/2562#issuecomment-2571339858 --- package-lock.json | 15 +++++++++++++++ package.json | 3 ++- yarn.lock | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index f3218067..1b783e3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -61,6 +61,7 @@ "pdf-parse": "^1.1.1", "serve": "^14.2.4", "signale": "^1.4.0", + "skip-postinstall": "^1.0.0", "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", @@ -8069,6 +8070,15 @@ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "node_modules/skip-postinstall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/skip-postinstall/-/skip-postinstall-1.0.0.tgz", + "integrity": "sha512-IUVEmm4v7Ubzrp9JDG15oTzMB+abJdHcduXMRzBlHnHRrmpQ/QoPtYCRaorP+abAULTGEh87gPPyyMK5H1X1Dg==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "bin": { + "skip-postinstall": "index.js" + } + }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -14866,6 +14876,11 @@ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, + "skip-postinstall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/skip-postinstall/-/skip-postinstall-1.0.0.tgz", + "integrity": "sha512-IUVEmm4v7Ubzrp9JDG15oTzMB+abJdHcduXMRzBlHnHRrmpQ/QoPtYCRaorP+abAULTGEh87gPPyyMK5H1X1Dg==" + }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", diff --git a/package.json b/package.json index 104754b8..03db1c49 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test": "run-script-os", "test:win32": "SET \"TZ=Pacific/Nauru\" && npx jest --runInBand", "test:default": "TZ=Pacific/Nauru npx jest --runInBand", - "postinstall": "test -n \"$SKIP_POSTINSTALL\" || npm run api:load", + "postinstall": "skip-postinstall || npm run api:load", "prepare": "husky" }, "private": true, @@ -83,6 +83,7 @@ "pdf-parse": "^1.1.1", "serve": "^14.2.4", "signale": "^1.4.0", + "skip-postinstall": "^1.0.0", "srcset": "^4.0.0", "table2array": "^0.0.2", "tabletojson": "^2.0.7", diff --git a/yarn.lock b/yarn.lock index 7fb0e29a..9740f074 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4712,6 +4712,11 @@ sisteransi@^1.0.5: resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +skip-postinstall@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/skip-postinstall/-/skip-postinstall-1.0.0.tgz" + integrity sha512-IUVEmm4v7Ubzrp9JDG15oTzMB+abJdHcduXMRzBlHnHRrmpQ/QoPtYCRaorP+abAULTGEh87gPPyyMK5H1X1Dg== + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" From c8055f10d609b3e20e8afdd9ead008696ab05339 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:02:24 +0300 Subject: [PATCH 50/64] Add "debug" mode to tests --- tests/commands/api/generate.test.ts | 3 ++- tests/commands/channels/editor.test.ts | 3 ++- tests/commands/channels/lint.test.ts | 9 ++++++--- tests/commands/channels/parse.test.ts | 3 ++- tests/commands/channels/validate.test.ts | 18 ++++-------------- tests/commands/epg/grab.test.ts | 19 +++++++++++++------ tests/commands/sites/update.test.ts | 3 ++- 7 files changed, 31 insertions(+), 27 deletions(-) diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts index ab6a3ee7..b1fbb67d 100644 --- a/tests/commands/api/generate.test.ts +++ b/tests/commands/api/generate.test.ts @@ -16,7 +16,8 @@ beforeEach(() => { describe('api:generate', () => { it('can generate guides.json', () => { const cmd = `${ENV_VAR} npm run api:generate` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guides.json')).toEqual( content('tests/__data__/expected/guides.json') diff --git a/tests/commands/channels/editor.test.ts b/tests/commands/channels/editor.test.ts index 271014f0..9c03ba6d 100644 --- a/tests/commands/channels/editor.test.ts +++ b/tests/commands/channels/editor.test.ts @@ -25,7 +25,8 @@ describe('channels:editor', () => { try { const cmd = `${ENV_VAR} npm run channels:editor --- tests/__data__/output/channels.xml` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) } catch (error) { expect((error as ExecError).status).toBe(1) expect((error as ExecError).stdout).toContain('CNN International | CNNInternational.us [new]') diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts index d7d8e2c0..0c2ace78 100644 --- a/tests/commands/channels/lint.test.ts +++ b/tests/commands/channels/lint.test.ts @@ -9,7 +9,8 @@ describe('channels:lint', () => { it('will show a message if the file contains a syntax error', () => { try { const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/error.channels.xml' - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) @@ -23,7 +24,8 @@ describe('channels:lint', () => { try { const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/invalid.channels.xml' - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) @@ -37,7 +39,8 @@ describe('channels:lint', () => { try { const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/error.channels.xml tests/__data__/input/channels-lint/invalid.channels.xml' - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) diff --git a/tests/commands/channels/parse.test.ts b/tests/commands/channels/parse.test.ts index 5ca5ad87..3f52de37 100644 --- a/tests/commands/channels/parse.test.ts +++ b/tests/commands/channels/parse.test.ts @@ -14,7 +14,8 @@ describe('channels:parse', () => { it('can parse channels', () => { const cmd = 'npm run channels:parse --- --config=tests/__data__/input/channels-parse/channels-parse.config.js --output=tests/__data__/output/channels.xml' - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/channels.xml')).toEqual( content('tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml') diff --git a/tests/commands/channels/validate.test.ts b/tests/commands/channels/validate.test.ts index dfb1e907..b12cc317 100644 --- a/tests/commands/channels/validate.test.ts +++ b/tests/commands/channels/validate.test.ts @@ -15,17 +15,12 @@ describe('channels:validate', () => { it('will show a message if the file contains a duplicate', () => { try { const cmd = `${ENV_VAR} npm run channels:validate --- --channels=tests/__data__/input/channels-validate/duplicate.channels.xml` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) expect((error as ExecError).stdout).toContain(` -> channels:validate -> npx tsx scripts/commands/channels/validate.ts --channels=tests/__data__/input/channels-validate/duplicate.channels.xml - -options: - channels: tests/__data__/input/channels-validate/duplicate.channels.xml -tests/__data__/input/channels-validate/duplicate.channels.xml ┌─────────┬─────────────┬──────┬────────────────┬─────────┬─────────┐ │ (index) │ type │ lang │ xmltv_id │ site_id │ name │ ├─────────┼─────────────┼──────┼────────────────┼─────────┼─────────┤ @@ -40,17 +35,12 @@ tests/__data__/input/channels-validate/duplicate.channels.xml it('will show a message if the file contains a channel with wrong xmltv_id', () => { try { const cmd = `${ENV_VAR} npm run channels:validate --- --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) expect((error as ExecError).stdout).toContain(` -> channels:validate -> npx tsx scripts/commands/channels/validate.ts --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml - -options: - channels: tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml -tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml ┌─────────┬──────────────────┬──────┬────────────────────┬─────────┬─────────────────────┐ │ (index) │ type │ lang │ xmltv_id │ site_id │ name │ ├─────────┼──────────────────┼──────┼────────────────────┼─────────┼─────────────────────┤ diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index 1c5be77e..c28257f9 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -20,7 +20,8 @@ describe('epg:grab', () => { const cmd = `${ENV_VAR} npm run grab --- --site=example.com --output=${path.resolve( 'tests/__data__/output/guide.xml' )}` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide2.xml') @@ -29,7 +30,8 @@ describe('epg:grab', () => { it('can grab epg with multiple channels.xml files', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide.xml') @@ -40,7 +42,8 @@ describe('epg:grab', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=${path.resolve( 'tests/__data__/output/guide.xml' )} --gzip` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide.xml') @@ -54,7 +57,8 @@ describe('epg:grab', () => { it('can grab epg with wildcard as output', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guides/en/example.com.xml')).toEqual( content('tests/__data__/expected/guides/en/example.com.xml') @@ -67,7 +71,8 @@ describe('epg:grab', () => { it('can grab epg then language filter enabled', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml --lang=fr` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guides/fr/example.com.xml')).toEqual( content('tests/__data__/expected/guides/fr/example.com.xml') @@ -76,7 +81,8 @@ describe('epg:grab', () => { it('can grab epg using custom channels list', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml` - execSync(cmd, { encoding: 'utf8' }) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide.xml') @@ -86,6 +92,7 @@ describe('epg:grab', () => { it('it will raise an error if the timeout is exceeded', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml --timeout=0` const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(stdout) expect(stdout).toContain('ERR: Connection timeout') }) diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index 2ecbea5e..ee8ad331 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -16,12 +16,13 @@ beforeEach(() => { }) it('can update SITES.md', () => { - execSync( + const stdout = execSync( 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites npm run sites:update', { encoding: 'utf8' } ) + if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/sites.md')).toEqual( content('tests/__data__/expected/_sites.md') From 0f92463d056172b92d24143fcc9fb4cfe882994c Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:13:03 +0300 Subject: [PATCH 51/64] Update editor.test.ts --- tests/commands/channels/editor.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/commands/channels/editor.test.ts b/tests/commands/channels/editor.test.ts index 9c03ba6d..b3a6a13f 100644 --- a/tests/commands/channels/editor.test.ts +++ b/tests/commands/channels/editor.test.ts @@ -31,7 +31,7 @@ describe('channels:editor', () => { expect((error as ExecError).status).toBe(1) expect((error as ExecError).stdout).toContain('CNN International | CNNInternational.us [new]') expect((error as ExecError).stdout).toContain( - 'CNN International Europe | CNNInternationalEurope.us [api]' + 'CNN International Europe | CNNInternationalEurope.us' ) expect((error as ExecError).stdout).toContain('Overwrite') expect((error as ExecError).stdout).toContain('Skip') From 25093cb92716ea23ae1c69cde87693b4c559e335 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:20:33 +0300 Subject: [PATCH 52/64] Update update.test.ts --- tests/commands/sites/update.test.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index ee8ad331..5ce106b8 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -1,6 +1,7 @@ import { execSync } from 'child_process' import fs from 'fs-extra' import path from 'path' +import os from 'os' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') @@ -16,12 +17,14 @@ beforeEach(() => { }) it('can update SITES.md', () => { - const stdout = execSync( - 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites npm run sites:update', - { - encoding: 'utf8' - } - ) + let ENV_VAR = + 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites' + if (os.platform() === 'win32') { + ENV_VAR = + 'SET "DOT_SITES_DIR=tests/__data__/output/.sites" && SET "SITES_DIR=tests/__data__/input/sites-update/sites" &&' + } + + const stdout = execSync(`${ENV_VAR} npm run sites:update`, { encoding: 'utf8' }) if (process.env.DEBUG === 'true') console.log(stdout) expect(content('tests/__data__/output/sites.md')).toEqual( From e7bbc7db2346c961022abbfc77ce95844292c51d Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 5 Jan 2025 19:33:01 +0300 Subject: [PATCH 53/64] Update parse.ts --- scripts/commands/channels/parse.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/commands/channels/parse.ts b/scripts/commands/channels/parse.ts index 71ee938a..96c57a52 100644 --- a/scripts/commands/channels/parse.ts +++ b/scripts/commands/channels/parse.ts @@ -2,7 +2,7 @@ import { Logger, File, Collection, Storage } from '@freearhey/core' import { ChannelsParser, XML } from '../../core' import { Channel } from 'epg-grabber' import { Command } from 'commander' -import path from 'path' +import { pathToFileURL } from 'node:url' const program = new Command() program @@ -26,7 +26,7 @@ async function main() { const logger = new Logger() const file = new File(options.config) const dir = file.dirname() - const config = (await import(path.resolve(options.config))).default + const config = (await import(pathToFileURL(options.config))).default const outputFilepath = options.output || `${dir}/${config.site}.channels.xml` let channels = new Collection() From e15d812750992906eec91a7ca3ff37bf05bb1912 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 5 Jan 2025 20:10:11 +0300 Subject: [PATCH 54/64] Replace path.resolve with pathToFileURL --- tests/commands/api/generate.test.ts | 4 ++-- tests/commands/channels/editor.test.ts | 4 ++-- tests/commands/channels/parse.test.ts | 4 ++-- tests/commands/epg/grab.test.ts | 3 ++- tests/commands/sites/update.test.ts | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts index b1fbb67d..f37d16a0 100644 --- a/tests/commands/api/generate.test.ts +++ b/tests/commands/api/generate.test.ts @@ -1,6 +1,6 @@ import { execSync } from 'child_process' import fs from 'fs-extra' -import path from 'path' +import { pathToFileURL } from 'node:url' import os from 'os' let ENV_VAR = 'SITES_DIR=tests/__data__/input/epg-grab/sites API_DIR=tests/__data__/output' @@ -26,7 +26,7 @@ describe('api:generate', () => { }) function content(filepath: string) { - return fs.readFileSync(path.resolve(filepath), { + return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }) } diff --git a/tests/commands/channels/editor.test.ts b/tests/commands/channels/editor.test.ts index b3a6a13f..3d5ab81a 100644 --- a/tests/commands/channels/editor.test.ts +++ b/tests/commands/channels/editor.test.ts @@ -1,7 +1,7 @@ import fs from 'fs-extra' import { execSync } from 'child_process' import os from 'os' -import path from 'path' +import { pathToFileURL } from 'node:url' type ExecError = { status: number @@ -46,7 +46,7 @@ describe('channels:editor', () => { }) function content(filepath: string) { - return fs.readFileSync(path.resolve(filepath), { + return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }) } diff --git a/tests/commands/channels/parse.test.ts b/tests/commands/channels/parse.test.ts index 3f52de37..24ed5a22 100644 --- a/tests/commands/channels/parse.test.ts +++ b/tests/commands/channels/parse.test.ts @@ -1,6 +1,6 @@ import { execSync } from 'child_process' import fs from 'fs-extra' -import path from 'path' +import { pathToFileURL } from 'node:url' beforeEach(() => { fs.emptyDirSync('tests/__data__/output') @@ -24,7 +24,7 @@ describe('channels:parse', () => { }) function content(filepath: string) { - return fs.readFileSync(path.resolve(filepath), { + return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }) } diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index c28257f9..4786a93a 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -1,5 +1,6 @@ import { execSync } from 'child_process' import fs from 'fs-extra' +import { pathToFileURL } from 'node:url' import path from 'path' import os from 'os' import { Zip } from '@freearhey/core' @@ -99,7 +100,7 @@ describe('epg:grab', () => { }) function content(filepath: string) { - return fs.readFileSync(path.resolve(filepath), { + return fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }) } diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index 5ce106b8..3446e28d 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -1,6 +1,6 @@ import { execSync } from 'child_process' import fs from 'fs-extra' -import path from 'path' +import { pathToFileURL } from 'node:url' import os from 'os' beforeEach(() => { @@ -35,7 +35,7 @@ it('can update SITES.md', () => { }) function content(filepath: string) { - const data = fs.readFileSync(path.resolve(filepath), { + const data = fs.readFileSync(pathToFileURL(filepath), { encoding: 'utf8' }) From ded5e881bb43524ce12c59d816e53004c1983b9f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:21:30 +0300 Subject: [PATCH 55/64] Fix sites:update test on Windows --- .sites/template.md | 8 ++++---- scripts/core/htmlTable.ts | 12 ++++++------ tests/__data__/expected/_sites.md | 26 ++++++++++++------------- tests/__data__/input/.sites/template.md | 8 ++++---- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/.sites/template.md b/.sites/template.md index aa2746bf..0f16f542 100644 --- a/.sites/template.md +++ b/.sites/template.md @@ -1,4 +1,4 @@ -# Sites - - -#include "./.sites/_table.md" +# Sites + + +#include "./.sites/_table.md" diff --git a/scripts/core/htmlTable.ts b/scripts/core/htmlTable.ts index 9b4c63cf..72d6bd8d 100644 --- a/scripts/core/htmlTable.ts +++ b/scripts/core/htmlTable.ts @@ -16,15 +16,15 @@ export class HTMLTable { } toString() { - let output = '\n' + let output = '
                                              \r\n' - output += ' \n ' + output += ' \r\n ' for (const column of this.columns) { output += `` } - output += '\n \n' + output += '\r\n \r\n' - output += ' \n' + output += ' \r\n' for (const item of this.data) { output += ' ' let i = 0 @@ -35,9 +35,9 @@ export class HTMLTable { output += `${item[prop]}` i++ } - output += '\n' + output += '\r\n' } - output += ' \n' + output += ' \r\n' output += '
                                              ${column.name}
                                              ' diff --git a/tests/__data__/expected/_sites.md b/tests/__data__/expected/_sites.md index efdb8b33..bd63aa62 100644 --- a/tests/__data__/expected/_sites.md +++ b/tests/__data__/expected/_sites.md @@ -1,13 +1,13 @@ -# Sites - - - - - - - - - - - -
                                              SiteStatusNotes
                                              iltalehti.fi🟡https://github.com/iptv-org/epg/issues/2396
                                              indihometv.com🟢
                                              kan.org.il🔴https://github.com/iptv-org/epg/issues/2273
                                              +# Sites + + + + + + + + + + + +
                                              SiteStatusNotes
                                              iltalehti.fi🟡https://github.com/iptv-org/epg/issues/2396
                                              indihometv.com🟢
                                              kan.org.il🔴https://github.com/iptv-org/epg/issues/2273
                                              diff --git a/tests/__data__/input/.sites/template.md b/tests/__data__/input/.sites/template.md index b91bd031..c630b91b 100644 --- a/tests/__data__/input/.sites/template.md +++ b/tests/__data__/input/.sites/template.md @@ -1,4 +1,4 @@ -# Sites - - -#include "tests/__data__/output/.sites/_table.md" +# Sites + + +#include "tests/__data__/output/.sites/_table.md" From 7171e11d215261b4935ec43c3405f886326997d8 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:22:29 +0300 Subject: [PATCH 56/64] Delete .sites/_table.md from repo --- .sites/.gitignore | 1 + .sites/_table.md | 207 ---------------------------------------------- 2 files changed, 1 insertion(+), 207 deletions(-) create mode 100644 .sites/.gitignore delete mode 100644 .sites/_table.md diff --git a/.sites/.gitignore b/.sites/.gitignore new file mode 100644 index 00000000..3eab715b --- /dev/null +++ b/.sites/.gitignore @@ -0,0 +1 @@ +_table.md \ No newline at end of file diff --git a/.sites/_table.md b/.sites/_table.md deleted file mode 100644 index 9eac21dc..00000000 --- a/.sites/_table.md +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                              SiteStatusNotes
                                              9tv.co.il🟢
                                              abc.net.au🟢
                                              allente.dk🟢
                                              allente.fi🟢
                                              allente.no🟢
                                              allente.se🟢
                                              andorradifusio.ad🟢
                                              anteltv.com.uy🟢
                                              arianaafgtv.com🟢
                                              arianatelevision.com🟢
                                              arirang.com🟢
                                              artonline.tv🟢
                                              awilime.com🟢
                                              bein.com🟢
                                              beinsports.com🟢
                                              berrymedia.co.kr🟢
                                              cablego.com.pe🟢
                                              cableplus.com.uy🟢
                                              canalplus-haiti.com🔴https://github.com/iptv-org/epg/issues/2237
                                              canalplus.com🟢
                                              cgates.lt🟢
                                              chada.ma🟢
                                              chaines-tv.orange.fr🟡https://github.com/iptv-org/epg/issues/2395
                                              clickthecity.com🟢
                                              comteco.com.bo🔴https://github.com/iptv-org/epg/issues/2239
                                              content.astro.com.my🟢
                                              cosmote.gr🟢
                                              cubmu.com🟢
                                              dens.tv🟢
                                              digiturk.com.tr🔴https://github.com/iptv-org/epg/issues/2304, https://github.com/iptv-org/epg/issues/2547
                                              directv.com🔴https://github.com/iptv-org/epg/issues/2284
                                              directv.com.ar🔴https://github.com/iptv-org/epg/issues/2339
                                              directv.com.uy🟢
                                              dishtv.in🔴https://github.com/iptv-org/epg/issues/2445
                                              dsmart.com.tr🟢
                                              dstv.com🟢
                                              elcinema.com🔴https://github.com/iptv-org/epg/issues/2541
                                              ena.skylifetv.co.kr🟢
                                              energeek.cl🟢
                                              entertainment.ie🟢
                                              firstmedia.com🟢
                                              flixed.io🟢
                                              foxsports.com.au🟢
                                              foxtel.com.au🟢
                                              frikanalen.no🟢
                                              gatotv.com🟢
                                              getafteritmedia.com🟢
                                              guida.tv🟢
                                              guidatv.sky.it🟢
                                              hd-plus.de🔴https://github.com/iptv-org/epg/issues/2173
                                              horizon.tv🟢
                                              hoy.tv🟢
                                              i.mjh.nz🟢
                                              i24news.tv🟢
                                              iltalehti.fi🟡https://github.com/iptv-org/epg/issues/2396
                                              indihometv.com🟢
                                              ionplustv.com🟢
                                              ipko.tv🟢
                                              kan.org.il🔴https://github.com/iptv-org/epg/issues/2273
                                              knr.gl🟢
                                              kplus.vn🔴https://github.com/iptv-org/epg/issues/2240
                                              kvf.fo🟢
                                              m.tv.sms.cz🔴https://github.com/iptv-org/epg/issues/2241
                                              m.tving.com🟢
                                              magticom.ge🟢
                                              mako.co.il🟢
                                              maxtv.hrvatskitelekom.hr🔴https://github.com/iptv-org/epg/issues/2509
                                              maxtvgo.mk🟢
                                              mediagenie.co.kr🟢
                                              mediaklikk.hu🟢
                                              mediasetinfinity.mediaset.it🟢
                                              melita.com🟢
                                              meo.pt🟡https://github.com/iptv-org/epg/issues/2446
                                              meuguia.tv🟢
                                              mewatch.sg🟢
                                              mi.tv🟢
                                              mncvision.id🟢
                                              moji.id🟢
                                              mon-programme-tv.be🟢
                                              movistarplus.es🔴https://github.com/iptv-org/epg/issues/2498
                                              mtel.ba🟢
                                              mts.rs🟢
                                              mujtvprogram.cz🟢
                                              musor.tv🟢
                                              mysky.com.ph🟢
                                              mytelly.co.uk🟢
                                              mytvsuper.com🟢
                                              neo.io🟢
                                              nhkworldpremium.com🟢
                                              nhl.com🟢
                                              nostv.pt🟢
                                              novacyprus.com🟢
                                              novasports.gr🟢
                                              nowplayer.now.com🟢
                                              nuevosiglo.com.uy🟢
                                              nzxmltv.com🟢
                                              ontvtonight.com🟢
                                              osn.com🟢
                                              pbsguam.org🟢
                                              pickx.be🟢
                                              player.ee.co.uk🟢
                                              playtv.unifi.com.my🟢
                                              plex.tv🟢
                                              programacion-tv.elpais.com🟢
                                              programacion.tcc.com.uy🟢
                                              programetv.ro🟢
                                              programme-tv.net🟢
                                              programme-tv.vini.pf🟢
                                              programme.tvb.com🟢
                                              programtv.onet.pl🟢
                                              raiplay.it🟢
                                              reportv.com.ar🟢
                                              rev.bs🔴https://github.com/iptv-org/epg/issues/2255
                                              rotana.net🟢
                                              rtb.gov.bn🔴https://github.com/iptv-org/epg/issues/2257
                                              rthk.hk🟢
                                              rtmklik.rtm.gov.my🟢
                                              rtp.pt🟢
                                              ruv.is🟢
                                              s.mxtv.jp🟢
                                              sat.tv🟢
                                              shahid.mbc.net🟢
                                              siba.com.co🟢
                                              singtel.com🟢
                                              sjonvarp.is🟢
                                              sky.co.nz🟢
                                              sky.com🟡https://github.com/iptv-org/epg/issues/2516, https://github.com/iptv-org/epg/issues/2501
                                              sky.de🟢
                                              skylife.co.kr🟢
                                              skyperfectv.co.jp🟢
                                              snrt.ma🟢
                                              sporttv.pt🟢
                                              starhubtvplus.com🟢
                                              startimestv.com🟢
                                              streamingtvguides.com🟢
                                              superguidatv.it🟢
                                              taiwanplus.com🟢
                                              tapdmv.com🟢
                                              telenet.tv🟢
                                              teliatv.ee🟢
                                              telkussa.fi🟢
                                              telsu.fi🟢
                                              tivu.tv🟢
                                              toonamiaftermath.com🟢
                                              turksatkablo.com.tr🟢
                                              tv-programme.telecablesat.fr🟢
                                              tv.blue.ch🟢
                                              tv.cctv.com🟢
                                              tv.dir.bg🟢
                                              tv.lv🟢
                                              tv.magenta.at🟢
                                              tv.mail.ru🟢
                                              tv.movistar.com.pe🟢
                                              tv.nu🟢
                                              tv.post.lu🟢
                                              tv.trueid.net🟢
                                              tv.yandex.ru🟢
                                              tv.yettel.hu🔴https://github.com/iptv-org/epg/issues/2263
                                              tv24.co.uk🟢
                                              tv24.se🟢
                                              tv2go.t-2.net🟢
                                              tva.tv🔴https://github.com/iptv-org/epg/issues/2264
                                              tvarenasport.com🟢
                                              tvarenasport.hr🟢
                                              tvcesoir.fr🟢
                                              tvcubana.icrt.cu🟢
                                              tvgids.nl🟡https://github.com/iptv-org/epg/issues/2400
                                              tvguide.com🔴https://github.com/iptv-org/epg/issues/2542
                                              tvguide.myjcom.jp🟢
                                              tvhebdo.com🟢
                                              tvheute.at🟢
                                              tvim.tv🟢
                                              tvireland.ie🟢
                                              tvmi.mt🟢
                                              tvmusor.hu🟢
                                              tvpassport.com🟡https://github.com/iptv-org/epg/issues/2272
                                              tvplus.com.tr🟢
                                              tvprofil.com🟡https://github.com/iptv-org/epg/issues/2399
                                              tvtv.us🟡https://github.com/iptv-org/epg/issues/2176
                                              v3.myafn.dodmedia.osd.mil🟢
                                              vidio.com🟢
                                              virginmediatelevision.ie🟢
                                              virgintvgo.virginmedia.com🟢
                                              visionplus.id🟢
                                              vivacom.bg🔴https://github.com/iptv-org/epg/issues/2270
                                              vtm.be🟢
                                              walesi.com.fj🟢
                                              watch.sportsnet.ca🟢
                                              watchyour.tv🟢
                                              wavve.com🟢
                                              web.magentatv.de🟢
                                              webtv.delta.nl🟢
                                              winplay.co🟢
                                              worldfishingnetwork.com🟢
                                              www3.nhk.or.jp🟢
                                              xumo.tv🟢
                                              zap.co.ao🟢
                                              ziggogo.tv🟢
                                              znbc.co.zm🟢
                                              zuragt.mn🟢
                                              \ No newline at end of file From 0b8782a9ebeb612eb48328e3e9075767637b3ab1 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 6 Jan 2025 10:31:33 +0300 Subject: [PATCH 57/64] Update grab.test.ts --- tests/commands/epg/grab.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index 4786a93a..d7d586e2 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -18,9 +18,9 @@ beforeEach(() => { describe('epg:grab', () => { it('can grab epg by site name', () => { - const cmd = `${ENV_VAR} npm run grab --- --site=example.com --output=${path.resolve( + const cmd = `${ENV_VAR} npm run grab --- --site=example.com --output="${path.resolve( 'tests/__data__/output/guide.xml' - )}` + )}"` const stdout = execSync(cmd, { encoding: 'utf8' }) if (process.env.DEBUG === 'true') console.log(stdout) @@ -40,9 +40,9 @@ describe('epg:grab', () => { }) it('can grab epg with gzip option enabled', async () => { - const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=${path.resolve( + const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output="${path.resolve( 'tests/__data__/output/guide.xml' - )} --gzip` + )}" --gzip` const stdout = execSync(cmd, { encoding: 'utf8' }) if (process.env.DEBUG === 'true') console.log(stdout) From bb9248df1de3efd3f66ea7cfe58bc32941668b4b Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Mon, 6 Jan 2025 21:14:55 +0300 Subject: [PATCH 58/64] Update grab.test.ts --- tests/commands/epg/grab.test.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index d7d586e2..1fdcf80f 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -22,7 +22,7 @@ describe('epg:grab', () => { 'tests/__data__/output/guide.xml' )}"` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide2.xml') @@ -32,7 +32,7 @@ describe('epg:grab', () => { it('can grab epg with multiple channels.xml files', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/**/*.channels.xml --output=tests/__data__/output/guide.xml` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide.xml') @@ -44,7 +44,7 @@ describe('epg:grab', () => { 'tests/__data__/output/guide.xml' )}" --gzip` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide.xml') @@ -59,7 +59,7 @@ describe('epg:grab', () => { it('can grab epg with wildcard as output', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guides/en/example.com.xml')).toEqual( content('tests/__data__/expected/guides/en/example.com.xml') @@ -73,7 +73,7 @@ describe('epg:grab', () => { it('can grab epg then language filter enabled', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml --lang=fr` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guides/fr/example.com.xml')).toEqual( content('tests/__data__/expected/guides/fr/example.com.xml') @@ -83,7 +83,7 @@ describe('epg:grab', () => { it('can grab epg using custom channels list', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guide.xml')).toEqual( content('tests/__data__/expected/guide.xml') @@ -93,7 +93,7 @@ describe('epg:grab', () => { it('it will raise an error if the timeout is exceeded', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/custom.channels.xml --output=tests/__data__/output/guide.xml --timeout=0` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(stdout).toContain('ERR: Connection timeout') }) From cfb53d754f23eacc2b8c05d50eb6648f488909ca Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 7 Jan 2025 12:50:28 +0300 Subject: [PATCH 59/64] Install jest-offline --- package-lock.json | 375 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 + yarn.lock | 55 +++++++ 3 files changed, 434 insertions(+) diff --git a/package-lock.json b/package-lock.json index 1b783e3b..447efdc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,6 +47,7 @@ "iconv-lite": "^0.4.24", "inquirer": "^8.2.6", "jest": "^29.7.0", + "jest-offline": "^1.0.1", "langs": "^2.0.0", "libxmljs2": "^0.35.0", "lodash": "^4.17.21", @@ -2087,6 +2088,222 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@swc/core": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.4.tgz", + "integrity": "sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==", + "hasInstallScript": true, + "optional": true, + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.17" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.10.4", + "@swc/core-darwin-x64": "1.10.4", + "@swc/core-linux-arm-gnueabihf": "1.10.4", + "@swc/core-linux-arm64-gnu": "1.10.4", + "@swc/core-linux-arm64-musl": "1.10.4", + "@swc/core-linux-x64-gnu": "1.10.4", + "@swc/core-linux-x64-musl": "1.10.4", + "@swc/core-win32-arm64-msvc": "1.10.4", + "@swc/core-win32-ia32-msvc": "1.10.4", + "@swc/core-win32-x64-msvc": "1.10.4" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.4.tgz", + "integrity": "sha512-sV/eurLhkjn/197y48bxKP19oqcLydSel42Qsy2zepBltqUx+/zZ8+/IS0Bi7kaWVFxerbW1IPB09uq8Zuvm3g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.4.tgz", + "integrity": "sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.4.tgz", + "integrity": "sha512-zd7fXH5w8s+Sfvn2oO464KDWl+ZX1MJiVmE4Pdk46N3PEaNwE0koTfgx2vQRqRG4vBBobzVvzICC3618WcefOA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.4.tgz", + "integrity": "sha512-+UGfoHDxsMZgFD3tABKLeEZHqLNOkxStu+qCG7atGBhS4Slri6h6zijVvf4yI5X3kbXdvc44XV/hrP/Klnui2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.4.tgz", + "integrity": "sha512-cDDj2/uYsOH0pgAnDkovLZvKJpFmBMyXkxEG6Q4yw99HbzO6QzZ5HDGWGWVq/6dLgYKlnnmpjZCPPQIu01mXEg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.4.tgz", + "integrity": "sha512-qJXh9D6Kf5xSdGWPINpLGixAbB5JX8JcbEJpRamhlDBoOcQC79dYfOMEIxWPhTS1DGLyFakAx2FX/b2VmQmj0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.4.tgz", + "integrity": "sha512-A76lIAeyQnHCVt0RL/pG+0er8Qk9+acGJqSZOZm67Ve3B0oqMd871kPtaHBM0BW3OZAhoILgfHW3Op9Q3mx3Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.4.tgz", + "integrity": "sha512-e6j5kBu4fIY7fFxFxnZI0MlEovRvp50Lg59Fw+DVbtqHk3C85dckcy5xKP+UoXeuEmFceauQDczUcGs19SRGSQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.4.tgz", + "integrity": "sha512-RSYHfdKgNXV/amY5Tqk1EWVsyQnhlsM//jeqMLw5Fy9rfxP592W9UTumNikNRPdjI8wKKzNMXDb1U29tQjN0dg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.4.tgz", + "integrity": "sha512-1ujYpaqfqNPYdwKBlvJnOqcl+Syn3UrQ4XE0Txz6zMYgyh6cdU6a3pxqLqIUSJ12MtXRA9ZUhEz1ekU3LfLWXw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "optional": true, + "peer": true + }, + "node_modules/@swc/types": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", + "optional": true, + "peer": true, + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -5823,6 +6040,14 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-offline": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jest-offline/-/jest-offline-1.0.1.tgz", + "integrity": "sha512-pcYJ8rVxWP3SS9de15iSQY87ErLGGgMC4qtVcRLb/qemrefI1IgnAzOusp0eemGu7JoAGlb4oBGnZorehu95KA==", + "dependencies": { + "mitm": "^1.3.2" + } + }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", @@ -6672,6 +6897,25 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, + "node_modules/mitm": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mitm/-/mitm-1.7.3.tgz", + "integrity": "sha512-linie/mGisDH73C7aiW6JmstA5XskXd15JBJAEeNQBdH3/L0dJdE/yZ+rw/y2zT7Fcib5KAnL5OvxYOOFQbsgw==", + "dependencies": { + "semver": ">= 5 < 6" + }, + "engines": { + "node": ">= 0.10.24" + } + }, + "node_modules/mitm/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -10529,6 +10773,114 @@ "@sinonjs/commons": "^3.0.0" } }, + "@swc/core": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.4.tgz", + "integrity": "sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==", + "optional": true, + "peer": true, + "requires": { + "@swc/core-darwin-arm64": "1.10.4", + "@swc/core-darwin-x64": "1.10.4", + "@swc/core-linux-arm-gnueabihf": "1.10.4", + "@swc/core-linux-arm64-gnu": "1.10.4", + "@swc/core-linux-arm64-musl": "1.10.4", + "@swc/core-linux-x64-gnu": "1.10.4", + "@swc/core-linux-x64-musl": "1.10.4", + "@swc/core-win32-arm64-msvc": "1.10.4", + "@swc/core-win32-ia32-msvc": "1.10.4", + "@swc/core-win32-x64-msvc": "1.10.4", + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.17" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.4.tgz", + "integrity": "sha512-sV/eurLhkjn/197y48bxKP19oqcLydSel42Qsy2zepBltqUx+/zZ8+/IS0Bi7kaWVFxerbW1IPB09uq8Zuvm3g==", + "optional": true, + "peer": true + }, + "@swc/core-darwin-x64": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.4.tgz", + "integrity": "sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w==", + "optional": true, + "peer": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.4.tgz", + "integrity": "sha512-zd7fXH5w8s+Sfvn2oO464KDWl+ZX1MJiVmE4Pdk46N3PEaNwE0koTfgx2vQRqRG4vBBobzVvzICC3618WcefOA==", + "optional": true, + "peer": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.4.tgz", + "integrity": "sha512-+UGfoHDxsMZgFD3tABKLeEZHqLNOkxStu+qCG7atGBhS4Slri6h6zijVvf4yI5X3kbXdvc44XV/hrP/Klnui2A==", + "optional": true, + "peer": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.4.tgz", + "integrity": "sha512-cDDj2/uYsOH0pgAnDkovLZvKJpFmBMyXkxEG6Q4yw99HbzO6QzZ5HDGWGWVq/6dLgYKlnnmpjZCPPQIu01mXEg==", + "optional": true, + "peer": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.4.tgz", + "integrity": "sha512-qJXh9D6Kf5xSdGWPINpLGixAbB5JX8JcbEJpRamhlDBoOcQC79dYfOMEIxWPhTS1DGLyFakAx2FX/b2VmQmj0g==", + "optional": true, + "peer": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.4.tgz", + "integrity": "sha512-A76lIAeyQnHCVt0RL/pG+0er8Qk9+acGJqSZOZm67Ve3B0oqMd871kPtaHBM0BW3OZAhoILgfHW3Op9Q3mx3Cw==", + "optional": true, + "peer": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.4.tgz", + "integrity": "sha512-e6j5kBu4fIY7fFxFxnZI0MlEovRvp50Lg59Fw+DVbtqHk3C85dckcy5xKP+UoXeuEmFceauQDczUcGs19SRGSQ==", + "optional": true, + "peer": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.4.tgz", + "integrity": "sha512-RSYHfdKgNXV/amY5Tqk1EWVsyQnhlsM//jeqMLw5Fy9rfxP592W9UTumNikNRPdjI8wKKzNMXDb1U29tQjN0dg==", + "optional": true, + "peer": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.4.tgz", + "integrity": "sha512-1ujYpaqfqNPYdwKBlvJnOqcl+Syn3UrQ4XE0Txz6zMYgyh6cdU6a3pxqLqIUSJ12MtXRA9ZUhEz1ekU3LfLWXw==", + "optional": true, + "peer": true + }, + "@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "optional": true, + "peer": true + }, + "@swc/types": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", + "optional": true, + "peer": true, + "requires": { + "@swc/counter": "^0.1.3" + } + }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -13195,6 +13547,14 @@ "jest-util": "^29.7.0" } }, + "jest-offline": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/jest-offline/-/jest-offline-1.0.1.tgz", + "integrity": "sha512-pcYJ8rVxWP3SS9de15iSQY87ErLGGgMC4qtVcRLb/qemrefI1IgnAzOusp0eemGu7JoAGlb4oBGnZorehu95KA==", + "requires": { + "mitm": "^1.3.2" + } + }, "jest-pnp-resolver": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", @@ -13873,6 +14233,21 @@ } } }, + "mitm": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mitm/-/mitm-1.7.3.tgz", + "integrity": "sha512-linie/mGisDH73C7aiW6JmstA5XskXd15JBJAEeNQBdH3/L0dJdE/yZ+rw/y2zT7Fcib5KAnL5OvxYOOFQbsgw==", + "requires": { + "semver": ">= 5 < 6" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", diff --git a/package.json b/package.json index 03db1c49..99e23ada 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,9 @@ "author": "Arhey", "license": "UNLICENSED", "jest": { + "setupFiles": [ + "/node_modules/jest-offline" + ], "transform": { "^.+\\.(ts|js)$": "ts-jest" }, @@ -69,6 +72,7 @@ "iconv-lite": "^0.4.24", "inquirer": "^8.2.6", "jest": "^29.7.0", + "jest-offline": "^1.0.1", "langs": "^2.0.0", "libxmljs2": "^0.35.0", "lodash": "^4.17.21", diff --git a/yarn.lock b/yarn.lock index 9740f074..54621c7b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -887,6 +887,42 @@ dependencies: "@sinonjs/commons" "^3.0.0" +"@swc/core-darwin-x64@1.10.4": + version "1.10.4" + resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.4.tgz" + integrity sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w== + +"@swc/core@>=1.2.50": + version "1.10.4" + resolved "https://registry.npmjs.org/@swc/core/-/core-1.10.4.tgz" + integrity sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg== + dependencies: + "@swc/counter" "^0.1.3" + "@swc/types" "^0.1.17" + optionalDependencies: + "@swc/core-darwin-arm64" "1.10.4" + "@swc/core-darwin-x64" "1.10.4" + "@swc/core-linux-arm-gnueabihf" "1.10.4" + "@swc/core-linux-arm64-gnu" "1.10.4" + "@swc/core-linux-arm64-musl" "1.10.4" + "@swc/core-linux-x64-gnu" "1.10.4" + "@swc/core-linux-x64-musl" "1.10.4" + "@swc/core-win32-arm64-msvc" "1.10.4" + "@swc/core-win32-ia32-msvc" "1.10.4" + "@swc/core-win32-x64-msvc" "1.10.4" + +"@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/types@^0.1.17": + version "0.1.17" + resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz" + integrity sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ== + dependencies: + "@swc/counter" "^0.1.3" + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" @@ -3306,6 +3342,13 @@ jest-mock@^29.7.0: "@types/node" "*" jest-util "^29.7.0" +jest-offline@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/jest-offline/-/jest-offline-1.0.1.tgz" + integrity sha512-pcYJ8rVxWP3SS9de15iSQY87ErLGGgMC4qtVcRLb/qemrefI1IgnAzOusp0eemGu7JoAGlb4oBGnZorehu95KA== + dependencies: + mitm "^1.3.2" + jest-pnp-resolver@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" @@ -3917,6 +3960,13 @@ minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" +mitm@^1.3.2: + version "1.7.3" + resolved "https://registry.npmjs.org/mitm/-/mitm-1.7.3.tgz" + integrity sha512-linie/mGisDH73C7aiW6JmstA5XskXd15JBJAEeNQBdH3/L0dJdE/yZ+rw/y2zT7Fcib5KAnL5OvxYOOFQbsgw== + dependencies: + semver ">= 5 < 6" + mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" @@ -4625,6 +4675,11 @@ semver@^7.6.0: resolved "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +"semver@>= 5 < 6": + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + serve-handler@6.1.6: version "6.1.6" resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz" From e1ffd61618875e133b730bceb2d36790c7af0663 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 7 Jan 2025 12:56:44 +0300 Subject: [PATCH 60/64] Replace ts-jest with @swc/jest --- package-lock.json | 274 +++++++++++++--------------------------------- package.json | 5 +- yarn.lock | 72 ++++++------ 3 files changed, 109 insertions(+), 242 deletions(-) diff --git a/package-lock.json b/package-lock.json index 447efdc1..65f7f2ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,8 @@ "@ntlab/sfetch": "^1.0.0", "@octokit/plugin-paginate-rest": "^11.3.6", "@octokit/plugin-rest-endpoint-methods": "^13.2.6", + "@swc/core": "^1.10.4", + "@swc/jest": "^0.2.37", "@types/cli-progress": "^3.11.3", "@types/fs-extra": "^11.0.2", "@types/inquirer": "^9.0.3", @@ -68,7 +70,6 @@ "tabletojson": "^2.0.7", "tough-cookie": "^5.0.0", "transliteration": "^2.2.0", - "ts-jest": "^29.1.1", "tsx": "^4.19.2", "unzipit": "^1.4.0", "wildcard-match": "^5.1.2" @@ -1524,6 +1525,17 @@ } } }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -2093,8 +2105,6 @@ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.4.tgz", "integrity": "sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==", "hasInstallScript": true, - "optional": true, - "peer": true, "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.17" @@ -2138,7 +2148,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=10" } @@ -2154,7 +2163,6 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=10" } @@ -2170,7 +2178,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } @@ -2186,7 +2193,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } @@ -2202,7 +2208,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } @@ -2218,7 +2223,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } @@ -2234,7 +2238,6 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=10" } @@ -2250,7 +2253,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=10" } @@ -2266,7 +2268,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=10" } @@ -2282,7 +2283,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=10" } @@ -2290,16 +2290,28 @@ "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "optional": true, - "peer": true + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, + "node_modules/@swc/jest": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.37.tgz", + "integrity": "sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==", + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@swc/counter": "^0.1.3", + "jsonc-parser": "^3.2.0" + }, + "engines": { + "npm": ">= 7.0.0" + }, + "peerDependencies": { + "@swc/core": "*" + } }, "node_modules/@swc/types": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", - "optional": true, - "peer": true, "dependencies": { "@swc/counter": "^0.1.3" } @@ -3312,17 +3324,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -6384,6 +6385,11 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -6535,11 +6541,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "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", @@ -6610,7 +6611,9 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true }, "node_modules/make-fetch-happen": { "version": "13.0.1", @@ -8793,86 +8796,6 @@ "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", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/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==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "engines": { - "node": ">=12" - } - }, "node_modules/ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", @@ -10329,6 +10252,14 @@ "strip-ansi": "^6.0.0" } }, + "@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "requires": { + "@jest/types": "^29.6.3" + } + }, "@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -10777,8 +10708,6 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.4.tgz", "integrity": "sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg==", - "optional": true, - "peer": true, "requires": { "@swc/core-darwin-arm64": "1.10.4", "@swc/core-darwin-x64": "1.10.4", @@ -10798,85 +10727,81 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.4.tgz", "integrity": "sha512-sV/eurLhkjn/197y48bxKP19oqcLydSel42Qsy2zepBltqUx+/zZ8+/IS0Bi7kaWVFxerbW1IPB09uq8Zuvm3g==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-darwin-x64": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.4.tgz", "integrity": "sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-arm-gnueabihf": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.4.tgz", "integrity": "sha512-zd7fXH5w8s+Sfvn2oO464KDWl+ZX1MJiVmE4Pdk46N3PEaNwE0koTfgx2vQRqRG4vBBobzVvzICC3618WcefOA==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-arm64-gnu": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.4.tgz", "integrity": "sha512-+UGfoHDxsMZgFD3tABKLeEZHqLNOkxStu+qCG7atGBhS4Slri6h6zijVvf4yI5X3kbXdvc44XV/hrP/Klnui2A==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-arm64-musl": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.4.tgz", "integrity": "sha512-cDDj2/uYsOH0pgAnDkovLZvKJpFmBMyXkxEG6Q4yw99HbzO6QzZ5HDGWGWVq/6dLgYKlnnmpjZCPPQIu01mXEg==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-x64-gnu": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.4.tgz", "integrity": "sha512-qJXh9D6Kf5xSdGWPINpLGixAbB5JX8JcbEJpRamhlDBoOcQC79dYfOMEIxWPhTS1DGLyFakAx2FX/b2VmQmj0g==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-linux-x64-musl": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.4.tgz", "integrity": "sha512-A76lIAeyQnHCVt0RL/pG+0er8Qk9+acGJqSZOZm67Ve3B0oqMd871kPtaHBM0BW3OZAhoILgfHW3Op9Q3mx3Cw==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-win32-arm64-msvc": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.4.tgz", "integrity": "sha512-e6j5kBu4fIY7fFxFxnZI0MlEovRvp50Lg59Fw+DVbtqHk3C85dckcy5xKP+UoXeuEmFceauQDczUcGs19SRGSQ==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-win32-ia32-msvc": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.4.tgz", "integrity": "sha512-RSYHfdKgNXV/amY5Tqk1EWVsyQnhlsM//jeqMLw5Fy9rfxP592W9UTumNikNRPdjI8wKKzNMXDb1U29tQjN0dg==", - "optional": true, - "peer": true + "optional": true }, "@swc/core-win32-x64-msvc": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.4.tgz", "integrity": "sha512-1ujYpaqfqNPYdwKBlvJnOqcl+Syn3UrQ4XE0Txz6zMYgyh6cdU6a3pxqLqIUSJ12MtXRA9ZUhEz1ekU3LfLWXw==", - "optional": true, - "peer": true + "optional": true }, "@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "optional": true, - "peer": true + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, + "@swc/jest": { + "version": "0.2.37", + "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.37.tgz", + "integrity": "sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ==", + "requires": { + "@jest/create-cache-key-function": "^29.7.0", + "@swc/counter": "^0.1.3", + "jsonc-parser": "^3.2.0" + } }, "@swc/types": { "version": "0.1.17", "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", - "optional": true, - "peer": true, "requires": { "@swc/counter": "^0.1.3" } @@ -11611,14 +11536,6 @@ "update-browserslist-db": "^1.0.11" } }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "requires": { - "fast-json-stable-stringify": "2.x" - } - }, "bser": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", @@ -13821,6 +13738,11 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" }, + "jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" + }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -13944,11 +13866,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.memoize": { - "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": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -14003,7 +13920,9 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "optional": true, + "peer": true }, "make-fetch-happen": { "version": "13.0.1", @@ -15603,49 +15522,6 @@ "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "requires": {} }, - "ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "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==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - } - }, "ts-node": { "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", diff --git a/package.json b/package.json index 99e23ada..f1243424 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "/node_modules/jest-offline" ], "transform": { - "^.+\\.(ts|js)$": "ts-jest" + "^.+\\.(ts|js)$": "@swc/jest" }, "testRegex": "(tests|sites)/(.*?/)?.*test.(js|ts)$", "testTimeout": 10000 @@ -41,6 +41,8 @@ "@ntlab/sfetch": "^1.0.0", "@octokit/plugin-paginate-rest": "^11.3.6", "@octokit/plugin-rest-endpoint-methods": "^13.2.6", + "@swc/core": "^1.10.4", + "@swc/jest": "^0.2.37", "@types/cli-progress": "^3.11.3", "@types/fs-extra": "^11.0.2", "@types/inquirer": "^9.0.3", @@ -93,7 +95,6 @@ "tabletojson": "^2.0.7", "tough-cookie": "^5.0.0", "transliteration": "^2.2.0", - "ts-jest": "^29.1.1", "tsx": "^4.19.2", "unzipit": "^1.4.0", "wildcard-match": "^5.1.2" diff --git a/yarn.lock b/yarn.lock index 54621c7b..81ca202d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,7 +33,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz" integrity sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.8.0": version "7.22.8" resolved "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz" integrity sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw== @@ -523,6 +523,13 @@ slash "^3.0.0" strip-ansi "^6.0.0" +"@jest/create-cache-key-function@^29.7.0": + version "29.7.0" + resolved "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz" + integrity sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA== + dependencies: + "@jest/types" "^29.6.3" + "@jest/environment@^29.7.0": version "29.7.0" resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" @@ -657,7 +664,7 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.0.0", "@jest/types@^29.6.3": +"@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== @@ -892,7 +899,7 @@ resolved "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.10.4.tgz" integrity sha512-gjYNU6vrAUO4+FuovEo9ofnVosTFXkF0VDuo1MKPItz6e2pxc2ale4FGzLw0Nf7JB1sX4a8h06CN16/pLJ8Q2w== -"@swc/core@>=1.2.50": +"@swc/core@*", "@swc/core@^1.10.4", "@swc/core@>=1.2.50": version "1.10.4" resolved "https://registry.npmjs.org/@swc/core/-/core-1.10.4.tgz" integrity sha512-ut3zfiTLORMxhr6y/GBxkHmzcGuVpwJYX4qyXWuBKkpw/0g0S5iO1/wW7RnLnZbAi8wS/n0atRZoaZlXWBkeJg== @@ -916,6 +923,15 @@ resolved "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz" integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== +"@swc/jest@^0.2.37": + version "0.2.37" + resolved "https://registry.npmjs.org/@swc/jest/-/jest-0.2.37.tgz" + integrity sha512-CR2BHhmXKGxTiFr21DYPRHQunLkX3mNIFGFkxBGji6r9uyIR5zftTOVYj1e0sFNMV2H7mf/+vpaglqaryBtqfQ== + dependencies: + "@jest/create-cache-key-function" "^29.7.0" + "@swc/counter" "^0.1.3" + jsonc-parser "^3.2.0" + "@swc/types@^0.1.17": version "0.1.17" resolved "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz" @@ -1414,7 +1430,7 @@ axios@^1.5.1, axios@^1.6.1, axios@^1.7.9, "axios@>= 0.9.0", axios@>=0.20.0: form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-jest@^29.0.0, babel-jest@^29.7.0: +babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== @@ -1556,13 +1572,6 @@ browserslist@^4.21.9, "browserslist@>= 4.21.0": node-releases "^2.0.12" update-browserslist-db "^1.0.11" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" @@ -2485,7 +2494,7 @@ fast-glob@^3.3.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: +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: 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== @@ -3463,7 +3472,7 @@ jest-snapshot@^29.7.0: pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.0.0, jest-util@^29.7.0: +jest-util@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -3511,7 +3520,7 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.0.0, jest@^29.7.0: +jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== @@ -3581,11 +3590,16 @@ json-stable-stringify-without-jsonify@^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.2.2, json5@^2.2.3: +json5@^2.2.2: version "2.2.3" resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonc-parser@^3.2.0: + version "3.3.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" @@ -3691,11 +3705,6 @@ locate-path@^6.0.0: 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" @@ -3771,7 +3780,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@^1.1.1, make-error@1.x: +make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -5087,20 +5096,6 @@ ts-api-utils@^1.3.0: resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz" integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== -ts-jest@^29.1.1: - version "29.1.1" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" - integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - ts-node@>=9.0.0: version "10.9.1" resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" @@ -5164,7 +5159,7 @@ type-fest@^2.13.0: resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== -typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.3 <6", "typescript@>=4.8.4 <5.8.0": +typescript@>=2.7, typescript@>=4.2.0, "typescript@>=4.8.4 <5.8.0": version "5.2.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== @@ -5402,11 +5397,6 @@ yargs-parser@^20.2.2: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" From 3c858ecca9c47589fc7f5ed689de97efbf46fcd0 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:24:50 +0300 Subject: [PATCH 61/64] Minor changes to the tests --- tests/commands/api/generate.test.ts | 2 +- tests/commands/channels/editor.test.ts | 13 +++++++------ tests/commands/channels/lint.test.ts | 6 +++--- tests/commands/channels/parse.test.ts | 2 +- tests/commands/channels/validate.test.ts | 4 ++-- tests/commands/sites/update.test.ts | 18 ++++++++++-------- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/tests/commands/api/generate.test.ts b/tests/commands/api/generate.test.ts index f37d16a0..1480ac59 100644 --- a/tests/commands/api/generate.test.ts +++ b/tests/commands/api/generate.test.ts @@ -17,7 +17,7 @@ describe('api:generate', () => { it('can generate guides.json', () => { const cmd = `${ENV_VAR} npm run api:generate` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/guides.json')).toEqual( content('tests/__data__/expected/guides.json') diff --git a/tests/commands/channels/editor.test.ts b/tests/commands/channels/editor.test.ts index 3d5ab81a..0c001df5 100644 --- a/tests/commands/channels/editor.test.ts +++ b/tests/commands/channels/editor.test.ts @@ -8,6 +8,11 @@ type ExecError = { stdout: string } +let ENV_VAR = 'DATA_DIR=tests/__data__/input/temp/data' +if (os.platform() === 'win32') { + ENV_VAR = 'SET "DATA_DIR=tests/__data__/input/temp/data" &&' +} + beforeEach(() => { fs.emptyDirSync('tests/__data__/output') fs.copySync( @@ -18,16 +23,12 @@ beforeEach(() => { describe('channels:editor', () => { it('shows list of options for a channel', () => { - let ENV_VAR = 'DATA_DIR=tests/__data__/input/temp/data' - if (os.platform() === 'win32') { - ENV_VAR = 'SET "DATA_DIR=tests/__data__/input/temp/data" &&' - } - try { const cmd = `${ENV_VAR} npm run channels:editor --- tests/__data__/output/channels.xml` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) } catch (error) { + if (process.env.DEBUG === 'true') console.log(cmd, error) expect((error as ExecError).status).toBe(1) expect((error as ExecError).stdout).toContain('CNN International | CNNInternational.us [new]') expect((error as ExecError).stdout).toContain( diff --git a/tests/commands/channels/lint.test.ts b/tests/commands/channels/lint.test.ts index 0c2ace78..2ba65d80 100644 --- a/tests/commands/channels/lint.test.ts +++ b/tests/commands/channels/lint.test.ts @@ -10,7 +10,7 @@ describe('channels:lint', () => { try { const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/error.channels.xml' const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) @@ -25,7 +25,7 @@ describe('channels:lint', () => { const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/invalid.channels.xml' const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) @@ -40,7 +40,7 @@ describe('channels:lint', () => { const cmd = 'npm run channels:lint --- tests/__data__/input/channels-lint/error.channels.xml tests/__data__/input/channels-lint/invalid.channels.xml' const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) diff --git a/tests/commands/channels/parse.test.ts b/tests/commands/channels/parse.test.ts index 24ed5a22..6c9fa113 100644 --- a/tests/commands/channels/parse.test.ts +++ b/tests/commands/channels/parse.test.ts @@ -15,7 +15,7 @@ describe('channels:parse', () => { const cmd = 'npm run channels:parse --- --config=tests/__data__/input/channels-parse/channels-parse.config.js --output=tests/__data__/output/channels.xml' const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/channels.xml')).toEqual( content('tests/__data__/expected/sites/channels-parse/channels-parse.channels.xml') diff --git a/tests/commands/channels/validate.test.ts b/tests/commands/channels/validate.test.ts index b12cc317..d4d3b039 100644 --- a/tests/commands/channels/validate.test.ts +++ b/tests/commands/channels/validate.test.ts @@ -16,7 +16,7 @@ describe('channels:validate', () => { try { const cmd = `${ENV_VAR} npm run channels:validate --- --channels=tests/__data__/input/channels-validate/duplicate.channels.xml` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) @@ -36,7 +36,7 @@ describe('channels:validate', () => { try { const cmd = `${ENV_VAR} npm run channels:validate --- --channels=tests/__data__/input/channels-validate/wrong_xmltv_id.channels.xml` const stdout = execSync(cmd, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) process.exit(1) } catch (error) { expect((error as ExecError).status).toBe(1) diff --git a/tests/commands/sites/update.test.ts b/tests/commands/sites/update.test.ts index 3446e28d..0af18d4c 100644 --- a/tests/commands/sites/update.test.ts +++ b/tests/commands/sites/update.test.ts @@ -3,6 +3,13 @@ import fs from 'fs-extra' import { pathToFileURL } from 'node:url' import os from 'os' +let ENV_VAR = + 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites' +if (os.platform() === 'win32') { + ENV_VAR = + 'SET "DOT_SITES_DIR=tests/__data__/output/.sites" && SET "SITES_DIR=tests/__data__/input/sites-update/sites" &&' +} + beforeEach(() => { fs.emptyDirSync('tests/__data__/output') fs.mkdirSync('tests/__data__/output/.sites') @@ -17,15 +24,10 @@ beforeEach(() => { }) it('can update SITES.md', () => { - let ENV_VAR = - 'DOT_SITES_DIR=tests/__data__/output/.sites SITES_DIR=tests/__data__/input/sites-update/sites' - if (os.platform() === 'win32') { - ENV_VAR = - 'SET "DOT_SITES_DIR=tests/__data__/output/.sites" && SET "SITES_DIR=tests/__data__/input/sites-update/sites" &&' - } + const cmd = `${ENV_VAR} npm run sites:update` - const stdout = execSync(`${ENV_VAR} npm run sites:update`, { encoding: 'utf8' }) - if (process.env.DEBUG === 'true') console.log(stdout) + const stdout = execSync(cmd, { encoding: 'utf8' }) + if (process.env.DEBUG === 'true') console.log(cmd, stdout) expect(content('tests/__data__/output/sites.md')).toEqual( content('tests/__data__/expected/_sites.md') From c436e7589eae57bdd348ceb69dc8cfca4bdd7a7f Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 7 Jan 2025 19:26:31 +0300 Subject: [PATCH 62/64] Increase timeout for the test --- tests/commands/epg/grab.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/commands/epg/grab.test.ts b/tests/commands/epg/grab.test.ts index 1fdcf80f..d580f265 100644 --- a/tests/commands/epg/grab.test.ts +++ b/tests/commands/epg/grab.test.ts @@ -54,7 +54,7 @@ describe('epg:grab', () => { const expected = await zip.decompress(fs.readFileSync('tests/__data__/output/guide.xml.gz')) const result = await zip.decompress(fs.readFileSync('tests/__data__/expected/guide.xml.gz')) expect(expected).toEqual(result) - }) + }, 30000) it('can grab epg with wildcard as output', () => { const cmd = `${ENV_VAR} npm run grab --- --channels=tests/__data__/input/epg-grab/sites/example.com/example.com.channels.xml --output=tests/__data__/output/guides/{lang}/{site}.xml` From 8e39af2a4d7c15f442a3e686144278e97151d46e Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Thu, 9 Jan 2025 00:56:06 +0000 Subject: [PATCH 63/64] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/12681812156) workflow. --- SITES.md | 427 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 215 insertions(+), 212 deletions(-) diff --git a/SITES.md b/SITES.md index a3fdf3f0..d8a12a97 100644 --- a/SITES.md +++ b/SITES.md @@ -1,212 +1,215 @@ -# Sites - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                                              SiteStatusNotes
                                              9tv.co.il🟢
                                              abc.net.au🟢
                                              allente.dk🟢
                                              allente.fi🟢
                                              allente.no🟢
                                              allente.se🟢
                                              andorradifusio.ad🟢
                                              anteltv.com.uy🟢
                                              arianaafgtv.com🟢
                                              arianatelevision.com🟢
                                              arirang.com🟢
                                              artonline.tv🟢
                                              awilime.com🟢
                                              bein.com🟢
                                              beinsports.com🟢
                                              berrymedia.co.kr🟢
                                              cablego.com.pe🟢
                                              cableplus.com.uy🟢
                                              canalplus-haiti.com🔴https://github.com/iptv-org/epg/issues/2237
                                              canalplus.com🟢
                                              cgates.lt🟢
                                              chada.ma🟢
                                              chaines-tv.orange.fr🟡https://github.com/iptv-org/epg/issues/2395
                                              clickthecity.com🟢
                                              comteco.com.bo🔴https://github.com/iptv-org/epg/issues/2239
                                              content.astro.com.my🟢
                                              cosmotetv.gr🟢
                                              cubmu.com🟢
                                              dens.tv🟢
                                              digiturk.com.tr🔴https://github.com/iptv-org/epg/issues/2304, https://github.com/iptv-org/epg/issues/2547
                                              directv.com🔴https://github.com/iptv-org/epg/issues/2284
                                              directv.com.ar🔴https://github.com/iptv-org/epg/issues/2339
                                              directv.com.uy🟢
                                              dishtv.in🔴https://github.com/iptv-org/epg/issues/2445
                                              dsmart.com.tr🟢
                                              dstv.com🟢
                                              elcinema.com🔴https://github.com/iptv-org/epg/issues/2541
                                              ena.skylifetv.co.kr🟢
                                              energeek.cl🟢
                                              entertainment.ie🟢
                                              firstmedia.com🟢
                                              flixed.io🟢
                                              foxsports.com.au🟢
                                              foxtel.com.au🟢
                                              frikanalen.no🟢
                                              gatotv.com🟢
                                              getafteritmedia.com🟢
                                              guida.tv🟢
                                              guidatv.sky.it🟢
                                              hd-plus.de🔴https://github.com/iptv-org/epg/issues/2173
                                              horizon.tv🟢
                                              hoy.tv🟢
                                              i.mjh.nz🟡https://github.com/iptv-org/epg/issues/2556
                                              i24news.tv🟢
                                              iltalehti.fi🟡https://github.com/iptv-org/epg/issues/2396
                                              indihometv.com🟢
                                              ionplustv.com🟢
                                              ipko.tv🟢
                                              kan.org.il🔴https://github.com/iptv-org/epg/issues/2273
                                              knr.gl🟢
                                              kplus.vn🔴https://github.com/iptv-org/epg/issues/2240
                                              kvf.fo🟢
                                              m.tv.sms.cz🔴https://github.com/iptv-org/epg/issues/2241
                                              m.tving.com🟢
                                              magticom.ge🟢
                                              mako.co.il🟢
                                              maxtv.hrvatskitelekom.hr🔴https://github.com/iptv-org/epg/issues/2509
                                              maxtvgo.mk🟢
                                              mediagenie.co.kr🟢
                                              mediaklikk.hu🟢
                                              mediasetinfinity.mediaset.it🟢
                                              melita.com🟢
                                              meo.pt🟡https://github.com/iptv-org/epg/issues/2446
                                              meuguia.tv🟢
                                              mewatch.sg🟢
                                              mi.tv🟢
                                              mncvision.id🟢
                                              moji.id🟢
                                              mon-programme-tv.be🟢
                                              movistarplus.es🔴https://github.com/iptv-org/epg/issues/2498
                                              mtel.ba🟢
                                              mts.rs🟢
                                              mujtvprogram.cz🟢
                                              musor.tv🟢
                                              mysky.com.ph🟢
                                              mytelly.co.uk🟢
                                              mytvsuper.com🟢
                                              neo.io🟢
                                              nhkworldpremium.com🟢
                                              nhl.com🟢
                                              nostv.pt🟢
                                              novacyprus.com🟢
                                              novasports.gr🟢
                                              nowplayer.now.com🟢
                                              nuevosiglo.com.uy🟢
                                              nzxmltv.com🟡https://github.com/iptv-org/epg/issues/2557
                                              ontvtonight.com🟢
                                              orangetv.orange.es🟢
                                              osn.com🟢
                                              pbsguam.org🟢
                                              pickx.be🟢
                                              player.ee.co.uk🟢
                                              playtv.unifi.com.my🟢
                                              plex.tv🟢
                                              programacion-tv.elpais.com🟢
                                              programacion.tcc.com.uy🟢
                                              programetv.ro🟢
                                              programme-tv.net🟢
                                              programme-tv.vini.pf🟢
                                              programme.tvb.com🟢
                                              programtv.onet.pl🟢
                                              raiplay.it🟢
                                              reportv.com.ar🟢
                                              rev.bs🔴https://github.com/iptv-org/epg/issues/2255
                                              rotana.net🟢
                                              rtb.gov.bn🔴https://github.com/iptv-org/epg/issues/2257
                                              rthk.hk🟢
                                              rtmklik.rtm.gov.my🟢
                                              rtp.pt🟢
                                              ruv.is🟢
                                              s.mxtv.jp🟢
                                              sat.tv🟢
                                              shahid.mbc.net🟢
                                              siba.com.co🟢
                                              singtel.com🟢
                                              sjonvarp.is🟢
                                              sky.co.nz🟢
                                              sky.com🟢
                                              sky.de🟢
                                              skylife.co.kr🟢
                                              skyperfectv.co.jp🟢
                                              snrt.ma🟢
                                              sporttv.pt🟢
                                              starhubtvplus.com🟢
                                              startimestv.com🟢
                                              streamingtvguides.com🟢
                                              superguidatv.it🟢
                                              taiwanplus.com🟢
                                              tapdmv.com🟢
                                              telenet.tv🟢
                                              teliatv.ee🟢
                                              telkussa.fi🟢
                                              telsu.fi🟢
                                              tivie.id🟢
                                              tivu.tv🟢
                                              toonamiaftermath.com🟢
                                              turksatkablo.com.tr🟢
                                              tv-programme.telecablesat.fr🟢
                                              tv.blue.ch🟢
                                              tv.cctv.com🟢
                                              tv.dir.bg🟢
                                              tv.lv🟢
                                              tv.magenta.at🟢
                                              tv.mail.ru🟢
                                              tv.movistar.com.pe🟢
                                              tv.nu🟢
                                              tv.post.lu🟢
                                              tv.trueid.net🟢
                                              tv.yandex.ru🟢
                                              tv.yettel.hu🔴https://github.com/iptv-org/epg/issues/2263
                                              tv24.co.uk🟢
                                              tv24.se🟢
                                              tv2go.t-2.net🟢
                                              tva.tv🔴https://github.com/iptv-org/epg/issues/2264
                                              tvarenasport.com🟢
                                              tvarenasport.hr🟢
                                              tvcesoir.fr🟢
                                              tvcubana.icrt.cu🟢
                                              tvgids.nl🟡https://github.com/iptv-org/epg/issues/2400
                                              tvguide.com🔴https://github.com/iptv-org/epg/issues/2542
                                              tvguide.myjcom.jp🟢
                                              tvhebdo.com🟢
                                              tvheute.at🟢
                                              tvim.tv🟢
                                              tvireland.ie🟢
                                              tvmi.mt🟢
                                              tvmusor.hu🟢
                                              tvpassport.com🟡https://github.com/iptv-org/epg/issues/2272
                                              tvplus.com.tr🟢
                                              tvprofil.com🟡https://github.com/iptv-org/epg/issues/2399
                                              tvtv.us🟡https://github.com/iptv-org/epg/issues/2176
                                              v3.myafn.dodmedia.osd.mil🟢
                                              vidio.com🟢
                                              virginmediatelevision.ie🟢
                                              virgintvgo.virginmedia.com🟢
                                              visionplus.id🟢
                                              vivacom.bg🔴https://github.com/iptv-org/epg/issues/2270
                                              vtm.be🟢
                                              walesi.com.fj🟢
                                              watch.sportsnet.ca🟢
                                              watchyour.tv🟢
                                              wavve.com🟢
                                              web.magentatv.de🔴https://github.com/iptv-org/epg/issues/2555
                                              webtv.delta.nl🟢
                                              winplay.co🟢
                                              worldfishingnetwork.com🟢
                                              www3.nhk.or.jp🟢
                                              xumo.tv🟢
                                              zap.co.ao🟢
                                              ziggogo.tv🟢
                                              znbc.co.zm🟢
                                              zuragt.mn🟢
                                              +# Sites + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              SiteStatusNotes
                                              9tv.co.il🟢
                                              abc.net.au🟢
                                              allente.dk🟢
                                              allente.fi🟢
                                              allente.no🟢
                                              allente.se🟢
                                              andorradifusio.ad🟢
                                              anteltv.com.uy🟢
                                              arianaafgtv.com🟢
                                              arianatelevision.com🟢
                                              arirang.com🟢
                                              artonline.tv🟢
                                              awilime.com🟢
                                              bein.com🟢
                                              beinsports.com🟢
                                              berrymedia.co.kr🟢
                                              cablego.com.pe🟢
                                              cableplus.com.uy🟢
                                              canalplus-haiti.com🔴https://github.com/iptv-org/epg/issues/2237
                                              canalplus.com🟢
                                              cgates.lt🟢
                                              chada.ma🟢
                                              chaines-tv.orange.fr🟢
                                              clickthecity.com🟢
                                              comteco.com.bo🔴https://github.com/iptv-org/epg/issues/2239
                                              content.astro.com.my🟢
                                              cosmotetv.gr🟢
                                              cubmu.com🟢
                                              cyta.com.cy🟢
                                              dens.tv🟢
                                              digiturk.com.tr🔴https://github.com/iptv-org/epg/issues/2304, https://github.com/iptv-org/epg/issues/2547
                                              directv.com🔴https://github.com/iptv-org/epg/issues/2284
                                              directv.com.ar🔴https://github.com/iptv-org/epg/issues/2339
                                              directv.com.uy🟢
                                              dishtv.in🔴https://github.com/iptv-org/epg/issues/2445
                                              dsmart.com.tr🟢
                                              dstv.com🟢
                                              elcinema.com🟢
                                              ena.skylifetv.co.kr🟢
                                              energeek.cl🟢
                                              entertainment.ie🟢
                                              firstmedia.com🟢
                                              flixed.io🟢
                                              foxsports.com.au🟢
                                              foxtel.com.au🟢
                                              frikanalen.no🟢
                                              gatotv.com🟢
                                              getafteritmedia.com🟢
                                              guida.tv🟢
                                              guidatv.sky.it🟢
                                              hd-plus.de🔴https://github.com/iptv-org/epg/issues/2173
                                              horizon.tv🟢
                                              hoy.tv🟢
                                              i.mjh.nz🟡https://github.com/iptv-org/epg/issues/2556
                                              i24news.tv🟢
                                              iltalehti.fi🟡https://github.com/iptv-org/epg/issues/2396
                                              indihometv.com🟢
                                              ionplustv.com🟢
                                              ipko.tv🟢
                                              kan.org.il🔴https://github.com/iptv-org/epg/issues/2273
                                              knr.gl🟢
                                              kplus.vn🔴https://github.com/iptv-org/epg/issues/2240
                                              kvf.fo🟢
                                              m.tv.sms.cz🔴https://github.com/iptv-org/epg/issues/2241
                                              m.tving.com🟢
                                              magticom.ge🟢
                                              mako.co.il🟢
                                              maxtv.hrvatskitelekom.hr🔴https://github.com/iptv-org/epg/issues/2509
                                              maxtvgo.mk🟢
                                              mediagenie.co.kr🟢
                                              mediaklikk.hu🟢
                                              mediasetinfinity.mediaset.it🟢
                                              melita.com🟢
                                              meo.pt🟡https://github.com/iptv-org/epg/issues/2446
                                              meuguia.tv🟢
                                              mewatch.sg🟢
                                              mi.tv🟢
                                              mncvision.id🟢
                                              moji.id🟢
                                              mon-programme-tv.be🟢
                                              movistarplus.es🔴https://github.com/iptv-org/epg/issues/2498
                                              mtel.ba🟢
                                              mts.rs🟢
                                              mujtvprogram.cz🟢
                                              musor.tv🟢
                                              mysky.com.ph🟢
                                              mytelly.co.uk🟢
                                              mytvsuper.com🟢
                                              neo.io🟢
                                              nhkworldpremium.com🟢
                                              nhl.com🟢
                                              nostv.pt🟢
                                              novacyprus.com🟢
                                              novasports.gr🟢
                                              nowplayer.now.com🟢
                                              nuevosiglo.com.uy🟢
                                              nzxmltv.com🟡https://github.com/iptv-org/epg/issues/2557
                                              ontvtonight.com🟢
                                              orangetv.orange.es🟢
                                              osn.com🟢
                                              pbsguam.org🟢
                                              pickx.be🟢
                                              player.ee.co.uk🟢
                                              playtv.unifi.com.my🟢
                                              plex.tv🟢
                                              pluto.tv🟢
                                              programacion-tv.elpais.com🟢
                                              programacion.tcc.com.uy🟢
                                              programetv.ro🟢
                                              programme-tv.net🟢
                                              programme-tv.vini.pf🟢
                                              programme.tvb.com🟢
                                              programtv.onet.pl🟢
                                              raiplay.it🟢
                                              reportv.com.ar🟢
                                              rev.bs🔴https://github.com/iptv-org/epg/issues/2255
                                              rotana.net🟢
                                              rtb.gov.bn🔴https://github.com/iptv-org/epg/issues/2257
                                              rthk.hk🟢
                                              rtmklik.rtm.gov.my🟢
                                              rtp.pt🟢
                                              ruv.is🟢
                                              s.mxtv.jp🟢
                                              sat.tv🟢
                                              shahid.mbc.net🟢
                                              siba.com.co🟢
                                              singtel.com🟢
                                              sjonvarp.is🟢
                                              sky.co.nz🟢
                                              sky.com🟢
                                              sky.de🟢
                                              skylife.co.kr🟢
                                              skyperfectv.co.jp🟢
                                              snrt.ma🟢
                                              sporttv.pt🟢
                                              starhubtvplus.com🟢
                                              startimestv.com🟢
                                              stod2.is🟢
                                              streamingtvguides.com🟢
                                              superguidatv.it🟢
                                              taiwanplus.com🟢
                                              tapdmv.com🟢
                                              telenet.tv🟢
                                              teliatv.ee🟢
                                              telkussa.fi🟢
                                              telsu.fi🟢
                                              tivie.id🟢
                                              tivu.tv🟢
                                              toonamiaftermath.com🟢
                                              turksatkablo.com.tr🟢
                                              tv-programme.telecablesat.fr🟢
                                              tv.blue.ch🟢
                                              tv.cctv.com🟢
                                              tv.dir.bg🟢
                                              tv.lv🟢
                                              tv.magenta.at🟢
                                              tv.mail.ru🟢
                                              tv.movistar.com.pe🟢
                                              tv.nu🟢
                                              tv.post.lu🟢
                                              tv.trueid.net🟢
                                              tv.yandex.ru🟢
                                              tv.yettel.hu🔴https://github.com/iptv-org/epg/issues/2263
                                              tv24.co.uk🟢
                                              tv24.se🟢
                                              tv2go.t-2.net🟢
                                              tva.tv🔴https://github.com/iptv-org/epg/issues/2264
                                              tvarenasport.com🟢
                                              tvarenasport.hr🟢
                                              tvcesoir.fr🟢
                                              tvcubana.icrt.cu🟢
                                              tvgids.nl🟡https://github.com/iptv-org/epg/issues/2400
                                              tvguide.com🔴https://github.com/iptv-org/epg/issues/2542
                                              tvguide.myjcom.jp🟢
                                              tvhebdo.com🟢
                                              tvheute.at🟢
                                              tvim.tv🟢
                                              tvireland.ie🟢
                                              tvmi.mt🟢
                                              tvmusor.hu🟢
                                              tvpassport.com🟡https://github.com/iptv-org/epg/issues/2272
                                              tvplus.com.tr🟢
                                              tvprofil.com🟡https://github.com/iptv-org/epg/issues/2399
                                              tvtv.us🟡https://github.com/iptv-org/epg/issues/2176
                                              v3.myafn.dodmedia.osd.mil🟢
                                              vidio.com🟢
                                              virginmediatelevision.ie🟢
                                              virgintvgo.virginmedia.com🟢
                                              visionplus.id🟢
                                              vivacom.bg🔴https://github.com/iptv-org/epg/issues/2270
                                              vtm.be🟢
                                              walesi.com.fj🟢
                                              watch.sportsnet.ca🟢
                                              watchyour.tv🟢
                                              wavve.com🟢
                                              web.magentatv.de🟡https://github.com/iptv-org/epg/issues/2570
                                              webtv.delta.nl🟢
                                              winplay.co🟢
                                              worldfishingnetwork.com🟢
                                              www3.nhk.or.jp🟢
                                              xumo.tv🟢
                                              zap.co.ao🟢
                                              ziggogo.tv🟢
                                              znbc.co.zm🟢
                                              zuragt.mn🟢
                                              From 68ba143c676c1f05eef0d2ae6e752c9cdb873367 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Fri, 10 Jan 2025 00:57:49 +0000 Subject: [PATCH 64/64] [Bot] Update SITES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/12701205740) workflow.