From c77b184bea74a40578706bd810671eab54dc8496 Mon Sep 17 00:00:00 2001 From: theofficialomega <30985701+BellezaEmporium@users.noreply.github.com> Date: Tue, 21 Apr 2026 19:01:37 +0200 Subject: [PATCH] Change tokenk Axios wrapper to multifetch, config changes --- package-lock.json | 813 ++++++++---------- package.json | 10 +- scripts/core/index.ts | 1 + scripts/core/multifetch.ts | 243 ++++++ scripts/core/utils.ts | 2 +- .../dsmart.com.tr/dsmart.com.tr.channels.xml | 149 ++-- sites/dsmart.com.tr/dsmart.com.tr.config.js | 2 +- sites/dsmart.com.tr/dsmart.com.tr.test.js | 21 +- sites/france.tv/france.tv.config.js | 29 +- sites/mncvision.id/mncvision.id.config.js | 14 +- sites/mncvision.id/mncvision.id.test.js | 56 +- .../mojmaxtv.hrvatskitelekom.hr.config.js | 2 +- sites/mtel.ba/mtel.ba.config.js | 2 +- .../orangetv.orange.es.config.js | 7 +- .../orangetv.orange.es.test.js | 8 +- sites/rotana.net/rotana.net.config.js | 2 +- sites/sky.com/sky.com.channels.xml | 42 +- sites/sky.com/sky.com.config.js | 33 +- .../startimestv.com/startimestv.com.config.js | 2 +- sites/tivie.id/tivie.id.config.js | 2 +- sites/tvkaista.org/tvkaista.org.config.js | 2 +- sites/tvpassport.com/tvpassport.com.config.js | 2 +- .../virgintvgo.virginmedia.com.config.js | 2 +- sites/xem.kplus.vn/xem.kplus.vn.config.js | 2 +- 24 files changed, 778 insertions(+), 670 deletions(-) create mode 100644 scripts/core/multifetch.ts diff --git a/package-lock.json b/package-lock.json index b2917bb6e..39e1ee857 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,13 +14,13 @@ "@freearhey/core": "^0.15.2", "@freearhey/search-js": "^0.2.1", "@freearhey/storage-js": "^0.2.0", + "@inquirer/prompts": "^8.4.2", "@iptv-org/sdk": "^1.3.0", - "@ntlab/sfetch": "^1.2.0", "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@stylistic/eslint-plugin": "^5.10.0", - "@swc/core": "^1.15.26", + "@swc/core": "^1.15.30", "@swc/jest": "^0.2.39", "@types/cli-progress": "^3.11.6", "@types/fs-extra": "^11.0.4", @@ -53,7 +53,6 @@ "globals": "^17.5.0", "husky": "^9.1.7", "iconv-lite": "^0.7.2", - "inquirer": "^13.4.1", "jest": "^30.3.0", "langs": "^2.0.0", "libxml2-wasm": "^0.7.1", @@ -71,11 +70,10 @@ "srcset": "^5.0.3", "table2array": "^0.0.2", "tabletojson": "^4.1.10", - "tough-cookie": "^6.0.1", "tsx": "^4.21.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.58.2", - "uuid": "^13.0.0" + "typescript-eslint": "^8.59.0", + "uuid": "^14.0.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -1453,13 +1451,13 @@ } }, "node_modules/@inquirer/checkbox": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.3.tgz", - "integrity": "sha512-+G7I8CT+EHv/hasNfUl3P37DVoMoZfpA+2FXmM54dA8MxYle1YqucxbacxHalw1iAFSdKNEDTGNV7F+j1Ldqcg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.4.tgz", + "integrity": "sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" }, @@ -1476,12 +1474,12 @@ } }, "node_modules/@inquirer/confirm": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.11.tgz", - "integrity": "sha512-pTpHjg0iEIRMYV/7oCZUMf27/383E6Wyhfc/MY+AVQGEoUobffIYWOK9YLP2XFRGz/9i6WlTQh1CkFVIo2Y7XA==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.12.tgz", + "integrity": "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1497,9 +1495,9 @@ } }, "node_modules/@inquirer/core": { - "version": "11.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.8.tgz", - "integrity": "sha512-/u+yJk2pOKNDOh1ZgdUH2RQaRx6OOH4I0uwL95qPvTFTIL38YBsuSC4r1yXBB3Q6JvNqFFc202gk0Ew79rrcjA==", + "version": "11.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.9.tgz", + "integrity": "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", @@ -1544,12 +1542,12 @@ } }, "node_modules/@inquirer/editor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.0.tgz", - "integrity": "sha512-6wlkYl65Qfayy48gPCfU4D7li6KCAGN79mLXa/tYHZH99OfZ820yY+HA+DgE88r8YwwgeuY6PQgNqMeK6LuMmw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.1.tgz", + "integrity": "sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/external-editor": "^3.0.0", "@inquirer/type": "^4.0.5" }, @@ -1566,12 +1564,12 @@ } }, "node_modules/@inquirer/expand": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.12.tgz", - "integrity": "sha512-vOfrB33b7YIZfDauXS8vNNz2Z86FozTZLIt7e+7/dCaPJ1RXZsHCuI9TlcERzEUq57vkM+UdnBgxP0rFd23JYQ==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.13.tgz", + "integrity": "sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1617,12 +1615,12 @@ } }, "node_modules/@inquirer/input": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.11.tgz", - "integrity": "sha512-twUWidn4ocPO8qi6fRM7tNWt7W1FOnOZqQ+/+PsfLUacMR5rFLDPK9ql0nBPwxi0oELbo8T5NhRs8B2+qQEqFQ==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.12.tgz", + "integrity": "sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1638,12 +1636,12 @@ } }, "node_modules/@inquirer/number": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.11.tgz", - "integrity": "sha512-Vscmim9TCksQsfjPtka/JwPUcbLhqWYrgfPf1cHrCm24X/F2joFwnageD50yMKsaX14oNGOyKf/RNXAFkNjWpA==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.12.tgz", + "integrity": "sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1659,13 +1657,13 @@ } }, "node_modules/@inquirer/password": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.11.tgz", - "integrity": "sha512-9KZFeRaNHIcejtPb0wN4ddFc7EvobVoAFa049eS3LrDZFxI8O7xUXiITEOinBzkZFAIwY5V4yzQae/QfO9cbbg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.12.tgz", + "integrity": "sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1681,21 +1679,21 @@ } }, "node_modules/@inquirer/prompts": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.1.tgz", - "integrity": "sha512-AH5xPQ997K7e0F0vulPlteIHke2awMkFi8F0dBemrDfmvtPmHJo82mdHbONC4F/t8d1NHwrbI5cGVI+RbLWdoQ==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.2.tgz", + "integrity": "sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.1.3", - "@inquirer/confirm": "^6.0.11", - "@inquirer/editor": "^5.1.0", - "@inquirer/expand": "^5.0.12", - "@inquirer/input": "^5.0.11", - "@inquirer/number": "^4.0.11", - "@inquirer/password": "^5.0.11", - "@inquirer/rawlist": "^5.2.7", - "@inquirer/search": "^4.1.7", - "@inquirer/select": "^5.1.3" + "@inquirer/checkbox": "^5.1.4", + "@inquirer/confirm": "^6.0.12", + "@inquirer/editor": "^5.1.1", + "@inquirer/expand": "^5.0.13", + "@inquirer/input": "^5.0.12", + "@inquirer/number": "^4.0.12", + "@inquirer/password": "^5.0.12", + "@inquirer/rawlist": "^5.2.8", + "@inquirer/search": "^4.1.8", + "@inquirer/select": "^5.1.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1710,12 +1708,12 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.7.tgz", - "integrity": "sha512-AqRMiD9+uE1lskDPrdqHwrV/EUmxKEBLX44SR7uxK3vD2413AmVfE5EQaPeNzYf5Pq5SitHJDYUFVF0poIr09w==", + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.8.tgz", + "integrity": "sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" }, "engines": { @@ -1731,12 +1729,12 @@ } }, "node_modules/@inquirer/search": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.7.tgz", - "integrity": "sha512-1y7+0N65AWk5RdlXH/Kn13txf3IjIQ7OEfhCEkDTU+h5wKMLq8DUF3P6z+/kLSxDGDtQT1dRBWEUC3o/VvImsQ==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.8.tgz", + "integrity": "sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" }, @@ -1753,13 +1751,13 @@ } }, "node_modules/@inquirer/select": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.3.tgz", - "integrity": "sha512-zYyqWgGQi3NhBcNq4Isc5rB3oEdQEh1Q/EcAnOW0FK4MpnXWkvSBYgA4cYrTM4A9UB573omouZbnL9JJ74Mq3A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.4.tgz", + "integrity": "sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==", "license": "MIT", "dependencies": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" }, @@ -3273,9 +3271,9 @@ } }, "node_modules/@swc/core": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.26.tgz", - "integrity": "sha512-tglZGyx8N5PC+x1Nd/JrZxqpqlcZoSuG9gTDKO6AuFToFiVB3uS8HvbKFuO7g3lJzvFf9riAb94xs9HU2UhAHQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.30.tgz", + "integrity": "sha512-R8VQbQY1BZcbIF2p3gjlTCwAQzx1A194ugWfwld5y+WgVVWqVKm7eURGGOVbQVubgKWzidP2agomBbg96rZilQ==", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -3290,18 +3288,18 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.26", - "@swc/core-darwin-x64": "1.15.26", - "@swc/core-linux-arm-gnueabihf": "1.15.26", - "@swc/core-linux-arm64-gnu": "1.15.26", - "@swc/core-linux-arm64-musl": "1.15.26", - "@swc/core-linux-ppc64-gnu": "1.15.26", - "@swc/core-linux-s390x-gnu": "1.15.26", - "@swc/core-linux-x64-gnu": "1.15.26", - "@swc/core-linux-x64-musl": "1.15.26", - "@swc/core-win32-arm64-msvc": "1.15.26", - "@swc/core-win32-ia32-msvc": "1.15.26", - "@swc/core-win32-x64-msvc": "1.15.26" + "@swc/core-darwin-arm64": "1.15.30", + "@swc/core-darwin-x64": "1.15.30", + "@swc/core-linux-arm-gnueabihf": "1.15.30", + "@swc/core-linux-arm64-gnu": "1.15.30", + "@swc/core-linux-arm64-musl": "1.15.30", + "@swc/core-linux-ppc64-gnu": "1.15.30", + "@swc/core-linux-s390x-gnu": "1.15.30", + "@swc/core-linux-x64-gnu": "1.15.30", + "@swc/core-linux-x64-musl": "1.15.30", + "@swc/core-win32-arm64-msvc": "1.15.30", + "@swc/core-win32-ia32-msvc": "1.15.30", + "@swc/core-win32-x64-msvc": "1.15.30" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -3313,9 +3311,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.26.tgz", - "integrity": "sha512-OmcP96CFsNOwa65tamQayRcfqhNlcQ3YCWOq+0Wb+CAM4uB7kOMrXY41Gj4atthxrGhLQ9pg7Vk26iApb88idA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.30.tgz", + "integrity": "sha512-VvpP+vq08HmGYewMWvrdsxh9s2lthz/808zXm8Yu5kaqeR8Yia2b0eYXleHQ3VAjoStUDk6LzTheBW9KXYQdMA==", "cpu": [ "arm64" ], @@ -3329,9 +3327,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.26.tgz", - "integrity": "sha512-liTTTpKSv89ivIxcZ+iU1cRige9Y7JkOjVnJ2Ystzl+DsWNHqt7wLTTgm/u7gEqmmAS2JKryODLQn3q1UtFNPQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.30.tgz", + "integrity": "sha512-WiJA0hiZI3nwQAO6mu5RqigtWGDtth4Hiq6rbZxAaQyhIcqKIg5IoMRc1Y071lrNJn29eEDMC86Rq58xgUxlDg==", "cpu": [ "x64" ], @@ -3345,9 +3343,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.26.tgz", - "integrity": "sha512-Y/g+m3I8CeBof5A3kWWOS6QA2HOIUytF5EeTgfwcAK+GKT/tGe7Xqo5svBtaqflU5od2zzbMTWqkinPXgRWGgA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.30.tgz", + "integrity": "sha512-YANuFUo48kIT6plJgCD0keae9HFXfjxsbvsgevqc0hr/07X/p7sAWTFOGYEc2SXcASaK7UvuQqzlbW8pr7R79g==", "cpu": [ "arm" ], @@ -3361,9 +3359,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.26.tgz", - "integrity": "sha512-19IvwyPfBN/rz9s7qXhOTQmW0922+pjpRUUvIebu+CMM75nX6YuDzHsGx8hSmn5dS89SNaMCh1lgUuXqm++6jg==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.30.tgz", + "integrity": "sha512-VndG8jaR4ugY6u+iVOT0Q+d2fZd7sLgjPgN8W/Le+3EbZKl+cRfFxV7Eoz4gfLqhmneZPdcIzf9T3LkgkmqNLg==", "cpu": [ "arm64" ], @@ -3380,9 +3378,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.26.tgz", - "integrity": "sha512-iNlbvTIo425rkKzDLLWFJGnFXr3myETUdIDHcjuiPNZE8b0ogmcAuilC4yEJX7FSHGbnlsoJcCT2xf4b3VJmmQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.30.tgz", + "integrity": "sha512-1SYGs2l0Yyyi0pR/P/NKz/x0kqxkoiw+BXeJjLUdecSk/KasncWlJrc6hOvFSgKHOBrzgM5jwuluKtlT8dnrcA==", "cpu": [ "arm64" ], @@ -3399,9 +3397,9 @@ } }, "node_modules/@swc/core-linux-ppc64-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.26.tgz", - "integrity": "sha512-AuuEOtG+YXKIjIUup4RsxYNklx6XVB3WKWfhxG6hnfPrn7vp89RNOLbbyyprgj6Sk7k9ulwGVTJElEvmBNPSCA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.30.tgz", + "integrity": "sha512-TXREtiXeRhbfDFbmhnkIsXpKfzbfT73YkV2ZF6w0sfxgjC5zI2ZAbaCOq25qxvegofj2K93DtOpm9RLaBgqR2g==", "cpu": [ "ppc64" ], @@ -3418,9 +3416,9 @@ } }, "node_modules/@swc/core-linux-s390x-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.26.tgz", - "integrity": "sha512-JcMDWQvW1BchUyRg8E0jHiTx7CQYpUr5uDEL1dnPDECrEjBEGG2ynmJ3XX70sWXql0JagqR1t3VpANYFWdUnqA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.30.tgz", + "integrity": "sha512-DCR2YYeyd6DQE4OuDhImouuNcjXEiEdnn1Y0DyGteugPEDvVuvYk8Xddi+4o2SgWH6jiW8/I+3emZvbep1NC+g==", "cpu": [ "s390x" ], @@ -3437,9 +3435,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.26.tgz", - "integrity": "sha512-FW7V7Mbpq4+PA7BiAq76LJs8MdNuUSylyuRVfQRkhIyeWadFroZ+KOPgjku8Z/fXzngxBRvsk+PGGB0t8mGcjA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.30.tgz", + "integrity": "sha512-5Pizw3NgfOJ5BJOBK8TIRa59xFW2avESTOBDPTAYwZYa1JNDs+KMF9lUfjJiJLM5HiMs/wPheA9eiT0q9m2AoA==", "cpu": [ "x64" ], @@ -3456,9 +3454,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.26.tgz", - "integrity": "sha512-w8erqMHsVcdGwUfJxF6LaiTuPoKnyLOcUbhLcxiXrlLt5MLjtlgcIeUY/NWK/oPoyqkgH+/i8pOJnMTxvl83ZQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.30.tgz", + "integrity": "sha512-qyqydP/wyH8alcIP4a2hnGSjHLJjm9H7yDFup+CPy9oTahFgLLwnNcv5UHXqO2Qs3AIND+cls5f/Bb6hqpxdgA==", "cpu": [ "x64" ], @@ -3475,9 +3473,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.26.tgz", - "integrity": "sha512-uDCWCNpUiqkbvPmsuPUTn/P7ag9SqNXD2JT/W3dUu7yZ2krzN+nmmoQ2xRX63/J6RYiHI7aT4jo7Z++lsljlPA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.30.tgz", + "integrity": "sha512-CaQENgDHVGOg1mSF5sQVgvfFHG9kjMor2rkLMLeLOkfZYNj13ppnJ9+lfaBZLZUMMbnlGQnavCJb8PVBUOso7Q==", "cpu": [ "arm64" ], @@ -3491,9 +3489,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.26.tgz", - "integrity": "sha512-2k1ax1QmmqLEnpC0uRCw7OXhBfyvdPqERBXupDasjYbChT6ZSO/uha28Bp38cw0viKIG79L27aTDkbkABsMW3w==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.30.tgz", + "integrity": "sha512-30VdLeGk6fugiUs/kUdJ/pAg7z/zpvVbR11RH60jZ0Z42WIeIniYx0rLEWN7h/pKJ3CopqsQ3RsogCAkRKiA2g==", "cpu": [ "ia32" ], @@ -3507,9 +3505,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.26.tgz", - "integrity": "sha512-aUuYecSEGa4SUSdyCWaI/vk8jdseifYnsF1GZQx2+piL8GIuT/5QrVcFfmes4Iwy7FIVXxtzD063z/FfpZ7K7w==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.30.tgz", + "integrity": "sha512-4iObHPR+Q4oDY110EF5SF5eIaaVJNpMdG9C0q3Q92BsJ5y467uHz7sYQhP60WYlLFsLQ1el2YrIPUItUAQGOKg==", "cpu": [ "x64" ], @@ -3815,16 +3813,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.2.tgz", - "integrity": "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/type-utils": "8.58.2", - "@typescript-eslint/utils": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -3837,7 +3835,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.58.2", + "@typescript-eslint/parser": "^8.59.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } @@ -3852,15 +3850,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.2.tgz", - "integrity": "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3" }, "engines": { @@ -3893,13 +3891,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.2.tgz", - "integrity": "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.58.2", - "@typescript-eslint/types": "^8.58.2", + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", "debug": "^4.4.3" }, "engines": { @@ -3931,13 +3929,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.2.tgz", - "integrity": "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3948,9 +3946,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.2.tgz", - "integrity": "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3964,14 +3962,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.2.tgz", - "integrity": "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/utils": "8.58.2", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -4005,9 +4003,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.2.tgz", - "integrity": "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4018,15 +4016,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.2.tgz", - "integrity": "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.58.2", - "@typescript-eslint/tsconfig-utils": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -4110,15 +4108,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.2.tgz", - "integrity": "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4133,12 +4131,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.2.tgz", - "integrity": "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -7213,41 +7211,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "node_modules/inquirer": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.4.1.tgz", - "integrity": "sha512-IUopujY77lFiSaLz0fx6FHEOEANz0nAsqv+vQJddnVshi6wdos984qwjb42mZbH3zCJS4f9ioIGDqSPqMMMXjw==", - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", - "@inquirer/prompts": "^8.4.1", - "@inquirer/type": "^4.0.5", - "mute-stream": "^3.0.0", - "run-async": "^4.0.6", - "rxjs": "^7.8.2" - }, - "engines": { - "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/inquirer/node_modules/mute-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", - "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", - "license": "ISC", - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -10627,15 +10590,6 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, - "node_modules/run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/run-series": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", @@ -11240,24 +11194,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tldts": { - "version": "7.0.28", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.28.tgz", - "integrity": "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==", - "license": "MIT", - "dependencies": { - "tldts-core": "^7.0.28" - }, - "bin": { - "tldts": "bin/cli.js" - } - }, - "node_modules/tldts-core": { - "version": "7.0.28", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz", - "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==", - "license": "MIT" - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -11275,18 +11211,6 @@ "node": ">=8.0" } }, - "node_modules/tough-cookie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", - "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", - "license": "BSD-3-Clause", - "dependencies": { - "tldts": "^7.0.5" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -11402,15 +11326,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.2.tgz", - "integrity": "sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz", + "integrity": "sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==", "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.58.2", - "@typescript-eslint/parser": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/utils": "8.58.2" + "@typescript-eslint/eslint-plugin": "8.59.0", + "@typescript-eslint/parser": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11541,9 +11465,9 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", + "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -12679,29 +12603,29 @@ "integrity": "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==" }, "@inquirer/checkbox": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.3.tgz", - "integrity": "sha512-+G7I8CT+EHv/hasNfUl3P37DVoMoZfpA+2FXmM54dA8MxYle1YqucxbacxHalw1iAFSdKNEDTGNV7F+j1Ldqcg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.4.tgz", + "integrity": "sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==", "requires": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" } }, "@inquirer/confirm": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.11.tgz", - "integrity": "sha512-pTpHjg0iEIRMYV/7oCZUMf27/383E6Wyhfc/MY+AVQGEoUobffIYWOK9YLP2XFRGz/9i6WlTQh1CkFVIo2Y7XA==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.12.tgz", + "integrity": "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" } }, "@inquirer/core": { - "version": "11.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.8.tgz", - "integrity": "sha512-/u+yJk2pOKNDOh1ZgdUH2RQaRx6OOH4I0uwL95qPvTFTIL38YBsuSC4r1yXBB3Q6JvNqFFc202gk0Ew79rrcjA==", + "version": "11.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.9.tgz", + "integrity": "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==", "requires": { "@inquirer/ansi": "^2.0.5", "@inquirer/figures": "^2.0.5", @@ -12725,21 +12649,21 @@ } }, "@inquirer/editor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.0.tgz", - "integrity": "sha512-6wlkYl65Qfayy48gPCfU4D7li6KCAGN79mLXa/tYHZH99OfZ820yY+HA+DgE88r8YwwgeuY6PQgNqMeK6LuMmw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.1.tgz", + "integrity": "sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/external-editor": "^3.0.0", "@inquirer/type": "^4.0.5" } }, "@inquirer/expand": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.12.tgz", - "integrity": "sha512-vOfrB33b7YIZfDauXS8vNNz2Z86FozTZLIt7e+7/dCaPJ1RXZsHCuI9TlcERzEUq57vkM+UdnBgxP0rFd23JYQ==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.13.tgz", + "integrity": "sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" } }, @@ -12758,76 +12682,76 @@ "integrity": "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==" }, "@inquirer/input": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.11.tgz", - "integrity": "sha512-twUWidn4ocPO8qi6fRM7tNWt7W1FOnOZqQ+/+PsfLUacMR5rFLDPK9ql0nBPwxi0oELbo8T5NhRs8B2+qQEqFQ==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.12.tgz", + "integrity": "sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" } }, "@inquirer/number": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.11.tgz", - "integrity": "sha512-Vscmim9TCksQsfjPtka/JwPUcbLhqWYrgfPf1cHrCm24X/F2joFwnageD50yMKsaX14oNGOyKf/RNXAFkNjWpA==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.12.tgz", + "integrity": "sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" } }, "@inquirer/password": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.11.tgz", - "integrity": "sha512-9KZFeRaNHIcejtPb0wN4ddFc7EvobVoAFa049eS3LrDZFxI8O7xUXiITEOinBzkZFAIwY5V4yzQae/QfO9cbbg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.12.tgz", + "integrity": "sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==", "requires": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" } }, "@inquirer/prompts": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.1.tgz", - "integrity": "sha512-AH5xPQ997K7e0F0vulPlteIHke2awMkFi8F0dBemrDfmvtPmHJo82mdHbONC4F/t8d1NHwrbI5cGVI+RbLWdoQ==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.2.tgz", + "integrity": "sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==", "requires": { - "@inquirer/checkbox": "^5.1.3", - "@inquirer/confirm": "^6.0.11", - "@inquirer/editor": "^5.1.0", - "@inquirer/expand": "^5.0.12", - "@inquirer/input": "^5.0.11", - "@inquirer/number": "^4.0.11", - "@inquirer/password": "^5.0.11", - "@inquirer/rawlist": "^5.2.7", - "@inquirer/search": "^4.1.7", - "@inquirer/select": "^5.1.3" + "@inquirer/checkbox": "^5.1.4", + "@inquirer/confirm": "^6.0.12", + "@inquirer/editor": "^5.1.1", + "@inquirer/expand": "^5.0.13", + "@inquirer/input": "^5.0.12", + "@inquirer/number": "^4.0.12", + "@inquirer/password": "^5.0.12", + "@inquirer/rawlist": "^5.2.8", + "@inquirer/search": "^4.1.8", + "@inquirer/select": "^5.1.4" } }, "@inquirer/rawlist": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.7.tgz", - "integrity": "sha512-AqRMiD9+uE1lskDPrdqHwrV/EUmxKEBLX44SR7uxK3vD2413AmVfE5EQaPeNzYf5Pq5SitHJDYUFVF0poIr09w==", + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.8.tgz", + "integrity": "sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/type": "^4.0.5" } }, "@inquirer/search": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.7.tgz", - "integrity": "sha512-1y7+0N65AWk5RdlXH/Kn13txf3IjIQ7OEfhCEkDTU+h5wKMLq8DUF3P6z+/kLSxDGDtQT1dRBWEUC3o/VvImsQ==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.8.tgz", + "integrity": "sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==", "requires": { - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" } }, "@inquirer/select": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.3.tgz", - "integrity": "sha512-zYyqWgGQi3NhBcNq4Isc5rB3oEdQEh1Q/EcAnOW0FK4MpnXWkvSBYgA4cYrTM4A9UB573omouZbnL9JJ74Mq3A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.4.tgz", + "integrity": "sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==", "requires": { "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", + "@inquirer/core": "^11.1.9", "@inquirer/figures": "^2.0.5", "@inquirer/type": "^4.0.5" } @@ -13909,96 +13833,96 @@ } }, "@swc/core": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.26.tgz", - "integrity": "sha512-tglZGyx8N5PC+x1Nd/JrZxqpqlcZoSuG9gTDKO6AuFToFiVB3uS8HvbKFuO7g3lJzvFf9riAb94xs9HU2UhAHQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.30.tgz", + "integrity": "sha512-R8VQbQY1BZcbIF2p3gjlTCwAQzx1A194ugWfwld5y+WgVVWqVKm7eURGGOVbQVubgKWzidP2agomBbg96rZilQ==", "requires": { - "@swc/core-darwin-arm64": "1.15.26", - "@swc/core-darwin-x64": "1.15.26", - "@swc/core-linux-arm-gnueabihf": "1.15.26", - "@swc/core-linux-arm64-gnu": "1.15.26", - "@swc/core-linux-arm64-musl": "1.15.26", - "@swc/core-linux-ppc64-gnu": "1.15.26", - "@swc/core-linux-s390x-gnu": "1.15.26", - "@swc/core-linux-x64-gnu": "1.15.26", - "@swc/core-linux-x64-musl": "1.15.26", - "@swc/core-win32-arm64-msvc": "1.15.26", - "@swc/core-win32-ia32-msvc": "1.15.26", - "@swc/core-win32-x64-msvc": "1.15.26", + "@swc/core-darwin-arm64": "1.15.30", + "@swc/core-darwin-x64": "1.15.30", + "@swc/core-linux-arm-gnueabihf": "1.15.30", + "@swc/core-linux-arm64-gnu": "1.15.30", + "@swc/core-linux-arm64-musl": "1.15.30", + "@swc/core-linux-ppc64-gnu": "1.15.30", + "@swc/core-linux-s390x-gnu": "1.15.30", + "@swc/core-linux-x64-gnu": "1.15.30", + "@swc/core-linux-x64-musl": "1.15.30", + "@swc/core-win32-arm64-msvc": "1.15.30", + "@swc/core-win32-ia32-msvc": "1.15.30", + "@swc/core-win32-x64-msvc": "1.15.30", "@swc/counter": "^0.1.3", "@swc/types": "^0.1.26" } }, "@swc/core-darwin-arm64": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.26.tgz", - "integrity": "sha512-OmcP96CFsNOwa65tamQayRcfqhNlcQ3YCWOq+0Wb+CAM4uB7kOMrXY41Gj4atthxrGhLQ9pg7Vk26iApb88idA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.30.tgz", + "integrity": "sha512-VvpP+vq08HmGYewMWvrdsxh9s2lthz/808zXm8Yu5kaqeR8Yia2b0eYXleHQ3VAjoStUDk6LzTheBW9KXYQdMA==", "optional": true }, "@swc/core-darwin-x64": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.26.tgz", - "integrity": "sha512-liTTTpKSv89ivIxcZ+iU1cRige9Y7JkOjVnJ2Ystzl+DsWNHqt7wLTTgm/u7gEqmmAS2JKryODLQn3q1UtFNPQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.30.tgz", + "integrity": "sha512-WiJA0hiZI3nwQAO6mu5RqigtWGDtth4Hiq6rbZxAaQyhIcqKIg5IoMRc1Y071lrNJn29eEDMC86Rq58xgUxlDg==", "optional": true }, "@swc/core-linux-arm-gnueabihf": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.26.tgz", - "integrity": "sha512-Y/g+m3I8CeBof5A3kWWOS6QA2HOIUytF5EeTgfwcAK+GKT/tGe7Xqo5svBtaqflU5od2zzbMTWqkinPXgRWGgA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.30.tgz", + "integrity": "sha512-YANuFUo48kIT6plJgCD0keae9HFXfjxsbvsgevqc0hr/07X/p7sAWTFOGYEc2SXcASaK7UvuQqzlbW8pr7R79g==", "optional": true }, "@swc/core-linux-arm64-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.26.tgz", - "integrity": "sha512-19IvwyPfBN/rz9s7qXhOTQmW0922+pjpRUUvIebu+CMM75nX6YuDzHsGx8hSmn5dS89SNaMCh1lgUuXqm++6jg==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.30.tgz", + "integrity": "sha512-VndG8jaR4ugY6u+iVOT0Q+d2fZd7sLgjPgN8W/Le+3EbZKl+cRfFxV7Eoz4gfLqhmneZPdcIzf9T3LkgkmqNLg==", "optional": true }, "@swc/core-linux-arm64-musl": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.26.tgz", - "integrity": "sha512-iNlbvTIo425rkKzDLLWFJGnFXr3myETUdIDHcjuiPNZE8b0ogmcAuilC4yEJX7FSHGbnlsoJcCT2xf4b3VJmmQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.30.tgz", + "integrity": "sha512-1SYGs2l0Yyyi0pR/P/NKz/x0kqxkoiw+BXeJjLUdecSk/KasncWlJrc6hOvFSgKHOBrzgM5jwuluKtlT8dnrcA==", "optional": true }, "@swc/core-linux-ppc64-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.26.tgz", - "integrity": "sha512-AuuEOtG+YXKIjIUup4RsxYNklx6XVB3WKWfhxG6hnfPrn7vp89RNOLbbyyprgj6Sk7k9ulwGVTJElEvmBNPSCA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.30.tgz", + "integrity": "sha512-TXREtiXeRhbfDFbmhnkIsXpKfzbfT73YkV2ZF6w0sfxgjC5zI2ZAbaCOq25qxvegofj2K93DtOpm9RLaBgqR2g==", "optional": true }, "@swc/core-linux-s390x-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.26.tgz", - "integrity": "sha512-JcMDWQvW1BchUyRg8E0jHiTx7CQYpUr5uDEL1dnPDECrEjBEGG2ynmJ3XX70sWXql0JagqR1t3VpANYFWdUnqA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.30.tgz", + "integrity": "sha512-DCR2YYeyd6DQE4OuDhImouuNcjXEiEdnn1Y0DyGteugPEDvVuvYk8Xddi+4o2SgWH6jiW8/I+3emZvbep1NC+g==", "optional": true }, "@swc/core-linux-x64-gnu": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.26.tgz", - "integrity": "sha512-FW7V7Mbpq4+PA7BiAq76LJs8MdNuUSylyuRVfQRkhIyeWadFroZ+KOPgjku8Z/fXzngxBRvsk+PGGB0t8mGcjA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.30.tgz", + "integrity": "sha512-5Pizw3NgfOJ5BJOBK8TIRa59xFW2avESTOBDPTAYwZYa1JNDs+KMF9lUfjJiJLM5HiMs/wPheA9eiT0q9m2AoA==", "optional": true }, "@swc/core-linux-x64-musl": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.26.tgz", - "integrity": "sha512-w8erqMHsVcdGwUfJxF6LaiTuPoKnyLOcUbhLcxiXrlLt5MLjtlgcIeUY/NWK/oPoyqkgH+/i8pOJnMTxvl83ZQ==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.30.tgz", + "integrity": "sha512-qyqydP/wyH8alcIP4a2hnGSjHLJjm9H7yDFup+CPy9oTahFgLLwnNcv5UHXqO2Qs3AIND+cls5f/Bb6hqpxdgA==", "optional": true }, "@swc/core-win32-arm64-msvc": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.26.tgz", - "integrity": "sha512-uDCWCNpUiqkbvPmsuPUTn/P7ag9SqNXD2JT/W3dUu7yZ2krzN+nmmoQ2xRX63/J6RYiHI7aT4jo7Z++lsljlPA==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.30.tgz", + "integrity": "sha512-CaQENgDHVGOg1mSF5sQVgvfFHG9kjMor2rkLMLeLOkfZYNj13ppnJ9+lfaBZLZUMMbnlGQnavCJb8PVBUOso7Q==", "optional": true }, "@swc/core-win32-ia32-msvc": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.26.tgz", - "integrity": "sha512-2k1ax1QmmqLEnpC0uRCw7OXhBfyvdPqERBXupDasjYbChT6ZSO/uha28Bp38cw0viKIG79L27aTDkbkABsMW3w==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.30.tgz", + "integrity": "sha512-30VdLeGk6fugiUs/kUdJ/pAg7z/zpvVbR11RH60jZ0Z42WIeIniYx0rLEWN7h/pKJ3CopqsQ3RsogCAkRKiA2g==", "optional": true }, "@swc/core-win32-x64-msvc": { - "version": "1.15.26", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.26.tgz", - "integrity": "sha512-aUuYecSEGa4SUSdyCWaI/vk8jdseifYnsF1GZQx2+piL8GIuT/5QrVcFfmes4Iwy7FIVXxtzD063z/FfpZ7K7w==", + "version": "1.15.30", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.30.tgz", + "integrity": "sha512-4iObHPR+Q4oDY110EF5SF5eIaaVJNpMdG9C0q3Q92BsJ5y467uHz7sYQhP60WYlLFsLQ1el2YrIPUItUAQGOKg==", "optional": true }, "@swc/counter": { @@ -14262,15 +14186,15 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "@typescript-eslint/eslint-plugin": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.2.tgz", - "integrity": "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "requires": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/type-utils": "8.58.2", - "@typescript-eslint/utils": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -14284,14 +14208,14 @@ } }, "@typescript-eslint/parser": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.2.tgz", - "integrity": "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "requires": { - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3" }, "dependencies": { @@ -14306,12 +14230,12 @@ } }, "@typescript-eslint/project-service": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.2.tgz", - "integrity": "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", "requires": { - "@typescript-eslint/tsconfig-utils": "^8.58.2", - "@typescript-eslint/types": "^8.58.2", + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", "debug": "^4.4.3" }, "dependencies": { @@ -14326,28 +14250,28 @@ } }, "@typescript-eslint/scope-manager": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.2.tgz", - "integrity": "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "requires": { - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" } }, "@typescript-eslint/tsconfig-utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.2.tgz", - "integrity": "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "requires": {} }, "@typescript-eslint/type-utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.2.tgz", - "integrity": "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", "requires": { - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/utils": "8.58.2", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -14363,19 +14287,19 @@ } }, "@typescript-eslint/types": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.2.tgz", - "integrity": "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==" + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==" }, "@typescript-eslint/typescript-estree": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.2.tgz", - "integrity": "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "requires": { - "@typescript-eslint/project-service": "8.58.2", - "@typescript-eslint/tsconfig-utils": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/visitor-keys": "8.58.2", + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -14420,22 +14344,22 @@ } }, "@typescript-eslint/utils": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.2.tgz", - "integrity": "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "requires": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.58.2", - "@typescript-eslint/types": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" } }, "@typescript-eslint/visitor-keys": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.2.tgz", - "integrity": "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "requires": { - "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/types": "8.59.0", "eslint-visitor-keys": "^5.0.0" }, "dependencies": { @@ -16414,27 +16338,6 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "inquirer": { - "version": "13.4.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-13.4.1.tgz", - "integrity": "sha512-IUopujY77lFiSaLz0fx6FHEOEANz0nAsqv+vQJddnVshi6wdos984qwjb42mZbH3zCJS4f9ioIGDqSPqMMMXjw==", - "requires": { - "@inquirer/ansi": "^2.0.5", - "@inquirer/core": "^11.1.8", - "@inquirer/prompts": "^8.4.1", - "@inquirer/type": "^4.0.5", - "mute-stream": "^3.0.0", - "run-async": "^4.0.6", - "rxjs": "^7.8.2" - }, - "dependencies": { - "mute-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", - "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==" - } - } - }, "ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -18773,11 +18676,6 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==" }, - "run-async": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", - "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==" - }, "run-series": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", @@ -19162,19 +19060,6 @@ } } }, - "tldts": { - "version": "7.0.28", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.28.tgz", - "integrity": "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==", - "requires": { - "tldts-core": "^7.0.28" - } - }, - "tldts-core": { - "version": "7.0.28", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz", - "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==" - }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -19188,14 +19073,6 @@ "is-number": "^7.0.0" } }, - "tough-cookie": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", - "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", - "requires": { - "tldts": "^7.0.5" - } - }, "triple-beam": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", @@ -19265,14 +19142,14 @@ "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==" }, "typescript-eslint": { - "version": "8.58.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.2.tgz", - "integrity": "sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.59.0.tgz", + "integrity": "sha512-BU3ONW9X+v90EcCH9ZS6LMackcVtxRLlI3XrYyqZIwVSHIk7Qf7bFw1z0M9Q0IUxhTMZCf8piY9hTYaNEIASrw==", "requires": { - "@typescript-eslint/eslint-plugin": "8.58.2", - "@typescript-eslint/parser": "8.58.2", - "@typescript-eslint/typescript-estree": "8.58.2", - "@typescript-eslint/utils": "8.58.2" + "@typescript-eslint/eslint-plugin": "8.59.0", + "@typescript-eslint/parser": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0" } }, "undici": { @@ -19354,9 +19231,9 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "uuid": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", - "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==" + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", + "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==" }, "v8-to-istanbul": { "version": "9.3.0", diff --git a/package.json b/package.json index d29fce79e..d533aa231 100644 --- a/package.json +++ b/package.json @@ -43,12 +43,12 @@ "@freearhey/search-js": "^0.2.1", "@freearhey/storage-js": "^0.2.0", "@iptv-org/sdk": "^1.3.0", - "@ntlab/sfetch": "^1.2.0", + "@inquirer/prompts": "^8.4.2", "@octokit/core": "^7.0.6", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@stylistic/eslint-plugin": "^5.10.0", - "@swc/core": "^1.15.26", + "@swc/core": "^1.15.30", "@swc/jest": "^0.2.39", "@types/cli-progress": "^3.11.6", "@types/fs-extra": "^11.0.4", @@ -81,7 +81,6 @@ "globals": "^17.5.0", "husky": "^9.1.7", "iconv-lite": "^0.7.2", - "inquirer": "^13.4.1", "jest": "^30.3.0", "langs": "^2.0.0", "libxml2-wasm": "^0.7.1", @@ -99,10 +98,9 @@ "srcset": "^5.0.3", "table2array": "^0.0.2", "tabletojson": "^4.1.10", - "tough-cookie": "^6.0.1", "tsx": "^4.21.0", "typescript": "^6.0.3", - "typescript-eslint": "^8.58.2", - "uuid": "^13.0.0" + "typescript-eslint": "^8.59.0", + "uuid": "^14.0.0" } } diff --git a/scripts/core/index.ts b/scripts/core/index.ts index 687374da2..8b2a01336 100644 --- a/scripts/core/index.ts +++ b/scripts/core/index.ts @@ -1,2 +1,3 @@ export * from './htmlTable' export * from './utils' +export { default as multifetch } from './multifetch' diff --git a/scripts/core/multifetch.ts b/scripts/core/multifetch.ts new file mode 100644 index 000000000..02196d8c3 --- /dev/null +++ b/scripts/core/multifetch.ts @@ -0,0 +1,243 @@ +/** + * Multifetch, adapted from "@ntlab/sfetch" by BellezaEmporium. + * Multiple concurrent fetch with a callback to process the result of each request. + * The maximum number of concurrent workers can be configured with `setMaxWorker()`. + * By default, the callback will only be called if the request is successful and returns a result. + * This behavior can be changed with `setCheckResult()`. + * A custom debug function can be set with `setDebugger()`. + * Native mock support via `setMocks()` for testing without axios. + */ + +import axios, { AxiosRequestConfig } from 'axios' +import fs from 'fs' +import path from 'path' + +interface QueueItem { + url: string; + method?: string; + params?: Record; +} + +type QueueEntry = string | QueueItem; +type Callback = (queue: QueueEntry, data: unknown, headers?: unknown) => void; +type DebugFn = (format: string, url: string, config: string) => void; +type MockHandler = (url: string, config?: AxiosRequestConfig) => unknown; + +interface MockRoute { + handler: MockHandler | string; + dataDir?: string; +} + +let nworker = 25 +let checkResult = true +let debug: DebugFn | undefined +const mocks = new Map() + +/** + * Process a mock route and return response + */ +const processMockRoute = (url: string, config: AxiosRequestConfig | undefined, route: MockRoute): unknown => { + const { handler, dataDir } = route + + if (typeof handler === 'function') { + return handler(url, config) + } + + if (typeof handler === 'string') { + // If it looks like a file path, read from disk + if (handler.includes('.') || handler.includes('/')) { + const filePath = dataDir ? path.join(dataDir, handler) : handler + const content = fs.readFileSync(filePath, 'utf8') + if (handler.endsWith('.json')) { + try { + return JSON.parse(content) + } catch { + return content + } + } + return content + } + // Otherwise return as-is + return handler + } + + return handler +} + +/** + * Check if a URL matches any mock pattern + */ +const findMock = (url: string): MockRoute | undefined => { + // Try exact match first + if (mocks.has(url)) return mocks.get(url) + + // Try pattern matching (prefix match) + for (const [pattern, route] of mocks) { + if (url.startsWith(pattern)) return route + } + return undefined +} + +async function doFetch(queues: QueueEntry[], cb: Callback) { + if (!queues.length) return + + let resolveFinish: (() => void) | undefined + const workers = new Set<() => void>() + let activeWorkers = 0 + + const processQueue = () => { + if (queues.length > 0 && activeWorkers < nworker) { + const queue = queues.shift() + if (queue === undefined) return + + activeWorkers++ + + const processRequest = async () => { + try { + const isQueueObject = typeof queue === 'object' && queue !== null + const url = isQueueObject ? queue.url : (queue as string) + const method = (isQueueObject && queue.method) ? queue.method : 'get' + const params = (isQueueObject && queue.params) ? queue.params : {} + + const requestConfig: AxiosRequestConfig = method === 'request' + ? { ...params, url } + : { ...params, url, method: method as AxiosRequestConfig['method'] } + + if (debug) { + debug('fetch %s with %s', url, JSON.stringify(requestConfig)) + } + + // Check if there's a mock for this URL + const mock = findMock(url) + let response: unknown + + if (mock) { + const mockResponse = processMockRoute(url, requestConfig, mock) + + const isObj = typeof mockResponse === 'object' && mockResponse !== null + if (debug) { + const hasData = isObj && 'data' in mockResponse + const keys = isObj ? Object.keys(mockResponse).join(',') : '' + debug(`mock response type: ${typeof mockResponse}, has data: ${hasData}, keys: ${keys}`, url, JSON.stringify(requestConfig)) + } + + // Check if response looks like it's already formatted (has 'data' and optionally 'status'/'headers') + const isFormatted = isObj && 'data' in mockResponse && 'status' in mockResponse + response = isFormatted ? mockResponse : { data: mockResponse, status: 200, headers: {} } + } else if (mocks.size > 0) { + // If mocks are set up but this URL doesn't match, return 404 + response = { data: '', status: 404, headers: {} } + } else { + // No mocks set up, use real axios + const axMethod = (requestConfig.method || 'get').toLowerCase() + if (axMethod === 'get' && typeof axios.get === 'function') { + response = await axios.get(url, requestConfig) + } else if (axMethod === 'post' && typeof axios.post === 'function') { + response = await axios.post(url, requestConfig.data, requestConfig) + } else { + response = await axios.request(requestConfig) + } + } + + const res = response as { data?: unknown; headers?: unknown } | undefined + if ((checkResult && res?.data) || !checkResult) { + cb(queue, res?.data, res?.headers) + } + } catch (err: unknown) { + const url = typeof queue === 'object' ? queue.url : queue + const errorMessage = err instanceof Error ? err.message : String(err) + console.error(`Unable to fetch ${url}: ${errorMessage}!`) + if (!checkResult) { + cb(queue, undefined) + } + } finally { + activeWorkers-- + workers.delete(processRequest) + processQueue() + + if (activeWorkers === 0 && queues.length === 0 && resolveFinish) { + resolveFinish() + } + } + } + + workers.add(processRequest) + processRequest() + } + } + + // Start initial workers + const initialWorkers = Math.min(nworker, queues.length) + for (let i = 0; i < initialWorkers; i++) { + processQueue() + } + + // Wait for all to complete + if (workers.size > 0 || activeWorkers > 0) { + await new Promise(resolve => { + resolveFinish = resolve + }) + } +} + +Object.assign(doFetch, { + getMaxWorker() { + return nworker + }, + setMaxWorker(n: number) { + nworker = n + return doFetch + }, + getCheckResult() { + return checkResult + }, + setCheckResult(enabled: boolean) { + checkResult = enabled + return doFetch + }, + setDebugger(dbg: (arg0: string, arg1: unknown, arg2: string) => void) { + debug = dbg + return doFetch + }, + /** + * Set mocks for URLs (for testing) + * @param mockConfig - Object with URL patterns as keys and handlers as values + * @param dataDir - Optional directory for resolving file paths in handlers + * + * Usage: + * multifetch.setMocks({ + * 'https://example.com/api': (url) => ({ data: 'response' }), + * 'https://example.com/file': 'response.json' + * }, __dirname) + */ + setMocks(mockConfig: Record, dataDir?: string) { + mocks.clear() + for (const [url, handler] of Object.entries(mockConfig)) { + mocks.set(url, { handler, dataDir }) + } + return doFetch + }, + /** + * Add a single mock route + */ + addMock(url: string, handler: MockHandler | string, dataDir?: string) { + mocks.set(url, { handler, dataDir }) + return doFetch + }, + /** + * Clear all mocks + */ + clearMocks() { + mocks.clear() + return doFetch + }, + /** + * Get registered mock URLs for debugging + */ + getMocks() { + return Array.from(mocks.keys()) + } +}) + +export default doFetch +module.exports = doFetch \ No newline at end of file diff --git a/scripts/core/utils.ts b/scripts/core/utils.ts index 2ad7673c4..2a1f52565 100644 --- a/scripts/core/utils.ts +++ b/scripts/core/utils.ts @@ -113,4 +113,4 @@ export function parseNumber(value: string): number { export function parseList(value: string): string[] { return value.split(',') -} +} \ No newline at end of file diff --git a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml index aa6766464..9b2c8c736 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.channels.xml +++ b/sites/dsmart.com.tr/dsmart.com.tr.channels.xml @@ -1,103 +1,90 @@ - A Para - Haber Global - Ekotürk - Tv 100 - Trt Spor Yıldız - Love Nature - SPOR SMART 2 - Sinema TV - Sinema TV 2 - Sinema TV Aksiyon - Sinema TV Aksiyon 2 - Sinema TV Aile - Sinema TV Aile 2 - Sinema TV 1001 - Sinema TV Comedy - Sinema TV Comedy 2 - Sinema TV 1002 - Disney Junior - NOW - teve2 - National Geographic - National Geographic WILD - TRT Belgesel - TRT Spor Eurosport - TV8 + a Spor CosmoSports - Da Vinci Learning - Baby TV - CNN International - Cartoonito + Çocuk Smart FilmScreen BBC Earth - Viasat History Azoomee - Dream Tv - BBC World News - Cartoon Network - TV 8,5 - TRT World - 24 - NTV - TGRT Haber - Bloomberg HT - TRT Kurdi - TRT Avaz - TRT Türk NHK World English - Dizi Smart Premium + a Haber Minika Çocuk - NBA TV - Spor Smart - Discovery ID - MovieSmart Classic - Show TV - Kanal 7 - Haber Türk - TV Net - Ülke TV - TRT 3 Spor - 360 - Discovery - TRT Çocuk - Minika GO - Kanal D - Star - trt 2 - TRT Müzik - FX - TRT 1 - Dizi Smart Max + Dream Türk Eurosport 2 - TRT Haber - MovieSmart Türk - CNN Türk SD - Fashion TV + Beyaz TV Nature Escape - TV4 - Tele 1 - a2 - TRT 4K - Euro D - History Channel - SZC - Tarih Tv - HT Spor Docu Screen - TRT Diyanet Çocuk + Sıfır Tv + CosmoEn Tmb RT International + Vav Tv + Bi Kanal Moonbug - CNBC-e DMAX TLC - Ekol Tv + Meltemtv Spor Çoklu Ekran Ulusal Çoklu Ekran Haber Çoklu Ekran + Spacetoon + 24 + 360 a News - TRT EBA TV + A Para + Baby TV + BBC World News + Bloomberg HT + Cartoonito + Cartoon Network + CNBC-e + CNN Türk SD + Da Vinci Learning + Discovery + Disney Junior + Dizi Smart Max + Dizi Smart Premium + Dream Tv + Ekotürk + Euro D + Fashion TV + FX + Haber Global + Haber Türk + HT Spor + Discovery ID + Kanal 7 + Love Nature + Minika GO + MovieSmart Classic + MovieSmart Türk + National Geographic + National Geographic WILD + NOW + NTV + Show TV + Sinema TV 2 + Sinema TV 1001 + Sinema TV 1002 + Sinema TV Aile 2 + Sinema TV Aile + Sinema TV Aksiyon 2 + Sinema TV Aksiyon + Sinema TV Comedy 2 + Sinema TV Comedy + Sinema TV + SZC + SPOR SMART 2 + Spor Smart + Star + Tarih Tv + teve2 + TGRT Haber + TV4 + TV8 + TV 8,5 + TV Net + Ülke TV + Viasat History diff --git a/sites/dsmart.com.tr/dsmart.com.tr.config.js b/sites/dsmart.com.tr/dsmart.com.tr.config.js index 4a188b625..9c2a69254 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.config.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.config.js @@ -2,7 +2,7 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') const duration = require('dayjs/plugin/duration') -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const debug = require('debug')('site:dsmart.com.tr') dayjs.extend(utc) diff --git a/sites/dsmart.com.tr/dsmart.com.tr.test.js b/sites/dsmart.com.tr/dsmart.com.tr.test.js index 19bb9732d..fbc46c494 100644 --- a/sites/dsmart.com.tr/dsmart.com.tr.test.js +++ b/sites/dsmart.com.tr/dsmart.com.tr.test.js @@ -1,38 +1,31 @@ const { parser, url } = require('./dsmart.com.tr.config.js') -const axios = require('axios') const dayjs = require('dayjs') const fs = require('fs') const path = require('path') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') +const multifetch = require('../../scripts/core/multifetch') dayjs.extend(customParseFormat) dayjs.extend(utc) -jest.mock('axios') - const date = dayjs.utc('2025-01-13', 'YYYY-MM-DD').startOf('d') const channel = { site_id: '5fe07f5dcfef0b1593275822', xmltv_id: 'Sinema1001.tr' } -axios.get.mockImplementation(url => { - const result = {} - const urls = { +beforeEach(() => { + multifetch.setMocks({ 'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=1&limit=10&day=2025-01-13': 'content1.json', 'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=2&limit=10&day=2025-01-13': 'content2.json', - } - if (urls[url] !== undefined) { - result.data = fs.readFileSync(path.join(__dirname, '__data__', urls[url])).toString() - if (!urls[url].startsWith('content1')) { - result.data = JSON.parse(result.data) - } - } + }, __dirname + '/__data__') +}) - return Promise.resolve(result) +afterEach(() => { + multifetch.clearMocks() }) diff --git a/sites/france.tv/france.tv.config.js b/sites/france.tv/france.tv.config.js index b8327a70c..81017ebf1 100644 --- a/sites/france.tv/france.tv.config.js +++ b/sites/france.tv/france.tv.config.js @@ -1,5 +1,6 @@ const dayjs = require('dayjs') const axios = require('axios') +const parseDuration = require('parse-duration').default const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') const customParseFormat = require('dayjs/plugin/customParseFormat') @@ -65,7 +66,7 @@ module.exports = { } items.forEach(item => { - const { start, stop } = parseDuration(date, item) + const { start, stop } = parseTimes(date, item) if (!start.isValid() || !stop.isValid()) return // Can contain Season and Episode in title, but not always. If title is missing, skip the program if (!item?.content?.title) return @@ -124,32 +125,20 @@ module.exports = { } } -function parseDuration(date, item) { - const current_date = date.format('YYYY-MM-DD') +function parseTimes(date, item) { const time = item.content?.broadcastBeginDate - const duration = item.content?.duration // e.g. "11 min 45 s", "1 h 30 min", "30 min" + const durationStr = item.content?.duration // e.g. "11 min 45 s", "1 h 30 min", "30 min" if (!time) return { start: dayjs(null), stop: dayjs(null) } const timeParts = time.split('h') - - let durationInSeconds = 0 - if (duration) { - const durationParts = duration.split(' ') - for (let i = 0; i < durationParts.length; i++) { - const part = durationParts[i] - if (part === 'h' && i > 0) { - durationInSeconds += parseInt(durationParts[i - 1]) * 3600 - } else if (part === 'min' && i > 0) { - durationInSeconds += parseInt(durationParts[i - 1]) * 60 - } else if (part === 's' && i > 0) { - durationInSeconds += parseInt(durationParts[i - 1]) - } - } + const start = dayjs.utc(`${date.format('YYYY-MM-DD')} ${timeParts[0]}:${timeParts[1]}`, 'YYYY-MM-DD HH:mm') + + let stop = start + if (durationStr) { + stop = start.add(parseDuration(durationStr) || 0, 'ms') } - const start = dayjs.utc(`${current_date} ${timeParts[0]}:${timeParts[1]}`, 'YYYY-MM-DD HH:mm') - const stop = start.add(durationInSeconds, 'second') return { start, stop } } diff --git a/sites/mncvision.id/mncvision.id.config.js b/sites/mncvision.id/mncvision.id.config.js index 88f2b430c..fe8112882 100644 --- a/sites/mncvision.id/mncvision.id.config.js +++ b/sites/mncvision.id/mncvision.id.config.js @@ -4,7 +4,7 @@ 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 doFetch = require('../../scripts/core/multifetch') const debug = require('debug')('site:mncvision.id') dayjs.extend(utc) @@ -150,10 +150,14 @@ async function parseItems(content, date, cookies) { function loadLangCookies(channel) { const url = `https://www.mncvision.id/language_switcher/setlang/${languages[channel.lang]}/` - return axios - .get(url, { timeout }) - .then(r => parseCookies(r.headers)) - .catch(error => console.error(error.message)) + return new Promise(resolve => { + doFetch([{ url, method: 'get' }], (queue, data, headers) => { + resolve(parseCookies(headers)) + }).catch(error => { + console.error(error.message) + resolve(null) + }) + }) } function parseCookies(headers) { diff --git a/sites/mncvision.id/mncvision.id.test.js b/sites/mncvision.id/mncvision.id.test.js index 1ce385d63..07da0798f 100644 --- a/sites/mncvision.id/mncvision.id.test.js +++ b/sites/mncvision.id/mncvision.id.test.js @@ -1,10 +1,10 @@ const { parser, url, request } = require('./mncvision.id.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') +const multifetch = require('../../scripts/core/multifetch') dayjs.extend(customParseFormat) dayjs.extend(utc) @@ -28,38 +28,34 @@ const englishHeaders = { ] } -axios.get.mockImplementation((url, opts) => { - if (url === 'https://www.mncvision.id/language_switcher/setlang/indonesia/') { - return Promise.resolve({ - headers: indonesiaHeaders - }) - } - if (url === 'https://www.mncvision.id/language_switcher/setlang/english/') { - return Promise.resolve({ - headers: englishHeaders - }) - } - if ( - url === 'https://www.mncvision.id/schedule/detail/20231119001500154/Blue-Bloods-S13-Ep-19/1' - ) { - const getCookie = headers => { - if (Array.isArray(headers['set-cookie'])) { - return headers['set-cookie'][0].split('; ')[0] - } - } - if (opts.headers['Cookie'] === getCookie(indonesiaHeaders)) { - return Promise.resolve({ - data: fs.readFileSync(path.resolve(__dirname, '__data__/program_id.html')) - }) - } - if (opts.headers['Cookie'] === getCookie(englishHeaders)) { - return Promise.resolve({ - data: fs.readFileSync(path.resolve(__dirname, '__data__/program_en.html')) - }) +beforeEach(() => { + const getCookie = headers => { + if (Array.isArray(headers['set-cookie'])) { + return headers['set-cookie'][0].split('; ')[0] } } - return Promise.resolve({ data: '' }) + multifetch.setMocks({ + 'https://www.mncvision.id/language_switcher/setlang/indonesia/': () => ({ + headers: indonesiaHeaders + }), + 'https://www.mncvision.id/language_switcher/setlang/english/': () => ({ + headers: englishHeaders + }), + 'https://www.mncvision.id/schedule/detail/20231119001500154/Blue-Bloods-S13-Ep-19/1': (url, config) => { + if (config?.headers?.['Cookie'] === getCookie(indonesiaHeaders)) { + return { data: fs.readFileSync(path.resolve(__dirname, '__data__/program_id.html'), 'utf8'), status: 200 } + } + if (config?.headers?.['Cookie'] === getCookie(englishHeaders)) { + return { data: fs.readFileSync(path.resolve(__dirname, '__data__/program_en.html'), 'utf8'), status: 200 } + } + return { data: '', status: 404 } + } + }) +}) + +afterEach(() => { + multifetch.clearMocks() }) it('can generate valid url', () => { diff --git a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js index a8da1bcd0..d3fe1aa4c 100644 --- a/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js +++ b/sites/mojmaxtv.hrvatskitelekom.hr/mojmaxtv.hrvatskitelekom.hr.config.js @@ -1,4 +1,4 @@ -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const axios = require('axios') const dayjs = require('dayjs') const crypto = require('crypto') diff --git a/sites/mtel.ba/mtel.ba.config.js b/sites/mtel.ba/mtel.ba.config.js index f0cfba79d..3b1529219 100644 --- a/sites/mtel.ba/mtel.ba.config.js +++ b/sites/mtel.ba/mtel.ba.config.js @@ -1,4 +1,4 @@ -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') diff --git a/sites/orangetv.orange.es/orangetv.orange.es.config.js b/sites/orangetv.orange.es/orangetv.orange.es.config.js index 5ec2b354d..b5db47c50 100644 --- a/sites/orangetv.orange.es/orangetv.orange.es.config.js +++ b/sites/orangetv.orange.es/orangetv.orange.es.config.js @@ -1,13 +1,10 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const doFetch = require('@ntlab/sfetch') -const debug = require('debug')('site:orangetv.orange.es') +const doFetch = require('../../scripts/core/multifetch') dayjs.extend(utc) -doFetch.setDebugger(debug) - -const API_PROGRAM_ENDPOINT = 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO' +const API_PROGRAM_ENDPOINT = 'https://epg.orangetv.orange.es/epg/SmartTV_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' diff --git a/sites/orangetv.orange.es/orangetv.orange.es.test.js b/sites/orangetv.orange.es/orangetv.orange.es.test.js index 7e92021cc..9aa5b2b51 100644 --- a/sites/orangetv.orange.es/orangetv.orange.es.test.js +++ b/sites/orangetv.orange.es/orangetv.orange.es.test.js @@ -20,11 +20,11 @@ const channel = { axios.get.mockImplementation(url => { const result = {} const urls = { - 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO/20250112_8h_1.json': + 'https://epg.orangetv.orange.es/epg/SmartTV_Android/1_PRO/20250112_8h_1.json': 'data1.json', - 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO/20250112_8h_2.json': + 'https://epg.orangetv.orange.es/epg/SmartTV_Android/1_PRO/20250112_8h_2.json': 'data2.json', - 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO/20250112_8h_3.json': + 'https://epg.orangetv.orange.es/epg/SmartTV_Android/1_PRO/20250112_8h_3.json': 'data3.json', } if (urls[url] !== undefined) { @@ -39,7 +39,7 @@ axios.get.mockImplementation(url => { it('can generate valid url', () => { expect(url({ date })).toBe( - 'https://epg.orangetv.orange.es/epg/Smartphone_Android/1_PRO/20250112_8h_1.json' + 'https://epg.orangetv.orange.es/epg/SmartTV_Android/1_PRO/20250112_8h_1.json' ) }) diff --git a/sites/rotana.net/rotana.net.config.js b/sites/rotana.net/rotana.net.config.js index f38abbffe..4ea6561bc 100644 --- a/sites/rotana.net/rotana.net.config.js +++ b/sites/rotana.net/rotana.net.config.js @@ -4,7 +4,7 @@ const dayjs = require('dayjs') const timezone = require('dayjs/plugin/timezone') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const debug = require('debug')('site:rotana.net') dayjs.extend(timezone) diff --git a/sites/sky.com/sky.com.channels.xml b/sites/sky.com/sky.com.channels.xml index c5bf5e431..e0d6cd5a3 100644 --- a/sites/sky.com/sky.com.channels.xml +++ b/sites/sky.com/sky.com.channels.xml @@ -1,5 +1,6 @@ + Sky Action Really+1 Sky Intro SkySpBoxOffHD @@ -8,14 +9,28 @@ 55250 Sky Intro Virgin Radio + TNTSports1 HD Disney Jr HD Disney+CineHD LBC News + TNTSBoxOff2HD Sky Arts RTÉ Radio 1 RTÉ 2FM RTÉ R na G RTÉ Lyric fm + Sky Showcase + SkySp News HD + SkySpMainEv + SkySp Cricket + SkySp Action + SkySp News + SkySp Tennis HD + Sky One HD + Sky One + SkySpMainEvHD + Sky Family + Sky Greats BBC R Cymru 2 BBC R5L BBC R5SX @@ -48,14 +63,35 @@ Capital XTRA BBC ALBA HD Sky One HD + TNT Sports 4 Panjab Radio BFBS Radio SonLife Classic FM + TNTSports2 HD + TNTSports3 HD + TNT Sports 1 + TNT Sports 2 + SkySp F1 HD + SkySp F'ball HD + SkySp F'ball + SkySp+ HD + SkySp+ + SkySp ActionHD + SkySp Golf HD + SkySp PL HD + SkySp News HD + TNTSports4 HD + SkySp Racing HD + SkySpCricket HD + SkySp Mix HD + SkySp Mix WRN Europe EWTN Catholic LEGEND + TNT Sports 3 Arise News + TNTSBoxOffHD My Sky My Account Program Your Remote @@ -319,8 +355,8 @@ Nick Jr. Nick Jr. Too Nick Jr. Too - Nick Alvinnnn!!! - Nick Alvinnnn!!! + Nick SpongeBob + Nick SpongeBob Noor TV NOW 70s NOW 80s @@ -378,7 +414,7 @@ Sky Drama HD Sky Family HD Sky Greats HD - Sky Box Set HD + SkyBiopicsHD SkyPremiereHD Sky ScFi/HorHD Sky5*MoviesHD diff --git a/sites/sky.com/sky.com.config.js b/sites/sky.com/sky.com.config.js index 871fec299..c34683309 100644 --- a/sites/sky.com/sky.com.config.js +++ b/sites/sky.com/sky.com.config.js @@ -1,17 +1,13 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') -const doFetch = require('@ntlab/sfetch') -const debug = require('debug')('site:sky.com') +const axios = require('axios') +const doFetch = require('../../scripts/core/multifetch') const sortBy = require('lodash.sortby') -const path = require('path') -const fs = require('fs/promises') dayjs.extend(utc) dayjs.extend(timezone) -doFetch.setDebugger(debug) - module.exports = { site: 'sky.com', days: 2, @@ -53,24 +49,15 @@ module.exports = { return programs }, async channels() { - const dataPath = path.join(__dirname, '__data__', 'content.json') - let regions = [] - - try { - const raw = await fs.readFile(dataPath, 'utf8') - const payload = JSON.parse(raw) - if (Array.isArray(payload.regions)) { - regions = payload.regions + const regions = await axios.get('https://epgservices.sky.com/999/api/2.0/regions/json') + .then(res => res.data.regions) + .then(region => region.map(region => { + if (!region || region.b === undefined || region.sb === undefined) return null + return { + bouquet: region.b, + subBouquet: region.sb } - } catch (err) { - debug('Failed to read regions from %s: %o', dataPath, err) - throw err - } - - if (regions.length === 0) { - debug('No regions defined in %s', dataPath) - return [] - } + }).filter(region => region !== null)) const uniqueRegions = new Map() regions.forEach(region => { diff --git a/sites/startimestv.com/startimestv.com.config.js b/sites/startimestv.com/startimestv.com.config.js index 214e28b11..49997dbfb 100644 --- a/sites/startimestv.com/startimestv.com.config.js +++ b/sites/startimestv.com/startimestv.com.config.js @@ -2,7 +2,7 @@ const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const debug = require('debug')('site:startimestv.com') dayjs.extend(utc) diff --git a/sites/tivie.id/tivie.id.config.js b/sites/tivie.id/tivie.id.config.js index ed3bda766..157b65bb7 100644 --- a/sites/tivie.id/tivie.id.config.js +++ b/sites/tivie.id/tivie.id.config.js @@ -4,7 +4,7 @@ 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 doFetch = require('../../scripts/core/multifetch') const debug = require('debug')('site:tivie.id') dayjs.extend(utc) diff --git a/sites/tvkaista.org/tvkaista.org.config.js b/sites/tvkaista.org/tvkaista.org.config.js index 6647f0bc0..50f17bce1 100644 --- a/sites/tvkaista.org/tvkaista.org.config.js +++ b/sites/tvkaista.org/tvkaista.org.config.js @@ -1,4 +1,4 @@ -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') diff --git a/sites/tvpassport.com/tvpassport.com.config.js b/sites/tvpassport.com/tvpassport.com.config.js index 5a1c0e42d..f10f37621 100644 --- a/sites/tvpassport.com/tvpassport.com.config.js +++ b/sites/tvpassport.com/tvpassport.com.config.js @@ -4,7 +4,7 @@ const cheerio = require('cheerio') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') const customParseFormat = require('dayjs/plugin/customParseFormat') -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const FRENCH_CHANNELS = require('./__data__/frenchChannels.js') 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 dba45f8db..9a3083df1 100644 --- a/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js +++ b/sites/virgintvgo.virginmedia.com/virgintvgo.virginmedia.com.config.js @@ -1,6 +1,6 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') const debug = require('debug')('site:virgintvgo.virginmedia.com') dayjs.extend(utc) diff --git a/sites/xem.kplus.vn/xem.kplus.vn.config.js b/sites/xem.kplus.vn/xem.kplus.vn.config.js index e648ca2fc..6461905c1 100644 --- a/sites/xem.kplus.vn/xem.kplus.vn.config.js +++ b/sites/xem.kplus.vn/xem.kplus.vn.config.js @@ -3,7 +3,7 @@ const axios = require('axios') const utc = require('dayjs/plugin/utc') const timezone = require('dayjs/plugin/timezone') const customParseFormat = require('dayjs/plugin/customParseFormat') -const doFetch = require('@ntlab/sfetch') +const doFetch = require('../../scripts/core/multifetch') dayjs.extend(utc) dayjs.extend(timezone)