From 59f3bd66204b51f0786e94b5fcab8f05891a2ff1 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 2 Jan 2024 23:08:28 +0100 Subject: [PATCH 01/72] PHPStan enable already passing strictRules (#195) --- phpstan.neon | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpstan.neon b/phpstan.neon index 1cf09f7..8cac860 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -23,12 +23,12 @@ parameters: reportMaybesInPropertyPhpDocTypes: false strictRules: allRules: false - booleansInConditions: false # TODO pass + booleansInConditions: true closureUsesThis: true disallowedConstructs: false disallowedLooseComparison: false matchingInheritedMethodNames: true - noVariableVariables: false # TODO pass + noVariableVariables: true numericOperandsInArithmeticOperators: true overwriteVariablesWithLoop: true requireParentConstructorCall: true From 1eb7463c61e60c6cbab55d4848251b1e5b8f0867 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 11 Jan 2024 11:19:27 +0000 Subject: [PATCH 02/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 1649bf8..65039e4 100644 --- a/extensions.json +++ b/extensions.json @@ -346,7 +346,7 @@ "name": "Reddit Image", "author": "Alexis Degrugillier", "description": "Modify reddit entries by displaying known medias and easing access to the linked resource", - "version": "1.1.1", + "version": "1.2.0", "entrypoint": "RedditImage", "type": "user", "url": "https://github.com/aledeg/xExtension-RedditImage", From 00161944c6ca2585b49e5bad6cba7cd96edbdb4a Mon Sep 17 00:00:00 2001 From: Green-Kite <36706555+Green-Kite@users.noreply.github.com> Date: Mon, 15 Jan 2024 19:33:05 +0100 Subject: [PATCH 03/72] xExtension-ShareByEmail: add German localization (#197) --- .../i18n/de/shareByEmail.php | 22 +++++++++++++++++++ xExtension-ShareByEmail/metadata.json | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100755 xExtension-ShareByEmail/i18n/de/shareByEmail.php diff --git a/xExtension-ShareByEmail/i18n/de/shareByEmail.php b/xExtension-ShareByEmail/i18n/de/shareByEmail.php new file mode 100755 index 0000000..48307cf --- /dev/null +++ b/xExtension-ShareByEmail/i18n/de/shareByEmail.php @@ -0,0 +1,22 @@ + [ + 'feedback' => [ + 'failed' => 'Die Mail konnte nicht gesendet werden. Bitte kontaktiere deinen Administrator.', + 'fields_required' => 'Alle Felder sind Pflichtfelder.', + 'sent' => 'Die Mail wurde gesendet.', + ], + 'form' => [ + 'cancel' => 'Abbrechen', + 'content' => 'Inhalt', + 'content_default' => "Hi,\n\nIch glaube dieser Artikel ist interessant für dich!\n\n%s – %s\n\n---\n\nDiese Mail wurde von %s gesendet über %s ( %s )", + 'send' => 'Senden', + 'subject' => 'Betreff', + 'subject_default' => 'Interessanter Artikel für dich!', + 'to' => 'An', + ], + 'intro' => 'Diesen Artikel per Mail versenden: “%s”', + 'title' => 'Einen Artikel per Mail teilen.', + ], +]; diff --git a/xExtension-ShareByEmail/metadata.json b/xExtension-ShareByEmail/metadata.json index bdc71af..8f689f0 100644 --- a/xExtension-ShareByEmail/metadata.json +++ b/xExtension-ShareByEmail/metadata.json @@ -2,7 +2,7 @@ "name": "Share By Email", "author": "Marien Fressinaud", "description": "Improve the sharing by email system.", - "version": "0.2", + "version": "0.2.1", "entrypoint": "ShareByEmail", "type": "user" } From 51460e0884752f0b9eafe46d73fda2197b7ffa9a Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 16 Jan 2024 11:19:14 +0000 Subject: [PATCH 04/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 65039e4..fc3b328 100644 --- a/extensions.json +++ b/extensions.json @@ -357,7 +357,7 @@ "name": "Share By Email", "author": "Marien Fressinaud", "description": "Improve the sharing by email system.", - "version": "0.2", + "version": "0.2.1", "entrypoint": "ShareByEmail", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From ba8c53b5cff770d49357bdfc9008b0288fd7c9c4 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 22 Jan 2024 11:19:54 +0000 Subject: [PATCH 05/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index fc3b328..ccf8ed2 100644 --- a/extensions.json +++ b/extensions.json @@ -137,7 +137,7 @@ "name": "Feed Priority Shortcut", "author": "Aidi Stan", "description": "Set up visibilities/priorities of your feeds easily", - "version": "1.0.3", + "version": "1.1.0", "entrypoint": "FeedPriorityShortcut", "type": "user", "url": "https://github.com/aidistan/freshrss-extensions", From 40cdca2ebea6dfd164c194efadbdc0c86ea99835 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 26 Jan 2024 11:18:11 +0000 Subject: [PATCH 06/72] Update extension list --- extensions.json | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/extensions.json b/extensions.json index ccf8ed2..77e4ca7 100644 --- a/extensions.json +++ b/extensions.json @@ -1,17 +1,6 @@ { "version": 0.1, "extensions": [ - { - "name": "Always togglable menu", - "author": "nicofrand", - "description": "This makes the icon to toggle the menu always shown, even on larger screens.", - "version": 1.2, - "entrypoint": "TogglableMenu", - "type": "user", - "url": "https://framagit.org/nicofrand/xextension-togglablemenu", - "method": "git", - "directory": "." - }, { "name": "Auto Refresh", "author": "Essa AlAwadi", @@ -320,17 +309,6 @@ "method": "git", "directory": "." }, - { - "name": "Reading Time", - "author": "Lapineige", - "description": "Add a reading time estimation next to each article title", - "version": 1.5, - "entrypoint": "ReadingTime", - "type": "user", - "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", - "method": "git", - "directory": "." - }, { "name": "ReadingTime", "author": "Lapineige", @@ -419,17 +397,6 @@ "method": "git", "directory": "xExtension-ThemeModeSynchronizer" }, - { - "name": "ThreePanesView", - "author": "nicofrand", - "description": "Adds a third vertical pane along the articles list, to display the articles content.", - "version": 1.14, - "entrypoint": "ThreePanesView", - "type": "user", - "url": "https://framagit.org/nicofrand/xextension-threepanesview", - "method": "git", - "directory": "." - }, { "name": "TinyTinyRSS API", "author": "Marien Fressinaud", From e100f310582c1cd53f52eafe653dffd3595e54f9 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sat, 27 Jan 2024 11:16:12 +0000 Subject: [PATCH 07/72] Update extension list --- extensions.json | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/extensions.json b/extensions.json index 77e4ca7..ccf8ed2 100644 --- a/extensions.json +++ b/extensions.json @@ -1,6 +1,17 @@ { "version": 0.1, "extensions": [ + { + "name": "Always togglable menu", + "author": "nicofrand", + "description": "This makes the icon to toggle the menu always shown, even on larger screens.", + "version": 1.2, + "entrypoint": "TogglableMenu", + "type": "user", + "url": "https://framagit.org/nicofrand/xextension-togglablemenu", + "method": "git", + "directory": "." + }, { "name": "Auto Refresh", "author": "Essa AlAwadi", @@ -309,6 +320,17 @@ "method": "git", "directory": "." }, + { + "name": "Reading Time", + "author": "Lapineige", + "description": "Add a reading time estimation next to each article title", + "version": 1.5, + "entrypoint": "ReadingTime", + "type": "user", + "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", + "method": "git", + "directory": "." + }, { "name": "ReadingTime", "author": "Lapineige", @@ -397,6 +419,17 @@ "method": "git", "directory": "xExtension-ThemeModeSynchronizer" }, + { + "name": "ThreePanesView", + "author": "nicofrand", + "description": "Adds a third vertical pane along the articles list, to display the articles content.", + "version": 1.14, + "entrypoint": "ThreePanesView", + "type": "user", + "url": "https://framagit.org/nicofrand/xextension-threepanesview", + "method": "git", + "directory": "." + }, { "name": "TinyTinyRSS API", "author": "Marien Fressinaud", From 1cee81b90d44e32a3386651ec09391ddb5311609 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 27 Feb 2024 11:16:39 +0000 Subject: [PATCH 08/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index ccf8ed2..dcf3d9a 100644 --- a/extensions.json +++ b/extensions.json @@ -512,7 +512,7 @@ "name": "YouTubeChannel2RssFeed", "author": "CNTools | Clemens Neubauer", "description": "Transfer YouTube Channel URL into RSS Feed URL.", - "version": 0.4, + "version": 0.5, "entrypoint": "YouTubeChannel2RssFeed", "type": "user", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From 4e0155e5629d0e2108e462c2a7f168c944daed80 Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Thu, 29 Feb 2024 20:50:52 +0100 Subject: [PATCH 09/72] Image proxy extension: update to wsrv.nl and add German (#208) --- xExtension-ImageProxy/README.md | 4 ++-- xExtension-ImageProxy/extension.php | 2 +- xExtension-ImageProxy/i18n/de/ext.php | 12 ++++++++++++ xExtension-ImageProxy/i18n/en/ext.php | 4 +--- xExtension-ImageProxy/i18n/fr/ext.php | 4 +--- xExtension-ImageProxy/metadata.json | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 xExtension-ImageProxy/i18n/de/ext.php diff --git a/xExtension-ImageProxy/README.md b/xExtension-ImageProxy/README.md index f1fa3b0..6277b80 100644 --- a/xExtension-ImageProxy/README.md +++ b/xExtension-ImageProxy/README.md @@ -21,11 +21,11 @@ To use it, upload this entire directory to the FreshRSS `./extensions` directory ## Proxy Settings -By default this extension will use the [images.weserv.nl](https://images.weserv.nl) image caching and resizing proxy, but instead you can supply your own proxy URL in the settings. An example URL would look like ``https://images.example.com/?url=``. +By default this extension will use the [wsrv.nl](https://wsrv.nl) image caching and resizing proxy, but instead you can supply your own proxy URL in the settings. An example URL would look like ``https://images.example.com/?url=``. By ticking the `scheme_https` checkbox, you can also force the use of the proxy, even for images coming through an encrypted channel. This makes the server that hosts your FreshRSS instance the only point of entry for images, preventing your client from connecting directly to the RSS sources to recover them (which could be a privacy concern in extreme cases). -The source code for the images.weserv.nl proxy can be found at [github.com/andrieslouw/imagesweserv](https://github.com/andrieslouw/imagesweserv), but of course other methods are available. For example, in Apache you could [use `mod_rewrite` to set up a simple proxy](#apache-configuration) and similar methods are available in nginx and lighttpd. Alternatively you could use a simple PHP script, [along these lines](https://github.com/Alexxz/Simple-php-proxy-script). Keep in mind that too simple a proxy could introduce security risks, which is why the default proxy processes the images. +The source code for the wsrv.nl proxy can be found at [github.com/weserv/images](https://github.com/weserv/images), but of course other methods are available. For example, in Apache you could [use `mod_rewrite` to set up a simple proxy](#apache-configuration) and similar methods are available in nginx and lighttpd. Alternatively you could use a simple PHP script, [along these lines](https://github.com/Alexxz/Simple-php-proxy-script). Keep in mind that too simple a proxy could introduce security risks, which is why the default proxy processes the images. ### Apache configuration diff --git a/xExtension-ImageProxy/extension.php b/xExtension-ImageProxy/extension.php index f2c50b8..b5f1b4c 100644 --- a/xExtension-ImageProxy/extension.php +++ b/xExtension-ImageProxy/extension.php @@ -4,7 +4,7 @@ declare(strict_types=1); final class ImageProxyExtension extends Minz_Extension { // Defaults - private const PROXY_URL = 'https://images.weserv.nl/?url='; + private const PROXY_URL = 'https://wsrv.nl/?url='; private const SCHEME_HTTP = '1'; private const SCHEME_HTTPS = ''; private const SCHEME_DEFAULT = 'auto'; diff --git a/xExtension-ImageProxy/i18n/de/ext.php b/xExtension-ImageProxy/i18n/de/ext.php new file mode 100644 index 0000000..a3337bc --- /dev/null +++ b/xExtension-ImageProxy/i18n/de/ext.php @@ -0,0 +1,12 @@ + array( + 'proxy_url' => 'Proxy-URL', + 'scheme_http' => 'HTTP-Proxy', + 'scheme_https' => 'HTTPS-Proxy', + 'scheme_default' => 'Proxy unspezifiziert', + 'scheme_include' => 'http*:// in die URL einfügen', + 'url_encode' => 'URL-Prozentkodierung' + ), +); diff --git a/xExtension-ImageProxy/i18n/en/ext.php b/xExtension-ImageProxy/i18n/en/ext.php index 1b7b041..30720f7 100644 --- a/xExtension-ImageProxy/i18n/en/ext.php +++ b/xExtension-ImageProxy/i18n/en/ext.php @@ -7,8 +7,6 @@ return array( 'scheme_https' => 'Proxy HTTPS', 'scheme_default' => 'Proxy unspecified', 'scheme_include' => 'Include http*:// in URL', - 'url_encode' => 'Encode the URL', - 'true' => 'On', - 'false' => 'Off', + 'url_encode' => 'Encode the URL' ), ); diff --git a/xExtension-ImageProxy/i18n/fr/ext.php b/xExtension-ImageProxy/i18n/fr/ext.php index 9e7c879..67325e5 100644 --- a/xExtension-ImageProxy/i18n/fr/ext.php +++ b/xExtension-ImageProxy/i18n/fr/ext.php @@ -7,8 +7,6 @@ return array( 'scheme_https' => 'Proxy HTTPS', 'scheme_default' => 'Proxy indéterminé', 'scheme_include' => 'Inclure http*:// dans l\'URL', - 'url_encode' => 'Encoder l\'URL', - 'true' => 'Oui', - 'false' => 'Non', + 'url_encode' => 'Encoder l\'URL' ), ); diff --git a/xExtension-ImageProxy/metadata.json b/xExtension-ImageProxy/metadata.json index 687423e..621caa8 100644 --- a/xExtension-ImageProxy/metadata.json +++ b/xExtension-ImageProxy/metadata.json @@ -2,7 +2,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.6", + "version": "0.7", "entrypoint": "ImageProxy", "type": "user" } From 265fd0bb5c443915e6de00a7ff5e081ae26cca7f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 29 Feb 2024 21:51:47 +0100 Subject: [PATCH 10/72] Update ImageProxy (#201) Partial follow-up of https://github.com/FreshRSS/Extensions/pull/185#issuecomment-1826134164 Fix regression in typing for `getSrcSetUris`() --- xExtension-ImageProxy/configure.phtml | 12 ++-- xExtension-ImageProxy/extension.php | 82 +++++++++++++-------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/xExtension-ImageProxy/configure.phtml b/xExtension-ImageProxy/configure.phtml index c1aa7a7..0923d0a 100644 --- a/xExtension-ImageProxy/configure.phtml +++ b/xExtension-ImageProxy/configure.phtml @@ -7,26 +7,26 @@
- +
- image_proxy_scheme_http ? 'checked' : '' ?>> + image_proxy_scheme_http ? 'checked' : '' ?>>
- image_proxy_scheme_https ? 'checked' : '' ?>> + image_proxy_scheme_https ? 'checked' : '' ?>>
image_proxy_scheme_include ? 'checked' : '' ?>> + image_proxy_scheme_include ? 'checked' : '' ?>>
- image_proxy_url_encode ? 'checked' : '' ?>> + image_proxy_url_encode ? 'checked' : '' ?>>
diff --git a/xExtension-ImageProxy/extension.php b/xExtension-ImageProxy/extension.php index b5f1b4c..233bf5f 100644 --- a/xExtension-ImageProxy/extension.php +++ b/xExtension-ImageProxy/extension.php @@ -12,7 +12,7 @@ final class ImageProxyExtension extends Minz_Extension { private const URL_ENCODE = '1'; public function init(): void { - if (FreshRSS_Context::$system_conf === null) { + if (!FreshRSS_Context::hasSystemConf()) { throw new FreshRSS_Context_Exception('System configuration not initialised!'); } $this->registerHook( @@ -21,37 +21,37 @@ final class ImageProxyExtension extends Minz_Extension { ); // Defaults $save = false; - if (is_null(FreshRSS_Context::$user_conf->image_proxy_url)) { - FreshRSS_Context::$user_conf->image_proxy_url = self::PROXY_URL; + if (is_null(FreshRSS_Context::userConf()->image_proxy_url)) { + FreshRSS_Context::userConf()->image_proxy_url = self::PROXY_URL; $save = true; } - if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_http)) { - FreshRSS_Context::$user_conf->image_proxy_scheme_http = self::SCHEME_HTTP; + if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_http)) { + FreshRSS_Context::userConf()->image_proxy_scheme_http = self::SCHEME_HTTP; $save = true; } - if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_https)) { - FreshRSS_Context::$user_conf->image_proxy_scheme_https = self::SCHEME_HTTPS; + if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_https)) { + FreshRSS_Context::userConf()->image_proxy_scheme_https = self::SCHEME_HTTPS; // Legacy - if (!is_null(FreshRSS_Context::$user_conf->image_proxy_force)) { - FreshRSS_Context::$user_conf->image_proxy_scheme_https = FreshRSS_Context::$user_conf->image_proxy_force; - FreshRSS_Context::$user_conf->image_proxy_force = null; // Minz -> unset + if (!is_null(FreshRSS_Context::userConf()->image_proxy_force)) { + FreshRSS_Context::userConf()->image_proxy_scheme_https = FreshRSS_Context::userConf()->image_proxy_force; + FreshRSS_Context::userConf()->image_proxy_force = null; // Minz -> unset } $save = true; } - if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_default)) { - FreshRSS_Context::$user_conf->image_proxy_scheme_default = self::SCHEME_DEFAULT; + if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_default)) { + FreshRSS_Context::userConf()->image_proxy_scheme_default = self::SCHEME_DEFAULT; $save = true; } - if (is_null(FreshRSS_Context::$user_conf->image_proxy_scheme_include)) { - FreshRSS_Context::$user_conf->image_proxy_scheme_include = self::SCHEME_INCLUDE; + if (is_null(FreshRSS_Context::userConf()->image_proxy_scheme_include)) { + FreshRSS_Context::userConf()->image_proxy_scheme_include = self::SCHEME_INCLUDE; $save = true; } - if (is_null(FreshRSS_Context::$user_conf->image_proxy_url_encode)) { - FreshRSS_Context::$user_conf->image_proxy_url_encode = self::URL_ENCODE; + if (is_null(FreshRSS_Context::userConf()->image_proxy_url_encode)) { + FreshRSS_Context::userConf()->image_proxy_url_encode = self::URL_ENCODE; $save = true; } if ($save) { - FreshRSS_Context::$user_conf->save(); + FreshRSS_Context::userConf()->save(); } } @@ -59,13 +59,13 @@ final class ImageProxyExtension extends Minz_Extension { $this->registerTranslates(); if (Minz_Request::isPost()) { - FreshRSS_Context::$user_conf->image_proxy_url = Minz_Request::paramString('image_proxy_url', true) ?: self::PROXY_URL; - FreshRSS_Context::$user_conf->image_proxy_scheme_http = Minz_Request::paramString('image_proxy_scheme_http'); - FreshRSS_Context::$user_conf->image_proxy_scheme_https = Minz_Request::paramString('image_proxy_scheme_https'); - FreshRSS_Context::$user_conf->image_proxy_scheme_default = Minz_Request::paramString('image_proxy_scheme_default') ?: self::SCHEME_DEFAULT; - FreshRSS_Context::$user_conf->image_proxy_scheme_include = Minz_Request::paramString('image_proxy_scheme_include'); - FreshRSS_Context::$user_conf->image_proxy_url_encode = Minz_Request::paramString('image_proxy_url_encode'); - FreshRSS_Context::$user_conf->save(); + FreshRSS_Context::userConf()->image_proxy_url = Minz_Request::paramString('image_proxy_url', true) ?: self::PROXY_URL; + FreshRSS_Context::userConf()->image_proxy_scheme_http = Minz_Request::paramString('image_proxy_scheme_http'); + FreshRSS_Context::userConf()->image_proxy_scheme_https = Minz_Request::paramString('image_proxy_scheme_https'); + FreshRSS_Context::userConf()->image_proxy_scheme_default = Minz_Request::paramString('image_proxy_scheme_default') ?: self::SCHEME_DEFAULT; + FreshRSS_Context::userConf()->image_proxy_scheme_include = Minz_Request::paramString('image_proxy_scheme_include'); + FreshRSS_Context::userConf()->image_proxy_url_encode = Minz_Request::paramString('image_proxy_url_encode'); + FreshRSS_Context::userConf()->save(); } } @@ -73,27 +73,27 @@ final class ImageProxyExtension extends Minz_Extension { $parsed_url = parse_url($url); $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] : null; if ($scheme === 'http') { - if (!FreshRSS_Context::$user_conf->image_proxy_scheme_http) { + if (!FreshRSS_Context::userConf()->image_proxy_scheme_http) { return $url; } - if (!FreshRSS_Context::$user_conf->image_proxy_scheme_include) { + if (!FreshRSS_Context::userConf()->image_proxy_scheme_include) { $url = substr($url, 7); // http:// } } elseif ($scheme === 'https') { - if (!FreshRSS_Context::$user_conf->image_proxy_scheme_https) { + if (!FreshRSS_Context::userConf()->image_proxy_scheme_https) { return $url; } - if (!FreshRSS_Context::$user_conf->image_proxy_scheme_include) { + if (!FreshRSS_Context::userConf()->image_proxy_scheme_include) { $url = substr($url, 8); // https:// } } elseif (empty($scheme)) { - if (FreshRSS_Context::$user_conf->image_proxy_scheme_default === 'auto') { - if (FreshRSS_Context::$user_conf->image_proxy_scheme_include) { + if (FreshRSS_Context::userConf()->image_proxy_scheme_default === 'auto') { + if (FreshRSS_Context::userConf()->image_proxy_scheme_include) { $url = ((!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') ? 'https:' : 'http:') . $url; } - } elseif (substr(FreshRSS_Context::$user_conf->image_proxy_scheme_default, 0, 4) === 'http') { - if (FreshRSS_Context::$user_conf->image_proxy_scheme_include) { - $url = FreshRSS_Context::$user_conf->image_proxy_scheme_default . ':' . $url; + } elseif (substr(FreshRSS_Context::userConf()->image_proxy_scheme_default, 0, 4) === 'http') { + if (FreshRSS_Context::userConf()->image_proxy_scheme_include) { + $url = FreshRSS_Context::userConf()->image_proxy_scheme_default . ':' . $url; } } else { // do not proxy unschemed ("//path/...") URLs return $url; @@ -101,19 +101,17 @@ final class ImageProxyExtension extends Minz_Extension { } else { // unknown/unsupported (non-http) scheme return $url; } - if (FreshRSS_Context::$user_conf->image_proxy_url_encode) { + if (FreshRSS_Context::userConf()->image_proxy_url_encode) { $url = rawurlencode($url); } - return FreshRSS_Context::$user_conf->image_proxy_url . $url; + return FreshRSS_Context::userConf()->image_proxy_url . $url; } /** * @param array $matches - * @return array */ - public static function getSrcSetUris(array $matches): array { - $result = str_replace($matches[1], self::getProxyImageUri($matches[1]), $matches[0]); - return is_array($result) ? $result : [$result]; + public static function getSrcSetUris(array $matches): string { + return str_replace($matches[1], self::getProxyImageUri($matches[1]), $matches[0]); } public static function swapUris(string $content): string { @@ -131,8 +129,10 @@ final class ImageProxyExtension extends Minz_Extension { $img->setAttribute('src', $newSrc); } if ($img->hasAttribute('srcset')) { - $newSrcSet = preg_replace_callback('/(?:([^\s,]+)(\s*(?:\s+\d+[wx])(?:,\s*)?))/', fn($matches) => self::getSrcSetUris($matches), $img->getAttribute('srcset')); - $img->setAttribute('srcset', $newSrcSet); + $newSrcSet = preg_replace_callback('/(?:([^\s,]+)(\s*(?:\s+\d+[wx])(?:,\s*)?))/', fn (array $matches) => self::getSrcSetUris($matches), $img->getAttribute('srcset')); + if ($newSrcSet != null) { + $img->setAttribute('srcset', $newSrcSet); + } } } From f337a0782dd1af4838b2cc42db388c17c9063245 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 1 Mar 2024 11:17:36 +0000 Subject: [PATCH 11/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index dcf3d9a..17154c3 100644 --- a/extensions.json +++ b/extensions.json @@ -203,7 +203,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.6", + "version": "0.7", "entrypoint": "ImageProxy", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From c43552907821194541d12abfeacb6f69e96465f7 Mon Sep 17 00:00:00 2001 From: PsyCh0Taz <45539034+PsyCh0Taz@users.noreply.github.com> Date: Sun, 3 Mar 2024 22:31:16 +0100 Subject: [PATCH 12/72] Fix access rights for CustomCSS + CustomJS (#207) * Update configure.phtml FR : Correction de la gestion des droits. EN :Rights testing correction * Update xExtension-CustomJS/configure.phtml Rights testing correction Co-authored-by: Alexandre Alapetite * Update configure.phtml Postponement of the same update as CustomJS * Bump versions --------- Co-authored-by: Alexandre Alapetite --- extensions.json | 4 ++-- xExtension-CustomCSS/configure.phtml | 2 +- xExtension-CustomCSS/metadata.json | 2 +- xExtension-CustomJS/configure.phtml | 2 +- xExtension-CustomJS/metadata.json | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions.json b/extensions.json index 17154c3..cf8f1b2 100644 --- a/extensions.json +++ b/extensions.json @@ -93,7 +93,7 @@ "name": "Custom CSS", "author": "Marien Fressinaud", "description": "Give possibility to overwrite the CSS with a user-specific rules.", - "version": "0.4", + "version": "0.5", "entrypoint": "CustomCSS", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -104,7 +104,7 @@ "name": "Custom JS", "author": "Frans de Jonge", "description": "Apply custom JS.", - "version": "0.4", + "version": "0.5", "entrypoint": "CustomJS", "type": "user", "url": "https://github.com/FreshRSS/Extensions", diff --git a/xExtension-CustomCSS/configure.phtml b/xExtension-CustomCSS/configure.phtml index f3ccc73..7f828f2 100644 --- a/xExtension-CustomCSS/configure.phtml +++ b/xExtension-CustomCSS/configure.phtml @@ -12,7 +12,7 @@
- permission_problem)) { ?> + permission_problem !== '') { ?>

permission_problem) ?>

diff --git a/xExtension-CustomCSS/metadata.json b/xExtension-CustomCSS/metadata.json index a4ccfc7..b4a45be 100644 --- a/xExtension-CustomCSS/metadata.json +++ b/xExtension-CustomCSS/metadata.json @@ -2,7 +2,7 @@ "name": "Custom CSS", "author": "Marien Fressinaud", "description": "Give possibility to overwrite the CSS with a user-specific rules.", - "version": "0.4", + "version": "0.5", "entrypoint": "CustomCSS", "type": "user" } diff --git a/xExtension-CustomJS/configure.phtml b/xExtension-CustomJS/configure.phtml index 1f065bb..83a034b 100644 --- a/xExtension-CustomJS/configure.phtml +++ b/xExtension-CustomJS/configure.phtml @@ -12,7 +12,7 @@
- permission_problem)) { ?> + permission_problem !== '') { ?>

permission_problem) ?>

diff --git a/xExtension-CustomJS/metadata.json b/xExtension-CustomJS/metadata.json index 614e3a5..594cec5 100644 --- a/xExtension-CustomJS/metadata.json +++ b/xExtension-CustomJS/metadata.json @@ -2,7 +2,7 @@ "name": "Custom JS", "author": "Frans de Jonge", "description": "Apply custom JS.", - "version": "0.4", + "version": "0.5", "entrypoint": "CustomJS", "type": "user" } From 189406e1603b63d60423c0f68798122215ce17cf Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 4 Mar 2024 12:01:50 +0000 Subject: [PATCH 13/72] Update extension list --- extensions.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/extensions.json b/extensions.json index cf8f1b2..e18eaeb 100644 --- a/extensions.json +++ b/extensions.json @@ -155,6 +155,17 @@ "method": "git", "directory": "xExtension-FeedTitleBuilder" }, + { + "name": "FilterTitle", + "author": "CNTools | Clemens Neubauer", + "description": "Get rid of some noise feed entries by filter keywords in title", + "version": "0.1-alpha", + "entrypoint": "FilterTitle", + "type": "system", + "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", + "method": "git", + "directory": "xExtension-FilterTitle" + }, { "name": "Fixed Nav Menu", "author": "Marco Heizmann", @@ -353,6 +364,17 @@ "method": "git", "directory": "." }, + { + "name": "Remove emojis", + "author": "CNTools | Clemens Neubauer", + "description": "remove emojis in the title of newly added feed entries", + "version": "0.1-dev", + "entrypoint": "RemoveEmojis", + "type": "user", + "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", + "method": "git", + "directory": "xExtension-RemoveEmojis" + }, { "name": "Share By Email", "author": "Marien Fressinaud", From 7bfab1c384ae5899f432218db3246b1246328122 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Mon, 4 Mar 2024 21:55:20 +0100 Subject: [PATCH 14/72] ImageProxy: avoid oversight of wrapping an entire HTML document around image (#212) In reply to . With special thanks to this comment: --- xExtension-ImageProxy/extension.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xExtension-ImageProxy/extension.php b/xExtension-ImageProxy/extension.php index 233bf5f..8ef62db 100644 --- a/xExtension-ImageProxy/extension.php +++ b/xExtension-ImageProxy/extension.php @@ -121,7 +121,7 @@ final class ImageProxyExtension extends Minz_Extension { $doc = new DOMDocument(); libxml_use_internal_errors(true); // prevent tag soup errors from showing - $doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8')); + $doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $imgs = $doc->getElementsByTagName('img'); foreach ($imgs as $img) { if ($img->hasAttribute('src')) { From 9222f08e75f7f9532b55d224ab3fd2c79d9e603d Mon Sep 17 00:00:00 2001 From: Clemens Neubauer Date: Tue, 5 Mar 2024 00:20:18 +0100 Subject: [PATCH 15/72] Update README.md (#213) --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 19c93fa..6f74133 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,11 @@ There are some FreshRSS extensions out there, developed by community members: ### By [@CN-Tools](https://github.com/cn-tools) -* [YouTube Channel 2 RSSFeed](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-YouTubeChannel2RssFeed): You can add a YouTube Channel URL and will get it as RSSFeed -* [Feed Title Builder](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-FeedTitleBuilder): Build your own feed title based on url, the original feed title and the date the feed was added * [Copy 2 Clipboard](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-Copy2Clipboard): Add a button in the navigation bar to copy the destination links of all visible entries into clipboard +* [Feed Title Builder](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-FeedTitleBuilder): Build your own feed title based on url, the original feed title and the date the feed was added +* [FilterTitle](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-FilterTitle): Filter out feed entries by keywords parsed by the feed entry title +* [RemoveEmojis](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-RemoveEmojis): Remove emojis in the title of newly added feed entries. +* [YouTube Channel 2 RSSFeed](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-YouTubeChannel2RssFeed): You can add a YouTube Channel URL and will get it as RSSFeed ### By [@DevonHess](https://github.com/DevonHess) From 5fe5f54243cc15d1e12d2889f34804fba1e93324 Mon Sep 17 00:00:00 2001 From: Clemens Neubauer Date: Tue, 5 Mar 2024 08:53:53 +0100 Subject: [PATCH 16/72] version must be a string that php function version_compare work right (#214) ref: https://github.com/FreshRSS/FreshRSS/pull/6155 --- generate.php | 1 + 1 file changed, 1 insertion(+) diff --git a/generate.php b/generate.php index 45819a3..1891044 100755 --- a/generate.php +++ b/generate.php @@ -53,6 +53,7 @@ foreach ($gitRepositories as $key => $gitRepository) { } $directory = basename(dirname($metadataFile)); $metadata['url'] = $gitRepository; + $metadata['version'] = strval($metadata['version']); $metadata['method'] = TYPE_GIT; $metadata['directory'] = ($directory === sha1($gitRepository)) ? '.' : $directory; $extensions[] = $metadata; From b4afee6d0e1d8fb8daa6ac6c324721db68203ba6 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 5 Mar 2024 07:54:52 +0000 Subject: [PATCH 17/72] Update extension list --- extensions.json | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/extensions.json b/extensions.json index e18eaeb..db4fade 100644 --- a/extensions.json +++ b/extensions.json @@ -5,7 +5,7 @@ "name": "Always togglable menu", "author": "nicofrand", "description": "This makes the icon to toggle the menu always shown, even on larger screens.", - "version": 1.2, + "version": "1.2", "entrypoint": "TogglableMenu", "type": "user", "url": "https://framagit.org/nicofrand/xextension-togglablemenu", @@ -16,7 +16,7 @@ "name": "Auto Refresh", "author": "Essa AlAwadi", "description": "Automatically refreshes the RSS feed when there is no activity", - "version": 1.3, + "version": "1.3", "entrypoint": "AutoRefresh", "type": "user", "url": "https://github.com/Eisa01/FreshRSS---Auto-Refresh-Extension", @@ -49,7 +49,7 @@ "name": "Clickable Links", "author": "Kapdap", "description": "Replaces non-clickable plain text URLs found in articles with clickable HTML links.", - "version": 1.01, + "version": "1.01", "entrypoint": "ClickableLink", "type": "user", "url": "https://github.com/kapdap/freshrss-extensions", @@ -60,7 +60,7 @@ "name": "Colorful List", "author": "Claud Xiao", "description": "Colorful Entry Title based on RSS source", - "version": 0.3, + "version": "0.3", "entrypoint": "ColorfulList", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -82,7 +82,7 @@ "name": "Copy2Clipboard", "author": "CNTools | Clemens Neubauer", "description": "Copy the destination links of all visible entries into clipboard", - "version": 0.4, + "version": "0.4", "entrypoint": "Copy2Clipboard", "type": "user", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", @@ -148,7 +148,7 @@ "name": "FeedTitleBuilder", "author": "CNTools | Clemens Neubauer", "description": "Build your own feed title based on url, the original feed title and the date the feed was added", - "version": 0.2, + "version": "0.2", "entrypoint": "FeedTitleBuilder", "type": "user", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", @@ -170,7 +170,7 @@ "name": "Fixed Nav Menu", "author": "Marco Heizmann", "description": "Sets the position of the navigation menu to fixed when scrolling down.", - "version": 0.1, + "version": "0.1", "entrypoint": "FixedNavMenu", "type": "user", "url": "https://github.com/oyox/FreshRSS-extensions", @@ -181,7 +181,7 @@ "name": "FreshRss FlareSolverr", "author": "James Ravenscroft", "description": "Use a Flaresolverr instance to bypass cloudflare security checks", - "version": 0.1, + "version": "0.1", "entrypoint": "FlareSolverr", "type": "system", "url": "https://github.com/ravenscroftj/freshrss-flaresolverr-extension", @@ -192,7 +192,7 @@ "name": "GReader Redate", "author": "Julien Avérous", "description": "Use published date instead of fetching date.", - "version": 1.3, + "version": "1.3", "entrypoint": "GReaderRedate", "type": "user", "url": "https://github.com/javerous/freshrss-greader-redate", @@ -203,7 +203,7 @@ "name": "Image Cache", "author": "Victrid", "description": "Cache feed images on your own facility or Cloudflare cache.", - "version": 0.3, + "version": "0.3", "entrypoint": "ImageCache", "type": "user", "url": "https://github.com/Victrid/freshrss-image-cache-plugin", @@ -225,7 +225,7 @@ "name": "Invidious Video Feed", "author": "Korbak (forked from Kevin Papst)", "description": "Embed YouTube feeds inside article content, but with Invidious.", - "version": 1.1, + "version": "1.1", "entrypoint": "Invidious", "type": "system", "url": "https://github.com/Korbak/freshrss-invidious", @@ -236,7 +236,7 @@ "name": "Kagi Summarizer", "author": "Rudis Muiznieks", "description": "Add buttons to summarize articles with the Kagi Universal Summarizer.", - "version": 0.2, + "version": "0.2", "entrypoint": "KagiSummarizer", "type": "user", "url": "https://code.sitosis.com/rudism/freshrss-kagi-summarizer", @@ -247,7 +247,7 @@ "name": "Keep Folder State", "author": "Marco Heizmann", "description": "Stores the state of the folders locally and expand them automatically if necessary.", - "version": 0.1, + "version": "0.1", "entrypoint": "KeepFolderState", "type": "user", "url": "https://github.com/oyox/FreshRSS-extensions", @@ -269,7 +269,7 @@ "name": "Mobile Scroll Menu", "author": "Marco Heizmann", "description": "Automatically hides the header menu on mobile phones, when scrolling down and shows it when scrolling up.", - "version": 0.2, + "version": "0.2", "entrypoint": "MobileScrollMenu", "type": "user", "url": "https://github.com/oyox/FreshRSS-extensions", @@ -280,7 +280,7 @@ "name": "News Assistant", "author": "Mervyn Zhan", "description": "Use the api of `OpenAI` to summary the news.", - "version": 0.1, + "version": "0.1", "entrypoint": "NewsAssistant", "type": "system", "url": "https://github.com/reply2future/xExtension-NewsAssistant", @@ -291,7 +291,7 @@ "name": "Pocket Button", "author": "Christian Putzke", "description": "Add articles to Pocket with one simple button click or a keyboard shortcut.", - "version": 0.4, + "version": "0.4", "entrypoint": "PocketButton", "type": "user", "url": "https://github.com/christian-putzke/freshrss-pocket-button", @@ -313,7 +313,7 @@ "name": "RSS-Bridge", "author": "Devon Hess", "description": "Run URLs through RSS-Bridge detection.", - "version": 1.1, + "version": "1.1", "entrypoint": "RssBridge", "type": "system", "url": "https://github.com/DevonHess/FreshRSS-Extensions", @@ -335,7 +335,7 @@ "name": "Reading Time", "author": "Lapineige", "description": "Add a reading time estimation next to each article title", - "version": 1.5, + "version": "1.5", "entrypoint": "ReadingTime", "type": "user", "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", @@ -401,7 +401,7 @@ "name": "Smart Mobile Menu", "author": "Marco Heizmann", "description": "Minimizes the required button space and groups buttons.", - "version": 0.1, + "version": "0.1", "entrypoint": "SmartMobileMenu", "type": "user", "url": "https://github.com/oyox/FreshRSS-extensions", @@ -423,7 +423,7 @@ "name": "Teem Video Feed", "author": "Kevin Papst", "description": "Embed video from JOINTHETEEM inside article content.", - "version": 0.1, + "version": "0.1", "entrypoint": "Teem", "type": "system", "url": "https://github.com/kevinpapst/freshrss-teem", @@ -445,7 +445,7 @@ "name": "ThreePanesView", "author": "nicofrand", "description": "Adds a third vertical pane along the articles list, to display the articles content.", - "version": 1.14, + "version": "1.14", "entrypoint": "ThreePanesView", "type": "user", "url": "https://framagit.org/nicofrand/xextension-threepanesview", @@ -478,7 +478,7 @@ "name": "Touch Control", "author": "Marco Heizmann", "description": "Add touch gestures to FreshRSS.", - "version": 0.2, + "version": "0.2", "entrypoint": "TouchControl", "type": "user", "url": "https://github.com/oyox/FreshRSS-extensions", @@ -501,7 +501,7 @@ "name": "TwitchChannel2RssFeed", "author": "Babico", "description": "Transfer Twitch Channel URL into RSS Feed URL.", - "version": 0.2, + "version": "0.2", "entrypoint": "TwitchChannel2RssFeed", "type": "user", "url": "https://github.com/babico/xExtension-TwitchChannel2RssFeed", @@ -523,7 +523,7 @@ "name": "YouTube/PeerTube Video Feed", "author": "Kevin Papst", "description": "Embed YouTube/PeerTube feeds inside article content.", - "version": 0.1, + "version": "0.1", "entrypoint": "YouTube", "type": "user", "url": "https://github.com/kevinpapst/freshrss-youtube", @@ -534,7 +534,7 @@ "name": "YouTubeChannel2RssFeed", "author": "CNTools | Clemens Neubauer", "description": "Transfer YouTube Channel URL into RSS Feed URL.", - "version": 0.5, + "version": "0.5", "entrypoint": "YouTubeChannel2RssFeed", "type": "user", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From 9edeb758664ee154bda228a7706a4825d999b400 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Wed, 6 Mar 2024 10:06:35 +0100 Subject: [PATCH 18/72] ImageProxy: better DOMDocument HTML handling (#215) * ImageProxy: better DOMDocument HTML handling With the method in #212 undesired transformations could sometimes be effected. * Update xExtension-ImageProxy/extension.php Co-authored-by: Alexandre Alapetite * Bump version to 0.7.1 --------- Co-authored-by: Alexandre Alapetite --- xExtension-ImageProxy/extension.php | 10 ++++++++-- xExtension-ImageProxy/metadata.json | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/xExtension-ImageProxy/extension.php b/xExtension-ImageProxy/extension.php index 8ef62db..1dd1494 100644 --- a/xExtension-ImageProxy/extension.php +++ b/xExtension-ImageProxy/extension.php @@ -121,7 +121,7 @@ final class ImageProxyExtension extends Minz_Extension { $doc = new DOMDocument(); libxml_use_internal_errors(true); // prevent tag soup errors from showing - $doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + $doc->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8')); $imgs = $doc->getElementsByTagName('img'); foreach ($imgs as $img) { if ($img->hasAttribute('src')) { @@ -136,7 +136,13 @@ final class ImageProxyExtension extends Minz_Extension { } } - return $doc->saveHTML() ?: ''; + $body = $doc->getElementsByTagName('body')->item(0); + + $output = $doc->saveHTML($body); + + $output = preg_replace('/^|<\/body>$/', '', $output); + + return $output; } public static function setImageProxyHook(FreshRSS_Entry $entry): FreshRSS_Entry { diff --git a/xExtension-ImageProxy/metadata.json b/xExtension-ImageProxy/metadata.json index 621caa8..dfd761b 100644 --- a/xExtension-ImageProxy/metadata.json +++ b/xExtension-ImageProxy/metadata.json @@ -2,7 +2,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.7", + "version": "0.7.1", "entrypoint": "ImageProxy", "type": "user" } From dc196aab2a65444a9d12f2145f04a07bdf266408 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Wed, 6 Mar 2024 11:18:00 +0000 Subject: [PATCH 19/72] Update extension list --- extensions.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions.json b/extensions.json index db4fade..b630497 100644 --- a/extensions.json +++ b/extensions.json @@ -38,7 +38,7 @@ "name": "Black List", "author": "CNTools | Clemens Neubauer", "description": "Blacklist to block feeds for users", - "version": "0.1-alpha", + "version": "0.0.1", "entrypoint": "BlackList", "type": "system", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", @@ -159,7 +159,7 @@ "name": "FilterTitle", "author": "CNTools | Clemens Neubauer", "description": "Get rid of some noise feed entries by filter keywords in title", - "version": "0.1-alpha", + "version": "0.0.1", "entrypoint": "FilterTitle", "type": "system", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", @@ -214,7 +214,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.7", + "version": "0.7.1", "entrypoint": "ImageProxy", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From 8d3e6e5cbd7293dc3352faf47f39e3aacc5a29ec Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 7 Mar 2024 11:17:37 +0000 Subject: [PATCH 20/72] Update extension list --- extensions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions.json b/extensions.json index b630497..9b342b5 100644 --- a/extensions.json +++ b/extensions.json @@ -158,8 +158,8 @@ { "name": "FilterTitle", "author": "CNTools | Clemens Neubauer", - "description": "Get rid of some noise feed entries by filter keywords in title", - "version": "0.0.1", + "description": "Filter feed entries by filter keywords in title", + "version": "0.0.2", "entrypoint": "FilterTitle", "type": "system", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From 3ba989782b0dcc0fc9addac34a2b3d77aaf17293 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sat, 9 Mar 2024 11:19:18 +0000 Subject: [PATCH 21/72] Update extension list --- extensions.json | 35 +---------------------------------- 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/extensions.json b/extensions.json index 9b342b5..e7f67cf 100644 --- a/extensions.json +++ b/extensions.json @@ -1,17 +1,6 @@ { "version": 0.1, "extensions": [ - { - "name": "Always togglable menu", - "author": "nicofrand", - "description": "This makes the icon to toggle the menu always shown, even on larger screens.", - "version": "1.2", - "entrypoint": "TogglableMenu", - "type": "user", - "url": "https://framagit.org/nicofrand/xextension-togglablemenu", - "method": "git", - "directory": "." - }, { "name": "Auto Refresh", "author": "Essa AlAwadi", @@ -27,7 +16,7 @@ "name": "AutoTTL", "author": "Magnus Kokk", "description": "A FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries.", - "version": "0.4.1", + "version": "0.5.2", "entrypoint": "AutoTTL", "type": "user", "url": "https://github.com/mgnsk/FreshRSS-AutoTTL", @@ -331,17 +320,6 @@ "method": "git", "directory": "." }, - { - "name": "Reading Time", - "author": "Lapineige", - "description": "Add a reading time estimation next to each article title", - "version": "1.5", - "entrypoint": "ReadingTime", - "type": "user", - "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", - "method": "git", - "directory": "." - }, { "name": "ReadingTime", "author": "Lapineige", @@ -441,17 +419,6 @@ "method": "git", "directory": "xExtension-ThemeModeSynchronizer" }, - { - "name": "ThreePanesView", - "author": "nicofrand", - "description": "Adds a third vertical pane along the articles list, to display the articles content.", - "version": "1.14", - "entrypoint": "ThreePanesView", - "type": "user", - "url": "https://framagit.org/nicofrand/xextension-threepanesview", - "method": "git", - "directory": "." - }, { "name": "TinyTinyRSS API", "author": "Marien Fressinaud", From 7b12cc3f165c17a331ac4cbb80cb2eaafa4aa84c Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sun, 10 Mar 2024 11:16:54 +0000 Subject: [PATCH 22/72] Update extension list --- extensions.json | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/extensions.json b/extensions.json index e7f67cf..5b5abdb 100644 --- a/extensions.json +++ b/extensions.json @@ -1,6 +1,17 @@ { "version": 0.1, "extensions": [ + { + "name": "Always togglable menu", + "author": "nicofrand", + "description": "This makes the icon to toggle the menu always shown, even on larger screens.", + "version": "1.2", + "entrypoint": "TogglableMenu", + "type": "user", + "url": "https://framagit.org/nicofrand/xextension-togglablemenu", + "method": "git", + "directory": "." + }, { "name": "Auto Refresh", "author": "Essa AlAwadi", @@ -320,6 +331,17 @@ "method": "git", "directory": "." }, + { + "name": "Reading Time", + "author": "Lapineige", + "description": "Add a reading time estimation next to each article title", + "version": "1.5", + "entrypoint": "ReadingTime", + "type": "user", + "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", + "method": "git", + "directory": "." + }, { "name": "ReadingTime", "author": "Lapineige", @@ -419,6 +441,17 @@ "method": "git", "directory": "xExtension-ThemeModeSynchronizer" }, + { + "name": "ThreePanesView", + "author": "nicofrand", + "description": "Adds a third vertical pane along the articles list, to display the articles content.", + "version": "1.14", + "entrypoint": "ThreePanesView", + "type": "user", + "url": "https://framagit.org/nicofrand/xextension-threepanesview", + "method": "git", + "directory": "." + }, { "name": "TinyTinyRSS API", "author": "Marien Fressinaud", From 709893e7c216601a9ec35f9c6b9d215fd3a6d77f Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 12 Mar 2024 11:17:34 +0000 Subject: [PATCH 23/72] Update extension list --- extensions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions.json b/extensions.json index 5b5abdb..cbd1508 100644 --- a/extensions.json +++ b/extensions.json @@ -27,7 +27,7 @@ "name": "AutoTTL", "author": "Magnus Kokk", "description": "A FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries.", - "version": "0.5.2", + "version": "0.5.5", "entrypoint": "AutoTTL", "type": "user", "url": "https://github.com/mgnsk/FreshRSS-AutoTTL", @@ -159,7 +159,7 @@ "name": "FilterTitle", "author": "CNTools | Clemens Neubauer", "description": "Filter feed entries by filter keywords in title", - "version": "0.0.2", + "version": "0.0.3", "entrypoint": "FilterTitle", "type": "system", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From dc3fbfb05ea4de32b2e5d1ffd95494c6ea226297 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 14 Mar 2024 01:31:44 +0100 Subject: [PATCH 24/72] Fix GitHub Actions npm cache (#218) --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index cfc5717..7418494 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -65,7 +65,7 @@ jobs: # https://nodejs.org/en/about/releases/ node-version: '18' cache: 'npm' - cache-dependency-path: 'Extensions/composer.lock' + cache-dependency-path: 'Extensions/package-lock.json' - run: npm ci From 220b8adff1db52a7caeb1fb1a78e338fca68210f Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 14 Mar 2024 23:02:58 +0100 Subject: [PATCH 25/72] Fix deprecated GitHub Actions (#220) fix https://github.com/FreshRSS/Extensions/issues/219 https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ --- .github/workflows/generate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index 3f70d3e..ef34e30 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -27,7 +27,7 @@ jobs: id: diff run: | DIFF=$(git diff --numstat -- $FILE | wc -l) - echo "::set-output name=DIFF::$DIFF" + echo "DIFF=$DIFF" >> $GITHUB_OUTPUT - name: Commit changes run: | From 109246223fcc19143807aab31c82292cddeb3747 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 14 Mar 2024 22:04:20 +0000 Subject: [PATCH 26/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index cbd1508..090d220 100644 --- a/extensions.json +++ b/extensions.json @@ -71,7 +71,7 @@ "name": "Comics in feed", "author": "José Moreira", "description": "Embed the images from comics feeds directly.", - "version": "1.1.0", + "version": "1.4.0", "entrypoint": "ComicsInFeed", "type": "system", "url": "https://github.com/giventofly/freshrss-comicsinfeed", From 5bd68a10e8ba1e1896439449fdd50b830c5ed1f1 Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Sun, 17 Mar 2024 20:11:24 +0100 Subject: [PATCH 27/72] Fix for FreshRSS 1.23.2-dev (#221) --- xExtension-TitleWrap/metadata.json | 2 +- xExtension-TitleWrap/static/title_wrap.css | 9 ++++----- xExtension-TitleWrap/static/title_wrap.rtl.css | 9 ++++----- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/xExtension-TitleWrap/metadata.json b/xExtension-TitleWrap/metadata.json index b3fe2c1..ec77917 100644 --- a/xExtension-TitleWrap/metadata.json +++ b/xExtension-TitleWrap/metadata.json @@ -2,7 +2,7 @@ "name": "Title-Wrap", "author": "₣rans de Jonge, Joris Kinable", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", - "version": "0.2", + "version": "0.2.1", "entrypoint": "TitleWrap", "type": "user" } diff --git a/xExtension-TitleWrap/static/title_wrap.css b/xExtension-TitleWrap/static/title_wrap.css index a25892a..3bce8fb 100644 --- a/xExtension-TitleWrap/static/title_wrap.css +++ b/xExtension-TitleWrap/static/title_wrap.css @@ -6,21 +6,20 @@ display: table; } -.flux .item { +.flux .flux_header .item { flex-shrink: 0; line-height: normal; - padding: .3em 0; } -.flux .item > a { +.flux .flux_header .item > a { white-space: normal; } -.flux:not(.current):hover .item.title { +.flux:not(.current):hover .flux_header .item.title { position: relative; max-width: inherit; } -.flux_header .title { +.flux .flux_header .title { flex: auto; } diff --git a/xExtension-TitleWrap/static/title_wrap.rtl.css b/xExtension-TitleWrap/static/title_wrap.rtl.css index a25892a..3bce8fb 100644 --- a/xExtension-TitleWrap/static/title_wrap.rtl.css +++ b/xExtension-TitleWrap/static/title_wrap.rtl.css @@ -6,21 +6,20 @@ display: table; } -.flux .item { +.flux .flux_header .item { flex-shrink: 0; line-height: normal; - padding: .3em 0; } -.flux .item > a { +.flux .flux_header .item > a { white-space: normal; } -.flux:not(.current):hover .item.title { +.flux:not(.current):hover .flux_header .item.title { position: relative; max-width: inherit; } -.flux_header .title { +.flux .flux_header .title { flex: auto; } From b0aa99811cfdae5d2a4cdd5fff1246a5f3d2e806 Mon Sep 17 00:00:00 2001 From: kalvn Date: Sun, 17 Mar 2024 20:14:20 +0100 Subject: [PATCH 28/72] Mark previous as read (#205) * Add new extension: Mark Previous as Read * fix typo --- README.md | 4 ++++ repositories.json | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6f74133..29164ac 100644 --- a/README.md +++ b/README.md @@ -121,3 +121,7 @@ There are some FreshRSS extensions out there, developed by community members: ### By [@jacob2826](https://github.com/jacob2826) * [TranslateTitlesCN](https://github.com/jacob2826/FreshRSS-TranslateTitlesCN): Translate article titles of the specified feed into Chinese, using [DeepLX](https://github.com/OwO-Network/DeepLX) or Google Translate. + +### By [@kalvn](https://github.com/kalvn) + +* [Mark Previous as Read](https://github.com/kalvn/freshrss-mark-previous-as-read): Adds a button in the footer of each entry. Clicking this button will mark all previous entries belonging to the current feed, as read. diff --git a/repositories.json b/repositories.json index d8b2759..0a158c6 100644 --- a/repositories.json +++ b/repositories.json @@ -82,12 +82,13 @@ }, { "url": "https://github.com/reply2future/xExtension-NewsAssistant", "type": "git" -}, -{ +}, { "url": "https://github.com/giventofly/freshrss-comicsinfeed", "type": "git" -}, -{ +}, { "url": "https://code.sitosis.com/rudism/freshrss-kagi-summarizer", "type": "git" +}, { + "url": "https://github.com/kalvn/freshrss-mark-previous-as-read", + "type": "git" }] From 558be69744287f1dea0e4eb4d92e4e6e23addd08 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sun, 17 Mar 2024 19:17:37 +0000 Subject: [PATCH 29/72] Update extension list --- extensions.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 090d220..ab10cdd 100644 --- a/extensions.json +++ b/extensions.json @@ -265,6 +265,17 @@ "method": "git", "directory": "." }, + { + "name": "Mark Previous as Read", + "author": "kalvn", + "description": "This extension adds a button in the footer of each entry. Clicking this button will mark all previous entries belonging to the current feed, as read. The goal is, when going through a very long list of entries without reading them all, to be able to stop and continue later.", + "version": "1.0.1", + "entrypoint": "MarkPreviousAsRead", + "type": "user", + "url": "https://github.com/kalvn/freshrss-mark-previous-as-read", + "method": "git", + "directory": "xExtension-MarkPreviousAsRead" + }, { "name": "Mobile Scroll Menu", "author": "Marco Heizmann", @@ -467,7 +478,7 @@ "name": "Title-Wrap", "author": "₣rans de Jonge, Joris Kinable", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", - "version": "0.2", + "version": "0.2.1", "entrypoint": "TitleWrap", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From ad2d0eeb3abf0f426e1b6b4fdf90fd40973700ac Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Sun, 17 Mar 2024 23:30:56 +0100 Subject: [PATCH 30/72] added Youtube extension (#217) * added Youtube extension * phpstan * modernized code style * replaced deprecated calls * phpstan * modernized codebase * modernized codebase * phpstan-next * markdown syntax check * markdown syntax check * markdown syntax check * seriously a spell checker ... are you trying to avoid outside contributions? * updated extensions --------- Co-authored-by: Alexandre Alapetite --- README.md | 4 +- extensions.json | 8 +- repositories.json | 9 - xExtension-YouTube/LICENSE | 674 +++++++++++++++++++++++++++++ xExtension-YouTube/README.md | 59 +++ xExtension-YouTube/configure.phtml | 45 ++ xExtension-YouTube/extension.php | 267 ++++++++++++ xExtension-YouTube/i18n/de/ext.php | 11 + xExtension-YouTube/i18n/en/ext.php | 11 + xExtension-YouTube/i18n/fr/ext.php | 11 + xExtension-YouTube/metadata.json | 8 + 11 files changed, 1091 insertions(+), 16 deletions(-) create mode 100644 xExtension-YouTube/LICENSE create mode 100644 xExtension-YouTube/README.md create mode 100644 xExtension-YouTube/configure.phtml create mode 100644 xExtension-YouTube/extension.php create mode 100644 xExtension-YouTube/i18n/de/ext.php create mode 100644 xExtension-YouTube/i18n/en/ext.php create mode 100644 xExtension-YouTube/i18n/fr/ext.php create mode 100644 xExtension-YouTube/metadata.json diff --git a/README.md b/README.md index 29164ac..88e3338 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,7 @@ There are some FreshRSS extensions out there, developed by community members: ### By [@kevinpapst](https://github.com/kevinpapst), [Web](https://www.kevinpapst.de/) -* [Dilbert](https://github.com/kevinpapst/freshrss-dilbert): Display your daily Dilbert comic in FreshRSS directly -* [Teem](https://github.com/kevinpapst/freshrss-teem): Display videos from the skydiving website jointheteem.com inline - +* [Youtube](xExtension-YouTube) shows YouTube videos inline in the feed ### By [@oYoX](https://github.com/oyox), [Web](https://oyox.de/) diff --git a/extensions.json b/extensions.json index ab10cdd..37baae5 100644 --- a/extensions.json +++ b/extensions.json @@ -531,13 +531,13 @@ "directory": "." }, { - "name": "YouTube/PeerTube Video Feed", + "name": "YouTube Video Feed", "author": "Kevin Papst", - "description": "Embed YouTube/PeerTube feeds inside article content.", - "version": "0.1", + "description": "Embed YouTube videos feeds inside article content.", + "version": "1.0", "entrypoint": "YouTube", "type": "user", - "url": "https://github.com/kevinpapst/freshrss-youtube", + "url": "https://github.com/FreshRSS/Extensions", "method": "git", "directory": "xExtension-YouTube" }, diff --git a/repositories.json b/repositories.json index 0a158c6..faccb12 100644 --- a/repositories.json +++ b/repositories.json @@ -1,15 +1,6 @@ [{ "url": "https://github.com/FreshRSS/Extensions", "type": "git" -}, { - "url": "https://github.com/kevinpapst/freshrss-youtube", - "type": "git" -}, { - "url": "https://github.com/kevinpapst/freshrss-dilbert", - "type": "git" -}, { - "url": "https://github.com/kevinpapst/freshrss-teem", - "type": "git" }, { "url": "https://github.com/oyox/FreshRSS-extensions", "type": "git" diff --git a/xExtension-YouTube/LICENSE b/xExtension-YouTube/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/xExtension-YouTube/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/xExtension-YouTube/README.md b/xExtension-YouTube/README.md new file mode 100644 index 0000000..dea6506 --- /dev/null +++ b/xExtension-YouTube/README.md @@ -0,0 +1,59 @@ +# FreshRSS - YouTube video extension + +This FreshRSS extension allows you to directly watch YouTube/PeerTube videos from within subscribed channel feeds. + +To use it, upload the ```xExtension-YouTube``` directory to the FreshRSS `./extensions` directory on your server and enable it on the extension panel in FreshRSS. + +## Features + +- Embeds Youtube videos directly in FreshRSS, instead of linking to the Youtube page +- Simplifies the subscription to channel URLs by automatically detecting the channels feed URL + +You can simply add Youtube video subscriptions by pasting URLs like: +- `https://www.youtube.com/channel/UCwbjxO5qQTMkSZVueqKwxuw` +- `https://www.youtube.com/user/AndrewTrials` + +## Screenshots + +With FreshRSS and an original Youtube Channel feed: +![screenshot before](https://github.com/kevinpapst/freshrss-youtube/blob/screenshot-readme/before.png?raw=true "Without this extension the video is not shown") + +With activated Youtube extension: +![screenshot after](https://github.com/kevinpapst/freshrss-youtube/blob/screenshot-readme/after.png?raw=true "After activating the extension you can enjoy your video directly in the FreshRSS stream") + +## Changelog + +0.11: +- Modernized codebase for latest FreshRSS release 1.23.1 +- Moved from [custom repo](https://github.com/kevinpapst/freshrss-youtube) to FreshRSS official extension repo + +0.10: +- Enhance feed content formatting when included +- Enhance YouTube URL matching + +0.9: +- Set the extension level at "user" (**users must re-enable the extension**) +- Fix calls to unset configuration variables +- Register translations when extension is disabled + +0.8: +- Automatically convert channel and username URLs to feed URLs + +0.7: +- Support for PeerTube feed + +0.6: +- Support cookie-less domain [youtube-nocookie.com](https://www.youtube-nocookie.com) for embedding + +0.5: +- Opened "API" for external usage + +0.4: +- Added option to display original feed content (currently Youtube inserts a download icon link to the video file) +- Fixed config loading + +0.3: +- Added installation hints + +0.2: +- Fixed "Use of undefined constant FreshRSS_Context" diff --git a/xExtension-YouTube/configure.phtml b/xExtension-YouTube/configure.phtml new file mode 100644 index 0000000..8828fe7 --- /dev/null +++ b/xExtension-YouTube/configure.phtml @@ -0,0 +1,45 @@ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+ +
+ +
+ +
+
+ +
+
+ + +
+
+
+ +

+ + GitHub. +

diff --git a/xExtension-YouTube/extension.php b/xExtension-YouTube/extension.php new file mode 100644 index 0000000..03c536e --- /dev/null +++ b/xExtension-YouTube/extension.php @@ -0,0 +1,267 @@ +registerHook('entry_before_display', array($this, 'embedYouTubeVideo')); + $this->registerHook('check_url_before_add', array($this, 'convertYoutubeFeedUrl')); + $this->registerTranslates(); + } + + public function convertYoutubeFeedUrl(string $url): string + { + $matches = []; + + if (preg_match('#^https?://www\.youtube\.com/channel/([0-9a-zA-Z_-]{6,36})#', $url, $matches) === 1) { + return 'https://www.youtube.com/feeds/videos.xml?channel_id=' . $matches[1]; + } + + if (preg_match('#^https?://www\.youtube\.com/user/([0-9a-zA-Z_-]{6,36})#', $url, $matches) === 1) { + return 'https://www.youtube.com/feeds/videos.xml?user=' . $matches[1]; + } + + return $url; + } + + /** + * Initializes the extension configuration, if the user context is available. + * Do not call that in your extensions init() method, it can't be used there. + */ + public function loadConfigValues(): void + { + if (!class_exists('FreshRSS_Context', false) || !FreshRSS_Context::hasUserConf()) { + return; + } + + $width = FreshRSS_Context::userConf()->attributeInt('yt_player_width'); + if ($width !== null) { + $this->width = $width; + } + + $height = FreshRSS_Context::userConf()->attributeInt('yt_player_height'); + if ($height !== null) { + $this->height = $height; + } + + $showContent = FreshRSS_Context::userConf()->attributeBool('yt_show_content'); + if ($showContent !== null) { + $this->showContent = $showContent; + } + + $noCookie = FreshRSS_Context::userConf()->attributeBool('yt_nocookie'); + if ($noCookie !== null) { + $this->useNoCookie = $noCookie; + } + } + + /** + * Returns the width in pixel for the YouTube player iframe. + * You have to call loadConfigValues() before this one, otherwise you get default values. + */ + public function getWidth(): int + { + return $this->width; + } + + /** + * Returns the height in pixel for the YouTube player iframe. + * You have to call loadConfigValues() before this one, otherwise you get default values. + */ + public function getHeight(): int + { + return $this->height; + } + + /** + * Returns whether this extension displays the content of the YouTube feed. + * You have to call loadConfigValues() before this one, otherwise you get default values. + */ + public function isShowContent(): bool + { + return $this->showContent; + } + + /** + * Returns if this extension should use youtube-nocookie.com instead of youtube.com. + * You have to call loadConfigValues() before this one, otherwise you get default values. + */ + public function isUseNoCookieDomain(): bool + { + return $this->useNoCookie; + } + + /** + * Inserts the YouTube video iframe into the content of an entry, if the entries link points to a YouTube watch URL. + */ + public function embedYouTubeVideo(FreshRSS_Entry $entry): FreshRSS_Entry + { + $link = $entry->link(); + + if (preg_match('#^https?://www\.youtube\.com/watch\?v=|/videos/watch/[0-9a-f-]{36}$#', $link) !== 1) { + return $entry; + } + + $this->loadConfigValues(); + + if (stripos($entry->content(), ''; + + if ($this->showContent) { + $doc = new DOMDocument(); + $doc->encoding = 'UTF-8'; + $doc->recover = true; + $doc->strictErrorChecking = false; + + if ($doc->loadHTML('' . $entry->content())) + { + $xpath = new DOMXPath($doc); + + /** @var DOMNodeList $titles */ + $titles = $xpath->evaluate("//*[@class='enclosure-title']"); + /** @var DOMNodeList $thumbnails */ + $thumbnails = $xpath->evaluate("//*[@class='enclosure-thumbnail']/@src"); + /** @var DOMNodeList $descriptions */ + $descriptions = $xpath->evaluate("//*[@class='enclosure-description']"); + + $content = '
'; + + // We hide the title so it doesn't appear in the final article, which would be redundant with the RSS article title, + // but we keep it in the content anyway, so RSS clients can extract it if needed. + if ($titles->length > 0) { + $content .= ''; + } + + // We hide the thumbnail so it doesn't appear in the final article, which would be redundant with the YouTube player preview, + // but we keep it in the content anyway, so RSS clients can extract it to display a preview where it wants (in article listing, + // by example, like with Reeder). + if ($thumbnails->length > 0) { + $content .= ''; + } + + $content .= $iframe; + + if ($descriptions->length > 0) { + $content .= '

' . nl2br(htmlentities($descriptions[0]->nodeValue)) . '

'; + } + + $content .= "
\n"; + } + else { + $content = $iframe . $entry->content(); + } + } + else { + $content = $iframe; + } + + return $content; + } + + /** + * This function is called by FreshRSS when the configuration page is loaded, and when configuration is saved. + * - We save configuration in case of a post. + * - We (re)load configuration in all case, so they are in-sync after a save and before a page load. + */ + public function handleConfigureAction(): void + { + $this->registerTranslates(); + + if (Minz_Request::isPost()) { + FreshRSS_Context::userConf()->_attribute('yt_player_height', Minz_Request::paramInt('yt_height')); + FreshRSS_Context::userConf()->_attribute('yt_player_width', Minz_Request::paramInt('yt_width')); + FreshRSS_Context::userConf()->_attribute('yt_show_content', Minz_Request::paramBoolean('yt_show_content')); + FreshRSS_Context::userConf()->_attribute('yt_nocookie', Minz_Request::paramInt('yt_nocookie')); + FreshRSS_Context::userConf()->save(); + } + + $this->loadConfigValues(); + } +} diff --git a/xExtension-YouTube/i18n/de/ext.php b/xExtension-YouTube/i18n/de/ext.php new file mode 100644 index 0000000..04ae451 --- /dev/null +++ b/xExtension-YouTube/i18n/de/ext.php @@ -0,0 +1,11 @@ + array( + 'height' => 'Höhe des Players', + 'width' => 'Breite des Players', + 'updates' => 'Die neueste Version des Plugins findest Du bei', + 'show_content' => 'Zeige den Inhalt des Feeds an', + 'use_nocookie' => 'Verwende die Cookie-freie Domain www.youtube-nocookie.com', + ), +); diff --git a/xExtension-YouTube/i18n/en/ext.php b/xExtension-YouTube/i18n/en/ext.php new file mode 100644 index 0000000..6f37c02 --- /dev/null +++ b/xExtension-YouTube/i18n/en/ext.php @@ -0,0 +1,11 @@ + array( + 'height' => 'Player height', + 'width' => 'Player width', + 'updates' => 'You can find the latest extension version at', + 'show_content' => 'Display the feeds content', + 'use_nocookie' => 'Use the cookie-free domain www.youtube-nocookie.com', + ), +); diff --git a/xExtension-YouTube/i18n/fr/ext.php b/xExtension-YouTube/i18n/fr/ext.php new file mode 100644 index 0000000..3beee1b --- /dev/null +++ b/xExtension-YouTube/i18n/fr/ext.php @@ -0,0 +1,11 @@ + array( + 'height' => 'Hauteur du lecteur', + 'width' => 'Largeur du lecteur', + 'updates' => 'Vous pouvez trouver la dernière mise à jour de l’extension sur ', + 'show_content' => 'Afficher le contenu du flux', + 'use_nocookie' => 'Utiliser le domaine www.youtube-nocookie.com pour éviter les cookies', + ), +); diff --git a/xExtension-YouTube/metadata.json b/xExtension-YouTube/metadata.json new file mode 100644 index 0000000..064fd25 --- /dev/null +++ b/xExtension-YouTube/metadata.json @@ -0,0 +1,8 @@ +{ + "name": "YouTube/PeerTube Video Feed", + "author": "Kevin Papst", + "description": "Embed YouTube/PeerTube feeds inside article content.", + "version": 0.10, + "entrypoint": "YouTube", + "type": "user" +} From 39a87e483988ffde458ac9c4863b8b55bbb45e06 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 18 Mar 2024 11:18:14 +0000 Subject: [PATCH 31/72] Update extension list --- extensions.json | 28 +++------------------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/extensions.json b/extensions.json index 37baae5..4f714fb 100644 --- a/extensions.json +++ b/extensions.json @@ -122,17 +122,6 @@ "method": "git", "directory": "." }, - { - "name": "Dilberts Daily Comic", - "author": "Kevin Papst", - "description": "Embed the images from Dilberts daily feed inside article content.", - "version": "0.3.1", - "entrypoint": "Dilbert", - "type": "system", - "url": "https://github.com/kevinpapst/freshrss-dilbert", - "method": "git", - "directory": "xExtension-Dilbert" - }, { "name": "Feed Priority Shortcut", "author": "Aidi Stan", @@ -430,17 +419,6 @@ "method": "git", "directory": "xExtension-StickyFeeds" }, - { - "name": "Teem Video Feed", - "author": "Kevin Papst", - "description": "Embed video from JOINTHETEEM inside article content.", - "version": "0.1", - "entrypoint": "Teem", - "type": "system", - "url": "https://github.com/kevinpapst/freshrss-teem", - "method": "git", - "directory": "xExtension-Teem" - }, { "name": "Theme Mode Synchronizer", "author": "Aidi Stan", @@ -531,10 +509,10 @@ "directory": "." }, { - "name": "YouTube Video Feed", + "name": "YouTube/PeerTube Video Feed", "author": "Kevin Papst", - "description": "Embed YouTube videos feeds inside article content.", - "version": "1.0", + "description": "Embed YouTube/PeerTube feeds inside article content.", + "version": "0.1", "entrypoint": "YouTube", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From b6dbb835a425bd2467b07f3a8a2456e4324cca1d Mon Sep 17 00:00:00 2001 From: Kevin Papst Date: Tue, 19 Mar 2024 12:04:16 +0100 Subject: [PATCH 32/72] make sure both versions are equal (#224) --- extensions.json | 6 +++--- xExtension-YouTube/metadata.json | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions.json b/extensions.json index 4f714fb..8b9bb82 100644 --- a/extensions.json +++ b/extensions.json @@ -509,10 +509,10 @@ "directory": "." }, { - "name": "YouTube/PeerTube Video Feed", + "name": "YouTube Video Feed", "author": "Kevin Papst", - "description": "Embed YouTube/PeerTube feeds inside article content.", - "version": "0.1", + "description": "Embed YouTube feeds inside article content.", + "version": "0.10", "entrypoint": "YouTube", "type": "user", "url": "https://github.com/FreshRSS/Extensions", diff --git a/xExtension-YouTube/metadata.json b/xExtension-YouTube/metadata.json index 064fd25..db9b34c 100644 --- a/xExtension-YouTube/metadata.json +++ b/xExtension-YouTube/metadata.json @@ -1,8 +1,8 @@ { - "name": "YouTube/PeerTube Video Feed", + "name": "YouTube Video Feed", "author": "Kevin Papst", - "description": "Embed YouTube/PeerTube feeds inside article content.", - "version": 0.10, + "description": "Embed YouTube feeds inside article content.", + "version": "0.10", "entrypoint": "YouTube", "type": "user" } From 86d4715e79739201337bc691f2f52a89012b43f9 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sun, 24 Mar 2024 11:18:32 +0000 Subject: [PATCH 33/72] Update extension list --- extensions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions.json b/extensions.json index 8b9bb82..0d072f1 100644 --- a/extensions.json +++ b/extensions.json @@ -279,8 +279,8 @@ { "name": "News Assistant", "author": "Mervyn Zhan", - "description": "Use the api of `OpenAI` to summary the news.", - "version": "0.1", + "description": "Using the ai api of `OpenAI`, `Anthropic`, `Groq` by [Portkey-AI/gateway](https://github.com/Portkey-AI/gateway/) to summary the news.", + "version": "0.11.0", "entrypoint": "NewsAssistant", "type": "system", "url": "https://github.com/reply2future/xExtension-NewsAssistant", From 9f21984b8c9e75c48496d285795953642a8ec977 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sun, 31 Mar 2024 11:18:30 +0000 Subject: [PATCH 34/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 0d072f1..892c3f8 100644 --- a/extensions.json +++ b/extensions.json @@ -247,7 +247,7 @@ "name": "LaTeX support", "author": "Alexis Degrugillier", "description": "Add support for LaTeX notation rendering", - "version": "0.1.4", + "version": "0.1.5", "entrypoint": "LatexSupport", "type": "user", "url": "https://github.com/aledeg/xExtension-LatexSupport", From 45a66b0de7651b571146074bcbacba75da2bf0b2 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Wed, 10 Apr 2024 11:20:59 +0000 Subject: [PATCH 35/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 892c3f8..cf0341b 100644 --- a/extensions.json +++ b/extensions.json @@ -71,7 +71,7 @@ "name": "Comics in feed", "author": "José Moreira", "description": "Embed the images from comics feeds directly.", - "version": "1.4.0", + "version": "1.5.0", "entrypoint": "ComicsInFeed", "type": "system", "url": "https://github.com/giventofly/freshrss-comicsinfeed", From 01f3473368ca3aca80a5abe4083a9d8dec479ec7 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 11 Apr 2024 09:09:50 +0200 Subject: [PATCH 36/72] New developer command to test all third-party extensions (#228) * New developer command to test all third-party extensions * `composer run-script phpstan-third-party` * Rename the directory for generate.php to `third-party` instead of `tmp` * Take advantage of PHPStan checkMissingOverrideMethodAttribute https://phpstan.org/config-reference#checkmissingoverridemethodattribute * Detected and fixed bug in URL of https://github.com/tunbridgep/freshrss-invidious * Better syntax for registerHook * Fix static * #[\Override] * Static method --- .eslintignore | 1 + .gitignore | 1 + .jshintignore | 1 + .markdownlintignore | 1 + .stylelintignore | 1 + .typos.toml | 1 + README.md | 11 +++ composer.json | 7 +- composer.lock | 81 ++++++++++++------- extensions.json | 11 +++ generate.php | 3 +- phpstan-next.neon | 10 +++ phpstan-third-party.neon | 24 ++++++ phpstan.neon | 4 +- repositories.json | 2 +- tests/phpstan-next.txt | 7 -- xExtension-ColorfulList/extension.php | 3 +- xExtension-ColorfulList/metadata.json | 2 +- xExtension-CustomCSS/extension.php | 4 +- xExtension-CustomCSS/metadata.json | 2 +- xExtension-CustomJS/extension.php | 4 +- xExtension-CustomJS/metadata.json | 2 +- xExtension-ImageProxy/extension.php | 7 +- xExtension-ImageProxy/metadata.json | 2 +- .../Controllers/quickCollapseController.php | 3 +- xExtension-QuickCollapse/Models/View.php | 2 +- xExtension-QuickCollapse/extension.php | 3 +- xExtension-QuickCollapse/metadata.json | 2 +- xExtension-ReadingTime/extension.php | 3 +- xExtension-ReadingTime/metadata.json | 2 +- .../Controllers/shareByEmailController.php | 9 ++- xExtension-ShareByEmail/Models/View.php | 2 +- xExtension-ShareByEmail/extension.php | 3 +- xExtension-ShareByEmail/mailers/Share.php | 4 +- xExtension-ShareByEmail/metadata.json | 2 +- xExtension-StickyFeeds/extension.php | 3 +- xExtension-StickyFeeds/metadata.json | 2 +- xExtension-TTRSS_API/extension.php | 15 ++-- xExtension-TTRSS_API/ttrss.php | 29 +++---- xExtension-TitleWrap/extension.php | 3 +- xExtension-TitleWrap/metadata.json | 2 +- xExtension-YouTube/extension.php | 20 ++--- xExtension-YouTube/metadata.json | 2 +- xExtension-showFeedID/extension.php | 3 +- xExtension-showFeedID/metadata.json | 2 +- 45 files changed, 197 insertions(+), 111 deletions(-) create mode 100644 phpstan-next.neon create mode 100644 phpstan-third-party.neon delete mode 100644 tests/phpstan-next.txt diff --git a/.eslintignore b/.eslintignore index e25a32a..5d9bd5a 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,5 +2,6 @@ *.min.js node_modules/ symbolic/ +third-party/ tmp/ vendor/ diff --git a/.gitignore b/.gitignore index ba24d9d..239c9a7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,6 @@ bin/ node_modules/ symbolic/ +third-party/ tmp/ vendor/ diff --git a/.jshintignore b/.jshintignore index 81fdc48..686db07 100644 --- a/.jshintignore +++ b/.jshintignore @@ -1,5 +1,6 @@ .git/ node_modules/ symbolic/ +third-party/ tmp/ vendor/ diff --git a/.markdownlintignore b/.markdownlintignore index 81fdc48..686db07 100644 --- a/.markdownlintignore +++ b/.markdownlintignore @@ -1,5 +1,6 @@ .git/ node_modules/ symbolic/ +third-party/ tmp/ vendor/ diff --git a/.stylelintignore b/.stylelintignore index 81fdc48..686db07 100644 --- a/.stylelintignore +++ b/.stylelintignore @@ -1,5 +1,6 @@ .git/ node_modules/ symbolic/ +third-party/ tmp/ vendor/ diff --git a/.typos.toml b/.typos.toml index 452d6a9..5a2e687 100644 --- a/.typos.toml +++ b/.typos.toml @@ -17,6 +17,7 @@ extend-exclude = [ "bin/", "node_modules/", "symbolic/", + "third-party/", "tmp/", "vendor/", "xExtension-ReadingTime/README.md" diff --git a/README.md b/README.md index 88e3338..250b192 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,17 @@ To install an extension, download [the extension archive](https://github.com/Fre Then, upload the specific extension(s) you want on your server. Extensions must be in the `./extensions` directory of your FreshRSS installation. +## Commands for developers + +```sh +# Test this repository and its extensions +make test-all + +# Test compatibility between `../FreshRSS/` core and all known extensions from `./repositories.json` +./generate.php +composer run-script phpstan-third-party +``` + ## Third-party extensions There are some FreshRSS extensions out there, developed by community members: diff --git a/composer.json b/composer.json index 9122289..0c5d91a 100644 --- a/composer.json +++ b/composer.json @@ -45,13 +45,13 @@ "ext-pdo_pgsql": "*" }, "require-dev": { - "php": ">=8.0", + "php": ">=7.4", "ext-phar": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "phpstan/phpstan": "^1.10", "phpstan/phpstan-strict-rules": "^1.5", - "squizlabs/php_codesniffer": "^3.7" + "squizlabs/php_codesniffer": "^3.9" }, "scripts": { "php-lint": "find . -type d -name 'vendor' -prune -o -name '*.php' -print0 | xargs -0 -n1 -P4 php -l 1>/dev/null", @@ -59,7 +59,8 @@ "phpcs": "phpcs . -s", "phpcbf": "phpcbf . -p -s", "phpstan": "phpstan analyse --memory-limit 512M .", - "phpstan-next": "phpstan analyse --level 9 --memory-limit 512M $(find . -type d -name 'vendor' -prune -o -name '*.php' -o -name '*.phtml' | grep -Fxvf ./tests/phpstan-next.txt | sort | paste -s -)", + "phpstan-next": "phpstan analyse --memory-limit 512M -c phpstan-next.neon .", + "phpstan-third-party": "phpstan analyse --memory-limit 512M -c phpstan-third-party.neon .", "test": [ "@php-lint", "@phtml-lint", diff --git a/composer.lock b/composer.lock index 269ce71..4a2e5eb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2c89b2e0c08f09d94faa394270fc16a9", + "content-hash": "bf0d2d1a05ed08841ca6bd3e7ec96b74", "packages": [], "packages-dev": [ { "name": "phpstan/phpstan", - "version": "1.10.44", + "version": "1.10.66", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "bf84367c53a23f759513985c54ffe0d0c249825b" + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/bf84367c53a23f759513985c54ffe0d0c249825b", - "reference": "bf84367c53a23f759513985c54ffe0d0c249825b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", + "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", "shasum": "" }, "require": { @@ -67,25 +67,25 @@ "type": "tidelift" } ], - "time": "2023-11-21T16:30:46+00:00" + "time": "2024-03-28T16:17:31+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542" + "reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/7a50e9662ee9f3942e4aaaf3d603653f60282542", - "reference": "7a50e9662ee9f3942e4aaaf3d603653f60282542", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/568210bd301f94a0d4b1e5a0808c374c1b9cf11b", + "reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.34" + "phpstan/phpstan": "^1.10.60" }, "require-dev": { "nikic/php-parser": "^4.13.0", @@ -114,22 +114,22 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.2" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.3" }, - "time": "2023-10-30T14:35:06+00:00" + "time": "2024-04-06T07:43:25+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "version": "3.9.1", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909", + "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909", "shasum": "" }, "require": { @@ -139,11 +139,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -158,22 +158,45 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "standards", "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2023-02-22T23:07:41+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-03-31T21:03:09+00:00" } ], "aliases": [], @@ -205,10 +228,10 @@ "ext-zlib": "*" }, "platform-dev": { - "php": ">=8.0", + "php": ">=7.4", "ext-phar": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*" }, - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/extensions.json b/extensions.json index cf0341b..9df1b11 100644 --- a/extensions.json +++ b/extensions.json @@ -221,6 +221,17 @@ "method": "git", "directory": "xExtension-Invidious" }, + { + "name": "Invidious Video Feed", + "author": "Paul Tunbridge (forked from Korbak and Kevin Papst)", + "description": "Embed YouTube feeds inside article content, but with Invidious.", + "version": "1.1", + "entrypoint": "Invidious", + "type": "user", + "url": "https://github.com/tunbridgep/freshrss-invidious", + "method": "git", + "directory": "xExtension-Invidious" + }, { "name": "Kagi Summarizer", "author": "Rudis Muiznieks", diff --git a/generate.php b/generate.php index 1891044..5796b27 100755 --- a/generate.php +++ b/generate.php @@ -6,11 +6,12 @@ // ------------------- // const VERSION = 0.1; const TYPE_GIT = 'git'; -$tempFolder = './tmp'; +$tempFolder = './third-party/'; $extensions = []; $gitRepositories = []; if (file_exists($tempFolder)) { + // TODO: Improve by keeping git copy if possible (e.g. fetch + reset) exec("rm -rf -- {$tempFolder}"); } diff --git a/phpstan-next.neon b/phpstan-next.neon new file mode 100644 index 0000000..5ddddd0 --- /dev/null +++ b/phpstan-next.neon @@ -0,0 +1,10 @@ +includes: + - phpstan.neon + +parameters: + level: 9 + excludePaths: + analyse: + - xExtension-ImageProxy/configure.phtml + - xExtension-ImageProxy/extension.php + - xExtension-TTRSS_API/ttrss.php diff --git a/phpstan-third-party.neon b/phpstan-third-party.neon new file mode 100644 index 0000000..6d6168c --- /dev/null +++ b/phpstan-third-party.neon @@ -0,0 +1,24 @@ +parameters: + level: 0 + treatPhpDocTypesAsCertain: false + fileExtensions: + - php + - phtml + paths: + - ../FreshRSS + - third-party/ + excludePaths: + analyse: + - ../FreshRSS + - third-party/*/vendor/* + analyseAndScan: + - .git/ + - node_modules/ + - symbolic/ + - third-party/*/tests/* + - tmp/ + - vendor/ + - xExtension-* + dynamicConstantNames: + - TYPE_GIT + reportMaybesInPropertyPhpDocTypes: false diff --git a/phpstan.neon b/phpstan.neon index 8cac860..02a5f8e 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -1,6 +1,7 @@ parameters: # TODO: Increase rule-level https://phpstan.org/user-guide/rule-levels level: 1 + phpVersion: 80399 # TODO: Remove line when moving composer.json to PHP 8+ treatPhpDocTypesAsCertain: false fileExtensions: - php @@ -16,10 +17,11 @@ parameters: - .git/ - node_modules/ - symbolic/ + - third-party/ - tmp/ - - xExtension-TTRSS_API/ dynamicConstantNames: - TYPE_GIT + checkMissingOverrideMethodAttribute: true reportMaybesInPropertyPhpDocTypes: false strictRules: allRules: false diff --git a/repositories.json b/repositories.json index faccb12..496894f 100644 --- a/repositories.json +++ b/repositories.json @@ -44,7 +44,7 @@ "url": "https://github.com/babico/xExtension-TwitchChannel2RssFeed", "type": "git" }, { - "url": "thttps://github.com/tunbridgep/freshrss-invidious", + "url": "https://github.com/tunbridgep/freshrss-invidious", "type": "git" }, { "url": "https://github.com/javerous/freshrss-greader-redate", diff --git a/tests/phpstan-next.txt b/tests/phpstan-next.txt deleted file mode 100644 index 161cef4..0000000 --- a/tests/phpstan-next.txt +++ /dev/null @@ -1,7 +0,0 @@ -# List of files, which are not yet passing PHPStan level 9 https://phpstan.org/user-guide/rule-levels -# Used for automated tests to avoid regressions in files already passing that level. -# Can be regenerated with something like: -# find . -type d -name 'vendor' -prune -o -name '*.php' -exec sh -c 'vendor/bin/phpstan analyse --level 9 --memory-limit 512M {} >/dev/null 2>/dev/null || echo {}' \; - -./xExtension-ImageProxy/configure.phtml -./xExtension-ImageProxy/extension.php diff --git a/xExtension-ColorfulList/extension.php b/xExtension-ColorfulList/extension.php index b1814d5..5e1bbb6 100644 --- a/xExtension-ColorfulList/extension.php +++ b/xExtension-ColorfulList/extension.php @@ -2,8 +2,9 @@ declare(strict_types=1); -class ColorfulListExtension extends Minz_Extension +final class ColorfulListExtension extends Minz_Extension { + #[\Override] public function init(): void { Minz_View::appendScript($this->getFileUrl('script.js', 'js')); } diff --git a/xExtension-ColorfulList/metadata.json b/xExtension-ColorfulList/metadata.json index 945d2f5..01668cc 100644 --- a/xExtension-ColorfulList/metadata.json +++ b/xExtension-ColorfulList/metadata.json @@ -2,7 +2,7 @@ "name": "Colorful List", "author": "Claud Xiao", "description": "Colorful Entry Title based on RSS source", - "version": 0.3, + "version": "0.3.1", "entrypoint": "ColorfulList", "type": "user" } diff --git a/xExtension-CustomCSS/extension.php b/xExtension-CustomCSS/extension.php index b0df7f1..094ac4b 100644 --- a/xExtension-CustomCSS/extension.php +++ b/xExtension-CustomCSS/extension.php @@ -2,10 +2,11 @@ declare(strict_types=1); -class CustomCSSExtension extends Minz_Extension { +final class CustomCSSExtension extends Minz_Extension { public string $css_rules; public string $permission_problem = ''; + #[\Override] public function init(): void { $this->registerTranslates(); @@ -18,6 +19,7 @@ class CustomCSSExtension extends Minz_Extension { } } + #[\Override] public function handleConfigureAction(): void { $this->registerTranslates(); diff --git a/xExtension-CustomCSS/metadata.json b/xExtension-CustomCSS/metadata.json index b4a45be..0646334 100644 --- a/xExtension-CustomCSS/metadata.json +++ b/xExtension-CustomCSS/metadata.json @@ -2,7 +2,7 @@ "name": "Custom CSS", "author": "Marien Fressinaud", "description": "Give possibility to overwrite the CSS with a user-specific rules.", - "version": "0.5", + "version": "0.5.1", "entrypoint": "CustomCSS", "type": "user" } diff --git a/xExtension-CustomJS/extension.php b/xExtension-CustomJS/extension.php index 6edbf38..aa183c5 100644 --- a/xExtension-CustomJS/extension.php +++ b/xExtension-CustomJS/extension.php @@ -2,10 +2,11 @@ declare(strict_types=1); -class CustomJSExtension extends Minz_Extension { +final class CustomJSExtension extends Minz_Extension { public string $js_rules; public string $permission_problem = ''; + #[\Override] public function init(): void { $this->registerTranslates(); @@ -18,6 +19,7 @@ class CustomJSExtension extends Minz_Extension { } } + #[\Override] public function handleConfigureAction(): void { $this->registerTranslates(); diff --git a/xExtension-CustomJS/metadata.json b/xExtension-CustomJS/metadata.json index 594cec5..c21e77e 100644 --- a/xExtension-CustomJS/metadata.json +++ b/xExtension-CustomJS/metadata.json @@ -2,7 +2,7 @@ "name": "Custom JS", "author": "Frans de Jonge", "description": "Apply custom JS.", - "version": "0.5", + "version": "0.5.1", "entrypoint": "CustomJS", "type": "user" } diff --git a/xExtension-ImageProxy/extension.php b/xExtension-ImageProxy/extension.php index 1dd1494..9cdb721 100644 --- a/xExtension-ImageProxy/extension.php +++ b/xExtension-ImageProxy/extension.php @@ -11,14 +11,12 @@ final class ImageProxyExtension extends Minz_Extension { private const SCHEME_INCLUDE = ''; private const URL_ENCODE = '1'; + #[\Override] public function init(): void { if (!FreshRSS_Context::hasSystemConf()) { throw new FreshRSS_Context_Exception('System configuration not initialised!'); } - $this->registerHook( - 'entry_before_display', - array('ImageProxyExtension', 'setImageProxyHook') - ); + $this->registerHook('entry_before_display', [self::class, 'setImageProxyHook']); // Defaults $save = false; if (is_null(FreshRSS_Context::userConf()->image_proxy_url)) { @@ -55,6 +53,7 @@ final class ImageProxyExtension extends Minz_Extension { } } + #[\Override] public function handleConfigureAction(): void { $this->registerTranslates(); diff --git a/xExtension-ImageProxy/metadata.json b/xExtension-ImageProxy/metadata.json index dfd761b..cda5bd5 100644 --- a/xExtension-ImageProxy/metadata.json +++ b/xExtension-ImageProxy/metadata.json @@ -2,7 +2,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.7.1", + "version": "0.7.2", "entrypoint": "ImageProxy", "type": "user" } diff --git a/xExtension-QuickCollapse/Controllers/quickCollapseController.php b/xExtension-QuickCollapse/Controllers/quickCollapseController.php index b2c1332..0e6a501 100644 --- a/xExtension-QuickCollapse/Controllers/quickCollapseController.php +++ b/xExtension-QuickCollapse/Controllers/quickCollapseController.php @@ -1,6 +1,7 @@ registerTranslates(); $this->registerViews(); diff --git a/xExtension-QuickCollapse/metadata.json b/xExtension-QuickCollapse/metadata.json index 14dcbb3..dc6a113 100644 --- a/xExtension-QuickCollapse/metadata.json +++ b/xExtension-QuickCollapse/metadata.json @@ -2,7 +2,7 @@ "name": "Quick Collapse", "author": "romibi and Marien Fressinaud", "description": "Quickly change from folded to unfolded articles", - "version": "0.2", + "version": "0.2.1", "entrypoint": "QuickCollapse", "type": "user" } diff --git a/xExtension-ReadingTime/extension.php b/xExtension-ReadingTime/extension.php index d1a9a63..c97615b 100644 --- a/xExtension-ReadingTime/extension.php +++ b/xExtension-ReadingTime/extension.php @@ -2,7 +2,8 @@ declare(strict_types=1); -class ReadingTimeExtension extends Minz_Extension { +final class ReadingTimeExtension extends Minz_Extension { + #[\Override] public function init(): void { Minz_View::appendScript($this->getFileUrl('readingtime.js', 'js')); } diff --git a/xExtension-ReadingTime/metadata.json b/xExtension-ReadingTime/metadata.json index fcd17b7..0849497 100644 --- a/xExtension-ReadingTime/metadata.json +++ b/xExtension-ReadingTime/metadata.json @@ -2,7 +2,7 @@ "name": "ReadingTime", "author": "Lapineige", "description": "Add a reading time estimation next to each article", - "version": "1.5", + "version": "1.5.1", "entrypoint": "ReadingTime", "type": "user" } diff --git a/xExtension-ShareByEmail/Controllers/shareByEmailController.php b/xExtension-ShareByEmail/Controllers/shareByEmailController.php index cdeaedf..26073fe 100644 --- a/xExtension-ShareByEmail/Controllers/shareByEmailController.php +++ b/xExtension-ShareByEmail/Controllers/shareByEmailController.php @@ -2,7 +2,7 @@ declare(strict_types=1); -class FreshExtension_shareByEmail_Controller extends Minz_ActionController { +final class FreshExtension_shareByEmail_Controller extends Minz_ActionController { public ?Minz_Extension $extension; /** @var ShareByEmail\mailers\View */ @@ -12,6 +12,7 @@ class FreshExtension_shareByEmail_Controller extends Minz_ActionController { parent::__construct(ShareByEmail\mailers\View::class); } + #[\Override] public function init(): void { $this->extension = Minz_ExtensionManager::findExtension('Share By Email'); } @@ -34,13 +35,13 @@ class FreshExtension_shareByEmail_Controller extends Minz_ActionController { } $this->view->entry = $entry; - if (FreshRSS_Context::$system_conf === null) { + if (!FreshRSS_Context::hasSystemConf()) { throw new FreshRSS_Context_Exception('System configuration not initialised!'); } $username = Minz_Session::paramString('currentUser') ?: '_'; - $service_name = FreshRSS_Context::$system_conf->title; - $service_url = FreshRSS_Context::$system_conf->base_url; + $service_name = FreshRSS_Context::systemConf()->title; + $service_url = FreshRSS_Context::systemConf()->base_url; Minz_View::prependTitle(_t('shareByEmail.share.title') . ' · '); if ($this->extension !== null) { diff --git a/xExtension-ShareByEmail/Models/View.php b/xExtension-ShareByEmail/Models/View.php index 15449bc..bca3c4c 100644 --- a/xExtension-ShareByEmail/Models/View.php +++ b/xExtension-ShareByEmail/Models/View.php @@ -4,7 +4,7 @@ declare(strict_types=1); namespace ShareByEmail\mailers; -class View extends \Minz_View { +final class View extends \Minz_View { public ?\FreshRSS_Entry $entry = null; public string $content = ''; diff --git a/xExtension-ShareByEmail/extension.php b/xExtension-ShareByEmail/extension.php index b058fac..9834ce5 100644 --- a/xExtension-ShareByEmail/extension.php +++ b/xExtension-ShareByEmail/extension.php @@ -2,8 +2,9 @@ declare(strict_types=1); -class ShareByEmailExtension extends Minz_Extension { +final class ShareByEmailExtension extends Minz_Extension { + #[\Override] public function init(): void { $this->registerTranslates(); diff --git a/xExtension-ShareByEmail/mailers/Share.php b/xExtension-ShareByEmail/mailers/Share.php index 1caaf1e..a047022 100644 --- a/xExtension-ShareByEmail/mailers/Share.php +++ b/xExtension-ShareByEmail/mailers/Share.php @@ -18,8 +18,8 @@ final class Share extends \Minz_Mailer { $this->view->content = $content; - if (isset(\FreshRSS_Context::$system_conf)) { - $subject_prefix = '[' . \FreshRSS_Context::$system_conf->title . ']'; + if (\FreshRSS_Context::hasSystemConf()) { + $subject_prefix = '[' . \FreshRSS_Context::systemConf()->title . ']'; } else { $subject_prefix = ''; } diff --git a/xExtension-ShareByEmail/metadata.json b/xExtension-ShareByEmail/metadata.json index 8f689f0..fd9d5ab 100644 --- a/xExtension-ShareByEmail/metadata.json +++ b/xExtension-ShareByEmail/metadata.json @@ -2,7 +2,7 @@ "name": "Share By Email", "author": "Marien Fressinaud", "description": "Improve the sharing by email system.", - "version": "0.2.1", + "version": "0.2.2", "entrypoint": "ShareByEmail", "type": "user" } diff --git a/xExtension-StickyFeeds/extension.php b/xExtension-StickyFeeds/extension.php index 1c064de..2b65303 100644 --- a/xExtension-StickyFeeds/extension.php +++ b/xExtension-StickyFeeds/extension.php @@ -2,7 +2,8 @@ declare(strict_types=1); -class StickyFeedsExtension extends Minz_Extension { +final class StickyFeedsExtension extends Minz_Extension { + #[\Override] public function init(): void { Minz_View::appendStyle($this->getFileUrl('style.css', 'css')); Minz_View::appendScript($this->getFileUrl('script.js', 'js')); diff --git a/xExtension-StickyFeeds/metadata.json b/xExtension-StickyFeeds/metadata.json index 639ae9a..7c49f67 100644 --- a/xExtension-StickyFeeds/metadata.json +++ b/xExtension-StickyFeeds/metadata.json @@ -2,7 +2,7 @@ "name": "Sticky Feeds", "author": "Marien Fressinaud", "description": "Set the feed aside in the main stream following the window scroll.", - "version": "0.2", + "version": "0.2.1", "entrypoint": "StickyFeeds", "type": "user" } diff --git a/xExtension-TTRSS_API/extension.php b/xExtension-TTRSS_API/extension.php index bce8bd0..92620f0 100644 --- a/xExtension-TTRSS_API/extension.php +++ b/xExtension-TTRSS_API/extension.php @@ -1,14 +1,14 @@ registerHook( - 'post_update', - array($this, 'postUpdateHook') - ); +final class TTRSS_APIExtension extends Minz_Extension { + + #[\Override] + public function init(): void { + $this->registerHook('post_update', [$this, 'postUpdateHook']); } + #[\Override] public function install() { $filename = 'ttrss.php'; $file_source = join_path($this->getPath(), $filename); @@ -36,6 +36,7 @@ class TTRSS_APIExtension extends Minz_Extension { return true; } + #[\Override] public function uninstall() { $filename = 'ttrss.php'; $file_destination = join_path(PUBLIC_PATH, 'api', $filename); @@ -47,7 +48,7 @@ class TTRSS_APIExtension extends Minz_Extension { return true; } - public function postUpdateHook() { + public function postUpdateHook(): void { $res = $this->install(); if ($res !== true) { diff --git a/xExtension-TTRSS_API/ttrss.php b/xExtension-TTRSS_API/ttrss.php index 3064cfe..e11046e 100644 --- a/xExtension-TTRSS_API/ttrss.php +++ b/xExtension-TTRSS_API/ttrss.php @@ -4,16 +4,11 @@ require('../../constants.php'); require(LIB_PATH . '/lib_rss.php'); // Includes class autoloader -class MyPDO extends Minz_ModelPdo { - function prepare($sql) { - $sql = str_replace('%_', $this->prefix, $sql); - // Minz_Log::debug($sql); - return $this->bd->prepare($sql); - } +final class MyPDO extends Minz_ModelPdo { } -class FreshAPI_TTRSS { +final class FreshAPI_TTRSS { const API_LEVEL = 11; const STATUS_OK = 0; @@ -28,7 +23,7 @@ class FreshAPI_TTRSS { public function __construct($params) { $this->seq = isset($params['seq']) ? $params['seq'] : 0; - $this->user = Minz_Session::param('currentUser', ''); + $this->user = Minz_Session::paramString('currentUser'); $this->method = $params['op']; $this->params = $params; $this->system_conf = Minz_Configuration::get('system'); @@ -74,7 +69,7 @@ class FreshAPI_TTRSS { } if ($this->user === '' && - !in_array($this->method, array('login', 'isloggedin'))) { + !in_array($this->method, ['login', 'isloggedin'], true)) { $this->bad(array( 'error' => 'NOT_LOGGED_IN' )); @@ -121,7 +116,7 @@ class FreshAPI_TTRSS { public function login() { $username = $this->param('user'); $password = $this->param('password'); - $password_base64 = base64_decode($this->param('password')); + $password_base64 = base64_decode($this->param('password'), true); if ($this->auth_user($username, $password) || $this->auth_user($username, $password_base64)) { @@ -156,11 +151,13 @@ class FreshAPI_TTRSS { // $enable_nested = $this->param('enable_nested', true); // not supported $pdo = new MyPDO(); - $sql = 'SELECT DISTINCT c.id, c.name, COUNT(f.id) AS nb_feeds,' - . ' (SELECT COUNT(e.id) FROM %_entry e WHERE e.id_feed = f.id AND e.is_read=0) AS unread' - . ' FROM `%_category` c' - . ' LEFT JOIN `%_feed` f ON c.id = f.category' - . ' GROUP BY c.id, c.name'; + $sql = <<prepare($sql); $stm->execute(); $res = $stm->fetchAll(PDO::FETCH_ASSOC); @@ -332,7 +329,7 @@ class FreshAPI_TTRSS { 'title' => $item->title(), 'link' => $item->link(), 'tags' => $item->tags(), - 'author' => $item->author(), + 'author' => $item->authors(true), 'feed_id' => $feed->id(), 'feed_title' => $feed->name(), ); diff --git a/xExtension-TitleWrap/extension.php b/xExtension-TitleWrap/extension.php index 7e6c179..f07eebd 100644 --- a/xExtension-TitleWrap/extension.php +++ b/xExtension-TitleWrap/extension.php @@ -2,7 +2,8 @@ declare(strict_types=1); -class TitleWrapExtension extends Minz_Extension { +final class TitleWrapExtension extends Minz_Extension { + #[\Override] public function init(): void { Minz_View::appendStyle($this->getFileUrl('title_wrap.css', 'css')); } diff --git a/xExtension-TitleWrap/metadata.json b/xExtension-TitleWrap/metadata.json index ec77917..6e1de1a 100644 --- a/xExtension-TitleWrap/metadata.json +++ b/xExtension-TitleWrap/metadata.json @@ -2,7 +2,7 @@ "name": "Title-Wrap", "author": "₣rans de Jonge, Joris Kinable", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", - "version": "0.2.1", + "version": "0.2.2", "entrypoint": "TitleWrap", "type": "user" } diff --git a/xExtension-YouTube/extension.php b/xExtension-YouTube/extension.php index 03c536e..69a855e 100644 --- a/xExtension-YouTube/extension.php +++ b/xExtension-YouTube/extension.php @@ -7,7 +7,7 @@ * * @author Kevin Papst */ -class YouTubeExtension extends Minz_Extension +final class YouTubeExtension extends Minz_Extension { /** * Video player width @@ -26,25 +26,18 @@ class YouTubeExtension extends Minz_Extension */ private bool $useNoCookie = false; - public function install() { - return true; - } - - public function uninstall() { - return true; - } - /** * Initialize this extension */ - public function init() + #[\Override] + public function init(): void { - $this->registerHook('entry_before_display', array($this, 'embedYouTubeVideo')); - $this->registerHook('check_url_before_add', array($this, 'convertYoutubeFeedUrl')); + $this->registerHook('entry_before_display', [$this, 'embedYouTubeVideo']); + $this->registerHook('check_url_before_add', [self::class, 'convertYoutubeFeedUrl']); $this->registerTranslates(); } - public function convertYoutubeFeedUrl(string $url): string + public static function convertYoutubeFeedUrl(string $url): string { $matches = []; @@ -250,6 +243,7 @@ class YouTubeExtension extends Minz_Extension * - We save configuration in case of a post. * - We (re)load configuration in all case, so they are in-sync after a save and before a page load. */ + #[\Override] public function handleConfigureAction(): void { $this->registerTranslates(); diff --git a/xExtension-YouTube/metadata.json b/xExtension-YouTube/metadata.json index db9b34c..163d684 100644 --- a/xExtension-YouTube/metadata.json +++ b/xExtension-YouTube/metadata.json @@ -2,7 +2,7 @@ "name": "YouTube Video Feed", "author": "Kevin Papst", "description": "Embed YouTube feeds inside article content.", - "version": "0.10", + "version": "0.11", "entrypoint": "YouTube", "type": "user" } diff --git a/xExtension-showFeedID/extension.php b/xExtension-showFeedID/extension.php index bf4abea..f63a029 100644 --- a/xExtension-showFeedID/extension.php +++ b/xExtension-showFeedID/extension.php @@ -2,7 +2,8 @@ declare(strict_types=1); -class ShowFeedIdExtension extends Minz_Extension { +final class ShowFeedIdExtension extends Minz_Extension { + #[\Override] public function init(): void { Minz_View::appendScript($this->getFileUrl('showfeedid.js', 'js')); } diff --git a/xExtension-showFeedID/metadata.json b/xExtension-showFeedID/metadata.json index 9b7e26b..5cab022 100644 --- a/xExtension-showFeedID/metadata.json +++ b/xExtension-showFeedID/metadata.json @@ -2,7 +2,7 @@ "name": "ShowFeedID", "author": "math-GH", "description": "Show the feed ID", - "version": "0.2", + "version": "0.2.1", "entrypoint": "ShowFeedID", "type": "user" } From c82e1608a422d02227a92251e281d454d34f6b48 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 11 Apr 2024 11:19:12 +0000 Subject: [PATCH 37/72] Update extension list --- extensions.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/extensions.json b/extensions.json index 9df1b11..c3bd6ec 100644 --- a/extensions.json +++ b/extensions.json @@ -60,7 +60,7 @@ "name": "Colorful List", "author": "Claud Xiao", "description": "Colorful Entry Title based on RSS source", - "version": "0.3", + "version": "0.3.1", "entrypoint": "ColorfulList", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -93,7 +93,7 @@ "name": "Custom CSS", "author": "Marien Fressinaud", "description": "Give possibility to overwrite the CSS with a user-specific rules.", - "version": "0.5", + "version": "0.5.1", "entrypoint": "CustomCSS", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -104,7 +104,7 @@ "name": "Custom JS", "author": "Frans de Jonge", "description": "Apply custom JS.", - "version": "0.5", + "version": "0.5.1", "entrypoint": "CustomJS", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -203,7 +203,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.7.1", + "version": "0.7.2", "entrypoint": "ImageProxy", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -313,7 +313,7 @@ "name": "Quick Collapse", "author": "romibi and Marien Fressinaud", "description": "Quickly change from folded to unfolded articles", - "version": "0.2", + "version": "0.2.1", "entrypoint": "QuickCollapse", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -357,7 +357,7 @@ "name": "ReadingTime", "author": "Lapineige", "description": "Add a reading time estimation next to each article", - "version": "1.5", + "version": "1.5.1", "entrypoint": "ReadingTime", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -390,7 +390,7 @@ "name": "Share By Email", "author": "Marien Fressinaud", "description": "Improve the sharing by email system.", - "version": "0.2.1", + "version": "0.2.2", "entrypoint": "ShareByEmail", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -401,7 +401,7 @@ "name": "ShowFeedID", "author": "math-GH", "description": "Show the feed ID", - "version": "0.2", + "version": "0.2.1", "entrypoint": "ShowFeedID", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -423,7 +423,7 @@ "name": "Sticky Feeds", "author": "Marien Fressinaud", "description": "Set the feed aside in the main stream following the window scroll.", - "version": "0.2", + "version": "0.2.1", "entrypoint": "StickyFeeds", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -467,7 +467,7 @@ "name": "Title-Wrap", "author": "₣rans de Jonge, Joris Kinable", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", - "version": "0.2.1", + "version": "0.2.2", "entrypoint": "TitleWrap", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -523,7 +523,7 @@ "name": "YouTube Video Feed", "author": "Kevin Papst", "description": "Embed YouTube feeds inside article content.", - "version": "0.10", + "version": "0.11", "entrypoint": "YouTube", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From 5b38f5a9ba51480d995ee54699a1ab254f05fa2c Mon Sep 17 00:00:00 2001 From: maTh <1645099+math-GH@users.noreply.github.com> Date: Sat, 27 Apr 2024 22:57:21 +0200 Subject: [PATCH 38/72] Title wrap for 1.24.0 (#232) * legacy CSS for <1.24.0 * new CSS * switch for legacy CSS * vertical-align: top; * iterate version to 0.3 * typo --- xExtension-TitleWrap/README.md | 3 +- xExtension-TitleWrap/extension.php | 7 ++- xExtension-TitleWrap/metadata.json | 2 +- xExtension-TitleWrap/static/title_wrap.css | 44 +++++++++++-------- .../static/title_wrap.rtl.css | 44 +++++++++++-------- .../static/title_wrap_legacy.css | 25 +++++++++++ .../static/title_wrap_legacy.rtl.css | 25 +++++++++++ 7 files changed, 111 insertions(+), 39 deletions(-) create mode 100644 xExtension-TitleWrap/static/title_wrap_legacy.css create mode 100644 xExtension-TitleWrap/static/title_wrap_legacy.rtl.css diff --git a/xExtension-TitleWrap/README.md b/xExtension-TitleWrap/README.md index db170f1..304f6c4 100644 --- a/xExtension-TitleWrap/README.md +++ b/xExtension-TitleWrap/README.md @@ -5,8 +5,9 @@ this extension applies a line-wrap to long article titles. To use it, upload this directory in your `./extensions` directory and enable it on the extension panel in FreshRSS. If you need more control, use the xExtension-CustomCSS instead to specify your own css rules. -The css code used to wrap long titles was originally [proposed](https://github.com/FreshRSS/FreshRSS/issues/2344) by ₣rans de Jonge. +The CSS code (since 0.3 legacy) used to wrap long titles was originally [proposed](https://github.com/FreshRSS/FreshRSS/issues/2344) by ₣rans de Jonge. ## Changelog +- 0.3 ready for FreshRSS 1.23.2-dev (April 2023) / upcoming 1.24.0 - 0.1 initial version diff --git a/xExtension-TitleWrap/extension.php b/xExtension-TitleWrap/extension.php index f07eebd..5176d63 100644 --- a/xExtension-TitleWrap/extension.php +++ b/xExtension-TitleWrap/extension.php @@ -5,6 +5,11 @@ declare(strict_types=1); final class TitleWrapExtension extends Minz_Extension { #[\Override] public function init(): void { - Minz_View::appendStyle($this->getFileUrl('title_wrap.css', 'css')); + if (version_compare(FRESHRSS_VERSION, "1.23.1") > 0) { + Minz_View::appendStyle($this->getFileUrl('title_wrap.css', 'css')); + } else { + // legacy <1.24.0 (= 1.23.2-dev) + Minz_View::appendStyle($this->getFileUrl('title_wrap_legacy.css', 'css')); + } } } diff --git a/xExtension-TitleWrap/metadata.json b/xExtension-TitleWrap/metadata.json index 6e1de1a..ca52895 100644 --- a/xExtension-TitleWrap/metadata.json +++ b/xExtension-TitleWrap/metadata.json @@ -2,7 +2,7 @@ "name": "Title-Wrap", "author": "₣rans de Jonge, Joris Kinable", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", - "version": "0.2.2", + "version": "0.3.0", "entrypoint": "TitleWrap", "type": "user" } diff --git a/xExtension-TitleWrap/static/title_wrap.css b/xExtension-TitleWrap/static/title_wrap.css index 3bce8fb..84a104a 100644 --- a/xExtension-TitleWrap/static/title_wrap.css +++ b/xExtension-TitleWrap/static/title_wrap.css @@ -1,25 +1,33 @@ -.horizontal-list { - display: flex; -} - -.horizontal-list.bottom { - display: table; -} - .flux .flux_header .item { - flex-shrink: 0; - line-height: normal; + vertical-align: top; } -.flux .flux_header .item > a { - white-space: normal; -} - -.flux:not(.current):hover .flux_header .item.title { +.flux .flux_header .item .title { position: relative; - max-width: inherit; } -.flux .flux_header .title { - flex: auto; +.flux .flux_header .item.website .websiteName, +.flux .flux_header .item .title { + white-space: wrap; +} + +.flux .flux_header .item .summary { + margin-top: -0.5rem; +} + +.flux:not(.current):hover .flux_header .item .date { + opacity: inherit; +} + +.flux:not(.current):hover .flux_header .item .title:has(~ .date) { + padding-right: 155px; + z-index: auto; +} + +@media (max-width: 840px) { + .flux:not(.current) .flux_header .item.titleAuthorSummaryDate .title:has(~ .date), + .flux:not(.current):hover .flux_header .item.titleAuthorSummaryDate .title:has(~ .date) { + padding-right: 0; + padding-left: 0; + } } diff --git a/xExtension-TitleWrap/static/title_wrap.rtl.css b/xExtension-TitleWrap/static/title_wrap.rtl.css index 3bce8fb..4f5b4e4 100644 --- a/xExtension-TitleWrap/static/title_wrap.rtl.css +++ b/xExtension-TitleWrap/static/title_wrap.rtl.css @@ -1,25 +1,33 @@ -.horizontal-list { - display: flex; -} - -.horizontal-list.bottom { - display: table; -} - .flux .flux_header .item { - flex-shrink: 0; - line-height: normal; + vertical-align: top; } -.flux .flux_header .item > a { - white-space: normal; -} - -.flux:not(.current):hover .flux_header .item.title { +.flux .flux_header .item .title { position: relative; - max-width: inherit; } -.flux .flux_header .title { - flex: auto; +.flux .flux_header .item.website .websiteName, +.flux .flux_header .item .title { + white-space: wrap; +} + +.flux .flux_header .item .summary { + margin-top: -0.5rem; +} + +.flux:not(.current):hover .flux_header .item .date { + opacity: inherit; +} + +.flux:not(.current):hover .flux_header .item .title:has(~ .date) { + padding-left: 155px; + z-index: auto; +} + +@media (max-width: 840px) { + .flux:not(.current) .flux_header .item.titleAuthorSummaryDate .title:has(~ .date), + .flux:not(.current):hover .flux_header .item.titleAuthorSummaryDate .title:has(~ .date) { + padding-left: 0; + padding-right: 0; + } } diff --git a/xExtension-TitleWrap/static/title_wrap_legacy.css b/xExtension-TitleWrap/static/title_wrap_legacy.css new file mode 100644 index 0000000..3bce8fb --- /dev/null +++ b/xExtension-TitleWrap/static/title_wrap_legacy.css @@ -0,0 +1,25 @@ +.horizontal-list { + display: flex; +} + +.horizontal-list.bottom { + display: table; +} + +.flux .flux_header .item { + flex-shrink: 0; + line-height: normal; +} + +.flux .flux_header .item > a { + white-space: normal; +} + +.flux:not(.current):hover .flux_header .item.title { + position: relative; + max-width: inherit; +} + +.flux .flux_header .title { + flex: auto; +} diff --git a/xExtension-TitleWrap/static/title_wrap_legacy.rtl.css b/xExtension-TitleWrap/static/title_wrap_legacy.rtl.css new file mode 100644 index 0000000..3bce8fb --- /dev/null +++ b/xExtension-TitleWrap/static/title_wrap_legacy.rtl.css @@ -0,0 +1,25 @@ +.horizontal-list { + display: flex; +} + +.horizontal-list.bottom { + display: table; +} + +.flux .flux_header .item { + flex-shrink: 0; + line-height: normal; +} + +.flux .flux_header .item > a { + white-space: normal; +} + +.flux:not(.current):hover .flux_header .item.title { + position: relative; + max-width: inherit; +} + +.flux .flux_header .title { + flex: auto; +} From 71de129744ba37fd4cf363b78445f5345bc6d0b7 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sat, 27 Apr 2024 20:58:32 +0000 Subject: [PATCH 39/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index c3bd6ec..21155d6 100644 --- a/extensions.json +++ b/extensions.json @@ -467,7 +467,7 @@ "name": "Title-Wrap", "author": "₣rans de Jonge, Joris Kinable", "description": "Applies a line-wrap to long article titles, as opposed to truncating the title when it overflows its display area.", - "version": "0.2.2", + "version": "0.3.0", "entrypoint": "TitleWrap", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From c6ef22d1369015b89e6bcd1c0c470fa7c5e3949f Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 29 Apr 2024 11:19:44 +0000 Subject: [PATCH 40/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 21155d6..9df88d5 100644 --- a/extensions.json +++ b/extensions.json @@ -148,7 +148,7 @@ "name": "FilterTitle", "author": "CNTools | Clemens Neubauer", "description": "Filter feed entries by filter keywords in title", - "version": "0.0.3", + "version": "0.1.0", "entrypoint": "FilterTitle", "type": "system", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From 34525b1b7c9bc137f8c2b0ca65878fb52be001ff Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 3 May 2024 11:18:22 +0000 Subject: [PATCH 41/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 9df88d5..ce90178 100644 --- a/extensions.json +++ b/extensions.json @@ -71,7 +71,7 @@ "name": "Comics in feed", "author": "José Moreira", "description": "Embed the images from comics feeds directly.", - "version": "1.5.0", + "version": "1.5.1", "entrypoint": "ComicsInFeed", "type": "system", "url": "https://github.com/giventofly/freshrss-comicsinfeed", From b5a2648351a03a507cc94e53679eb523f60dac4d Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 6 May 2024 11:18:27 +0000 Subject: [PATCH 42/72] Update extension list --- extensions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions.json b/extensions.json index ce90178..ce2423a 100644 --- a/extensions.json +++ b/extensions.json @@ -533,8 +533,8 @@ { "name": "YouTubeChannel2RssFeed", "author": "CNTools | Clemens Neubauer", - "description": "Transfer YouTube Channel URL into RSS Feed URL.", - "version": "0.5", + "description": "Transfer YouTube URL into RSS Feed URL.", + "version": "0.6.0-alpha", "entrypoint": "YouTubeChannel2RssFeed", "type": "user", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From c3dce5b2a5aebb25df1ee74884a96279775adc09 Mon Sep 17 00:00:00 2001 From: Ramazan Sancar Date: Tue, 7 May 2024 09:56:03 +0300 Subject: [PATCH 43/72] add: Turkish language support added for 6 extensions (#235) * add: Turkish language support added for 6 extensions * Revert unrelated changes * Minimize unrelated markdown changes --------- Co-authored-by: Alexandre Alapetite Co-authored-by: Alexandre Alapetite --- xExtension-CustomCSS/README.md | 1 + xExtension-CustomCSS/i18n/tr/ext.php | 8 +++++++ xExtension-CustomCSS/metadata.json | 2 +- xExtension-CustomJS/README.md | 1 + xExtension-CustomJS/i18n/tr/ext.php | 8 +++++++ xExtension-CustomJS/metadata.json | 2 +- xExtension-ImageProxy/README.md | 4 ++++ xExtension-ImageProxy/i18n/tr/ext.php | 12 ++++++++++ xExtension-ImageProxy/metadata.json | 2 +- xExtension-QuickCollapse/README.md | 1 + xExtension-QuickCollapse/i18n/tr/gen.php | 7 ++++++ xExtension-QuickCollapse/metadata.json | 2 +- xExtension-ShareByEmail/README.md | 1 + .../i18n/tr/shareByEmail.php | 22 +++++++++++++++++++ xExtension-ShareByEmail/metadata.json | 2 +- xExtension-YouTube/README.md | 3 +++ xExtension-YouTube/i18n/tr/ext.php | 11 ++++++++++ xExtension-YouTube/metadata.json | 2 +- 18 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 xExtension-CustomCSS/i18n/tr/ext.php create mode 100644 xExtension-CustomJS/i18n/tr/ext.php create mode 100644 xExtension-ImageProxy/i18n/tr/ext.php create mode 100644 xExtension-QuickCollapse/i18n/tr/gen.php create mode 100644 xExtension-ShareByEmail/i18n/tr/shareByEmail.php create mode 100644 xExtension-YouTube/i18n/tr/ext.php diff --git a/xExtension-CustomCSS/README.md b/xExtension-CustomCSS/README.md index fc71979..8dd3b79 100644 --- a/xExtension-CustomCSS/README.md +++ b/xExtension-CustomCSS/README.md @@ -6,6 +6,7 @@ To use it, upload this directory in your `./extensions` directory and enable it ## Changelog +- 0.5.2 Turkish language support added - 0.2 added file permission check, added german translation, removed un-editable file static/style.css - 0.1 initial version diff --git a/xExtension-CustomCSS/i18n/tr/ext.php b/xExtension-CustomCSS/i18n/tr/ext.php new file mode 100644 index 0000000..67240da --- /dev/null +++ b/xExtension-CustomCSS/i18n/tr/ext.php @@ -0,0 +1,8 @@ + array( + 'write_css' => 'Ek CSS kuralları', + 'permission_problem' => 'CSS dosyanız yazılabilir değil, lütfen %s için dosya izinlerini değiştirin', + ), +); diff --git a/xExtension-CustomCSS/metadata.json b/xExtension-CustomCSS/metadata.json index 0646334..6d6aefb 100644 --- a/xExtension-CustomCSS/metadata.json +++ b/xExtension-CustomCSS/metadata.json @@ -2,7 +2,7 @@ "name": "Custom CSS", "author": "Marien Fressinaud", "description": "Give possibility to overwrite the CSS with a user-specific rules.", - "version": "0.5.1", + "version": "0.5.2", "entrypoint": "CustomCSS", "type": "user" } diff --git a/xExtension-CustomJS/README.md b/xExtension-CustomJS/README.md index 6227bbc..9d63c9d 100644 --- a/xExtension-CustomJS/README.md +++ b/xExtension-CustomJS/README.md @@ -6,5 +6,6 @@ To use it, upload this directory in your `./extensions` directory and enable it ## Changelog +- 0.5.2 Turkish language support added - 0.2 added file permission check and german translation - 0.1 initial version diff --git a/xExtension-CustomJS/i18n/tr/ext.php b/xExtension-CustomJS/i18n/tr/ext.php new file mode 100644 index 0000000..1948f33 --- /dev/null +++ b/xExtension-CustomJS/i18n/tr/ext.php @@ -0,0 +1,8 @@ + array( + 'write_js' => 'EK JS', + 'permission_problem' => 'JS dosyanız yazılabilir değil, lütfen %s için dosya izinlerini değiştirin', + ), +); diff --git a/xExtension-CustomJS/metadata.json b/xExtension-CustomJS/metadata.json index c21e77e..90b3dfc 100644 --- a/xExtension-CustomJS/metadata.json +++ b/xExtension-CustomJS/metadata.json @@ -2,7 +2,7 @@ "name": "Custom JS", "author": "Frans de Jonge", "description": "Apply custom JS.", - "version": "0.5.1", + "version": "0.5.2", "entrypoint": "CustomJS", "type": "user" } diff --git a/xExtension-ImageProxy/README.md b/xExtension-ImageProxy/README.md index 6277b80..493be3d 100644 --- a/xExtension-ImageProxy/README.md +++ b/xExtension-ImageProxy/README.md @@ -4,6 +4,10 @@ This FreshRSS extension allows you to get rid of insecure content warnings or di To use it, upload this entire directory to the FreshRSS `./extensions` directory on your server and enable it on the extension panel in FreshRSS. +## Changelog + +* 0.7.3 Turkish language support added + ## Configuration settings * `proxy_url` (default: `https://images.example.com/?url=`): the URL that is prependended to the original image URL diff --git a/xExtension-ImageProxy/i18n/tr/ext.php b/xExtension-ImageProxy/i18n/tr/ext.php new file mode 100644 index 0000000..b9d1d4d --- /dev/null +++ b/xExtension-ImageProxy/i18n/tr/ext.php @@ -0,0 +1,12 @@ + array( + 'proxy_url' => 'Vekil Bağlantısı', + 'scheme_http' => 'HTTP Vekil Sunucusu', + 'scheme_https' => 'HTTPS Vekil Sunucusu', + 'scheme_default' => 'Belirtilmemiş Vekil Sunucusu', + 'scheme_include' => 'Bağlantıya http*:// ekle', + 'url_encode' => 'Bağlantıyı kodla', + ), +); diff --git a/xExtension-ImageProxy/metadata.json b/xExtension-ImageProxy/metadata.json index cda5bd5..2e42bee 100644 --- a/xExtension-ImageProxy/metadata.json +++ b/xExtension-ImageProxy/metadata.json @@ -2,7 +2,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.7.2", + "version": "0.7.3", "entrypoint": "ImageProxy", "type": "user" } diff --git a/xExtension-QuickCollapse/README.md b/xExtension-QuickCollapse/README.md index 987a513..d7a657e 100644 --- a/xExtension-QuickCollapse/README.md +++ b/xExtension-QuickCollapse/README.md @@ -6,4 +6,5 @@ To install this extension, you must upload this directory in your `./extensions` ## Changelog +- 0.2.2 Turkish language support added - 0.1 initial version diff --git a/xExtension-QuickCollapse/i18n/tr/gen.php b/xExtension-QuickCollapse/i18n/tr/gen.php new file mode 100644 index 0000000..2e54b35 --- /dev/null +++ b/xExtension-QuickCollapse/i18n/tr/gen.php @@ -0,0 +1,7 @@ + [ + 'toggle_collapse' => 'Daraltmayı değiştir', + ], +]; diff --git a/xExtension-QuickCollapse/metadata.json b/xExtension-QuickCollapse/metadata.json index dc6a113..256ba23 100644 --- a/xExtension-QuickCollapse/metadata.json +++ b/xExtension-QuickCollapse/metadata.json @@ -2,7 +2,7 @@ "name": "Quick Collapse", "author": "romibi and Marien Fressinaud", "description": "Quickly change from folded to unfolded articles", - "version": "0.2.1", + "version": "0.2.2", "entrypoint": "QuickCollapse", "type": "user" } diff --git a/xExtension-ShareByEmail/README.md b/xExtension-ShareByEmail/README.md index b873ae3..d6a4c19 100644 --- a/xExtension-ShareByEmail/README.md +++ b/xExtension-ShareByEmail/README.md @@ -8,4 +8,5 @@ You’ll have to configure the mailing system in FreshRSS. [See the documentatio ## Changelog +- 0.2.3 Turkish language support added - 0.1 initial version diff --git a/xExtension-ShareByEmail/i18n/tr/shareByEmail.php b/xExtension-ShareByEmail/i18n/tr/shareByEmail.php new file mode 100644 index 0000000..21248e3 --- /dev/null +++ b/xExtension-ShareByEmail/i18n/tr/shareByEmail.php @@ -0,0 +1,22 @@ + [ + 'feedback' => [ + 'failed' => 'E-posta gönderilemiyor, lütfen yöneticinizle iletişime geçin.', + 'fields_required' => 'Tüm alanların doldurulması zorunludur.', + 'sent' => 'E-posta gönderildi.', + ], + 'form' => [ + 'cancel' => 'İptal', + 'content' => 'İçerik', + 'content_default' => "Merhaba,\n\nBu makaleyi oldukça ilginç bulabilirsiniz!\n\n%s – %s\n\n---\n\nBu e-posta %s tarafından %s ( %s ) aracılığıyla gönderildi", + 'send' => 'Gönder', + 'subject' => 'Konu', + 'subject_default' => 'Bu makaleyi ilginç buldum!', + 'to' => 'Kime', + ], + 'intro' => 'Bu makaleyi e-posta yoluyla paylaşmak üzeresiniz: “%s”', + 'title' => 'Bir makaleyi e-posta ile paylaşın', + ], +]; diff --git a/xExtension-ShareByEmail/metadata.json b/xExtension-ShareByEmail/metadata.json index fd9d5ab..265331f 100644 --- a/xExtension-ShareByEmail/metadata.json +++ b/xExtension-ShareByEmail/metadata.json @@ -2,7 +2,7 @@ "name": "Share By Email", "author": "Marien Fressinaud", "description": "Improve the sharing by email system.", - "version": "0.2.2", + "version": "0.2.3", "entrypoint": "ShareByEmail", "type": "user" } diff --git a/xExtension-YouTube/README.md b/xExtension-YouTube/README.md index dea6506..4116e36 100644 --- a/xExtension-YouTube/README.md +++ b/xExtension-YouTube/README.md @@ -23,6 +23,9 @@ With activated Youtube extension: ## Changelog +0.12: +- Turkish language support added + 0.11: - Modernized codebase for latest FreshRSS release 1.23.1 - Moved from [custom repo](https://github.com/kevinpapst/freshrss-youtube) to FreshRSS official extension repo diff --git a/xExtension-YouTube/i18n/tr/ext.php b/xExtension-YouTube/i18n/tr/ext.php new file mode 100644 index 0000000..a206d2f --- /dev/null +++ b/xExtension-YouTube/i18n/tr/ext.php @@ -0,0 +1,11 @@ + array( + 'height' => 'Oynatıcı yükseklik', + 'width' => 'Oynatıcı genişlik', + 'updates' => 'En son uzantı sürümünü şu adreste bulabilirsiniz:', + 'show_content' => 'Yayın içeriğini görüntüle', + 'use_nocookie' => 'Çerezsiz olan "www.youtube-nocookie.com" alan adını kullanın', + ), +); diff --git a/xExtension-YouTube/metadata.json b/xExtension-YouTube/metadata.json index 163d684..ea78555 100644 --- a/xExtension-YouTube/metadata.json +++ b/xExtension-YouTube/metadata.json @@ -2,7 +2,7 @@ "name": "YouTube Video Feed", "author": "Kevin Papst", "description": "Embed YouTube feeds inside article content.", - "version": "0.11", + "version": "0.12", "entrypoint": "YouTube", "type": "user" } From 097817cd88c6bc0fd32457b0941ea3499dcb6a03 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 7 May 2024 11:20:41 +0000 Subject: [PATCH 44/72] Update extension list --- extensions.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/extensions.json b/extensions.json index ce2423a..e4f73f2 100644 --- a/extensions.json +++ b/extensions.json @@ -93,7 +93,7 @@ "name": "Custom CSS", "author": "Marien Fressinaud", "description": "Give possibility to overwrite the CSS with a user-specific rules.", - "version": "0.5.1", + "version": "0.5.2", "entrypoint": "CustomCSS", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -104,7 +104,7 @@ "name": "Custom JS", "author": "Frans de Jonge", "description": "Apply custom JS.", - "version": "0.5.1", + "version": "0.5.2", "entrypoint": "CustomJS", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -203,7 +203,7 @@ "name": "Image Proxy", "author": "Frans de Jonge", "description": "No insecure content warnings or disappearing images.", - "version": "0.7.2", + "version": "0.7.3", "entrypoint": "ImageProxy", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -313,7 +313,7 @@ "name": "Quick Collapse", "author": "romibi and Marien Fressinaud", "description": "Quickly change from folded to unfolded articles", - "version": "0.2.1", + "version": "0.2.2", "entrypoint": "QuickCollapse", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -390,7 +390,7 @@ "name": "Share By Email", "author": "Marien Fressinaud", "description": "Improve the sharing by email system.", - "version": "0.2.2", + "version": "0.2.3", "entrypoint": "ShareByEmail", "type": "user", "url": "https://github.com/FreshRSS/Extensions", @@ -523,7 +523,7 @@ "name": "YouTube Video Feed", "author": "Kevin Papst", "description": "Embed YouTube feeds inside article content.", - "version": "0.11", + "version": "0.12", "entrypoint": "YouTube", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From 70c1d7526f26eb444deab5441a04ab3542c244eb Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 10 May 2024 11:19:06 +0000 Subject: [PATCH 45/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index e4f73f2..bf6e72a 100644 --- a/extensions.json +++ b/extensions.json @@ -291,7 +291,7 @@ "name": "News Assistant", "author": "Mervyn Zhan", "description": "Using the ai api of `OpenAI`, `Anthropic`, `Groq` by [Portkey-AI/gateway](https://github.com/Portkey-AI/gateway/) to summary the news.", - "version": "0.11.0", + "version": "0.11.1", "entrypoint": "NewsAssistant", "type": "system", "url": "https://github.com/reply2future/xExtension-NewsAssistant", From c0e85774f00fc67b9835ff17f2fe6de45cc6d574 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 13 May 2024 11:41:29 +0000 Subject: [PATCH 46/72] Update extension list --- extensions.json | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/extensions.json b/extensions.json index bf6e72a..ce4934d 100644 --- a/extensions.json +++ b/extensions.json @@ -1,17 +1,6 @@ { "version": 0.1, "extensions": [ - { - "name": "Always togglable menu", - "author": "nicofrand", - "description": "This makes the icon to toggle the menu always shown, even on larger screens.", - "version": "1.2", - "entrypoint": "TogglableMenu", - "type": "user", - "url": "https://framagit.org/nicofrand/xextension-togglablemenu", - "method": "git", - "directory": "." - }, { "name": "Auto Refresh", "author": "Essa AlAwadi", @@ -342,17 +331,6 @@ "method": "git", "directory": "." }, - { - "name": "Reading Time", - "author": "Lapineige", - "description": "Add a reading time estimation next to each article title", - "version": "1.5", - "entrypoint": "ReadingTime", - "type": "user", - "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", - "method": "git", - "directory": "." - }, { "name": "ReadingTime", "author": "Lapineige", From cc5d4a339db799e9f5c2196f8b4017b20d490649 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 14 May 2024 11:19:17 +0000 Subject: [PATCH 47/72] Update extension list --- extensions.json | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/extensions.json b/extensions.json index ce4934d..bf6e72a 100644 --- a/extensions.json +++ b/extensions.json @@ -1,6 +1,17 @@ { "version": 0.1, "extensions": [ + { + "name": "Always togglable menu", + "author": "nicofrand", + "description": "This makes the icon to toggle the menu always shown, even on larger screens.", + "version": "1.2", + "entrypoint": "TogglableMenu", + "type": "user", + "url": "https://framagit.org/nicofrand/xextension-togglablemenu", + "method": "git", + "directory": "." + }, { "name": "Auto Refresh", "author": "Essa AlAwadi", @@ -331,6 +342,17 @@ "method": "git", "directory": "." }, + { + "name": "Reading Time", + "author": "Lapineige", + "description": "Add a reading time estimation next to each article title", + "version": "1.5", + "entrypoint": "ReadingTime", + "type": "user", + "url": "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime/", + "method": "git", + "directory": "." + }, { "name": "ReadingTime", "author": "Lapineige", From c78e0a3cf15901086539da29f3096482c5a65522 Mon Sep 17 00:00:00 2001 From: Clemens Neubauer Date: Thu, 16 May 2024 10:33:00 +0200 Subject: [PATCH 48/72] xExtension-showFeedID: show IDs of category too (#237) * Show IDs of category too * Change description and increase the version number * fix 3 problems --- xExtension-showFeedID/metadata.json | 4 ++-- xExtension-showFeedID/static/showfeedid.js | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xExtension-showFeedID/metadata.json b/xExtension-showFeedID/metadata.json index 5cab022..3ffcf4c 100644 --- a/xExtension-showFeedID/metadata.json +++ b/xExtension-showFeedID/metadata.json @@ -1,8 +1,8 @@ { "name": "ShowFeedID", "author": "math-GH", - "description": "Show the feed ID", - "version": "0.2.1", + "description": "Show the ID of feed and category", + "version": "0.3.0", "entrypoint": "ShowFeedID", "type": "user" } diff --git a/xExtension-showFeedID/static/showfeedid.js b/xExtension-showFeedID/static/showfeedid.js index 6811f1e..5c3de73 100644 --- a/xExtension-showFeedID/static/showfeedid.js +++ b/xExtension-showFeedID/static/showfeedid.js @@ -7,7 +7,7 @@ if (url.searchParams.get('c') === 'subscription') { button.classList.add('btn'); button.id = 'showFeedId'; - button.innerHTML = ' FeedID'; + button.innerHTML = ' Show IDs'; div.appendChild(button); document.getElementById('showFeedId').addEventListener('click', function (e) { @@ -22,5 +22,17 @@ if (url.searchParams.get('c') === 'subscription') { feedname_elem.innerHTML = feedname_elem.textContent + ' (ID: ' + feedId + ')'; } }); + + const cats = document.querySelectorAll('div.box > ul.box-content'); + + let catId; + let catname_elem; + cats.forEach(function (cat) { + catId = cat.dataset.catId; + catname_elem = cat.parentElement.querySelectorAll('div.box-title > h2')[0]; + if (catname_elem) { + catname_elem.innerHTML = catname_elem.textContent + ' (ID: ' + catId + ')'; + } + }); }); } From ff1343e0ef87e9771e744ce1a5965cef59bfe3b4 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 16 May 2024 11:19:56 +0000 Subject: [PATCH 49/72] Update extension list --- extensions.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions.json b/extensions.json index bf6e72a..c7bc5b3 100644 --- a/extensions.json +++ b/extensions.json @@ -192,7 +192,7 @@ "name": "Image Cache", "author": "Victrid", "description": "Cache feed images on your own facility or Cloudflare cache.", - "version": "0.3", + "version": "0.4.0", "entrypoint": "ImageCache", "type": "user", "url": "https://github.com/Victrid/freshrss-image-cache-plugin", @@ -400,8 +400,8 @@ { "name": "ShowFeedID", "author": "math-GH", - "description": "Show the feed ID", - "version": "0.2.1", + "description": "Show the ID of feed and category", + "version": "0.3.0", "entrypoint": "ShowFeedID", "type": "user", "url": "https://github.com/FreshRSS/Extensions", From 119c1e210f734efdb8af2dbebfa084c3490c2053 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 21 May 2024 11:20:53 +0000 Subject: [PATCH 50/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index c7bc5b3..0e5dd2d 100644 --- a/extensions.json +++ b/extensions.json @@ -269,7 +269,7 @@ "name": "Mark Previous as Read", "author": "kalvn", "description": "This extension adds a button in the footer of each entry. Clicking this button will mark all previous entries belonging to the current feed, as read. The goal is, when going through a very long list of entries without reading them all, to be able to stop and continue later.", - "version": "1.0.1", + "version": "1.1.0", "entrypoint": "MarkPreviousAsRead", "type": "user", "url": "https://github.com/kalvn/freshrss-mark-previous-as-read", From 464e242e19ae3894de13c4885aa918f607faf77d Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sun, 26 May 2024 11:18:44 +0000 Subject: [PATCH 51/72] Update extension list --- extensions.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions.json b/extensions.json index 0e5dd2d..d575ec3 100644 --- a/extensions.json +++ b/extensions.json @@ -268,8 +268,8 @@ { "name": "Mark Previous as Read", "author": "kalvn", - "description": "This extension adds a button in the footer of each entry. Clicking this button will mark all previous entries belonging to the current feed, as read. The goal is, when going through a very long list of entries without reading them all, to be able to stop and continue later.", - "version": "1.1.0", + "description": "This extension adds a button in the footer of each entry. Clicking this button will mark all previous entries as read.", + "version": "1.1.1", "entrypoint": "MarkPreviousAsRead", "type": "user", "url": "https://github.com/kalvn/freshrss-mark-previous-as-read", From 1c12c0b4b0dd0858651e460fde540a1e6e1d6e3c Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 27 May 2024 11:20:12 +0000 Subject: [PATCH 52/72] Update extension list --- extensions.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index d575ec3..e39545e 100644 --- a/extensions.json +++ b/extensions.json @@ -170,7 +170,7 @@ "name": "FreshRss FlareSolverr", "author": "James Ravenscroft", "description": "Use a Flaresolverr instance to bypass cloudflare security checks", - "version": "0.1", + "version": "0.2", "entrypoint": "FlareSolverr", "type": "system", "url": "https://github.com/ravenscroftj/freshrss-flaresolverr-extension", @@ -386,6 +386,17 @@ "method": "git", "directory": "xExtension-RemoveEmojis" }, + { + "name": "SendToMyJD2", + "author": "CNTools | Clemens Neubauer", + "description": "Send links to a jDownloader2 instance with the myJDownloader2 API", + "version": "0.0.1-alpha", + "entrypoint": "SendToMyJD2", + "type": "user", + "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", + "method": "git", + "directory": "xExtension-SendToMyJD2" + }, { "name": "Share By Email", "author": "Marien Fressinaud", From 96288e92ab79448c13c20d30c57dc5b21baa8c7a Mon Sep 17 00:00:00 2001 From: Clemens Neubauer Date: Thu, 30 May 2024 11:05:42 +0200 Subject: [PATCH 53/72] add links of new extensions and update description (#241) --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 250b192..e80104b 100644 --- a/README.md +++ b/README.md @@ -56,11 +56,13 @@ There are some FreshRSS extensions out there, developed by community members: ### By [@CN-Tools](https://github.com/cn-tools) +* [Black List](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-BlackList): Blacklist to block feeds for users * [Copy 2 Clipboard](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-Copy2Clipboard): Add a button in the navigation bar to copy the destination links of all visible entries into clipboard * [Feed Title Builder](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-FeedTitleBuilder): Build your own feed title based on url, the original feed title and the date the feed was added * [FilterTitle](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-FilterTitle): Filter out feed entries by keywords parsed by the feed entry title -* [RemoveEmojis](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-RemoveEmojis): Remove emojis in the title of newly added feed entries. -* [YouTube Channel 2 RSSFeed](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-YouTubeChannel2RssFeed): You can add a YouTube Channel URL and will get it as RSSFeed +* [RemoveEmojis](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-RemoveEmojis): Remove emojis in the title of newly added feed entries +* [SendToMyJD2](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-SendToMyJD2): Send links to a jDownloader2 instance with the myJDownloader2 API +* [YouTube Channel 2 RSSFeed](https://github.com/cn-tools/cntools_FreshRssExtensions/tree/master/xExtension-YouTubeChannel2RssFeed): You can add a YouTube Channel URL and will get it as RSSFeed. Additional you can detect YouTube shorts. ### By [@DevonHess](https://github.com/DevonHess) From e779fd1c82183dc6517d6a01740e52ff57244e47 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 3 Jun 2024 11:19:39 +0000 Subject: [PATCH 54/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index e39545e..379c80c 100644 --- a/extensions.json +++ b/extensions.json @@ -545,7 +545,7 @@ "name": "YouTubeChannel2RssFeed", "author": "CNTools | Clemens Neubauer", "description": "Transfer YouTube URL into RSS Feed URL.", - "version": "0.6.0-alpha", + "version": "0.6.1", "entrypoint": "YouTubeChannel2RssFeed", "type": "user", "url": "https://github.com/cn-tools/cntools_FreshRssExtensions", From 64b5ac4abeec90edf9f8c855d0aa0238907eba1e Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 14 Jun 2024 11:19:51 +0000 Subject: [PATCH 55/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 379c80c..d607984 100644 --- a/extensions.json +++ b/extensions.json @@ -291,7 +291,7 @@ "name": "News Assistant", "author": "Mervyn Zhan", "description": "Using the ai api of `OpenAI`, `Anthropic`, `Groq` by [Portkey-AI/gateway](https://github.com/Portkey-AI/gateway/) to summary the news.", - "version": "0.11.1", + "version": "0.11.2", "entrypoint": "NewsAssistant", "type": "system", "url": "https://github.com/reply2future/xExtension-NewsAssistant", From f845a6d085233a69bd7061f8ab01ce09050a9167 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Thu, 1 Aug 2024 20:31:57 +0200 Subject: [PATCH 56/72] Align CI rules with main FreshRSS repository (#243) * Align CI rules with main FreshRSS repository Including: * https://github.com/FreshRSS/FreshRSS/pull/6666 * https://github.com/FreshRSS/FreshRSS/pull/6668 * Sync FreshRSS --- .markdownlint.json | 3 +- .stylelintrc.json | 22 +- composer.lock | 40 +- package-lock.json | 2153 +++++++++++++++++--------------------- package.json | 18 +- phpcs.xml | 158 ++- phpstan-third-party.neon | 2 +- phpstan.neon | 9 +- 8 files changed, 1096 insertions(+), 1309 deletions(-) diff --git a/.markdownlint.json b/.markdownlint.json index c6961a7..0596513 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -6,11 +6,12 @@ "line-length": false, "no-hard-tabs": false, "no-inline-html": { - "allowed_elements": ["br", "kbd"] + "allowed_elements": ["br", "img", "kbd"] }, "no-multiple-blanks": { "maximum": 2 }, + "no-trailing-spaces": true, "ul-indent": false, "ul-style": { "style": "consistent" diff --git a/.stylelintrc.json b/.stylelintrc.json index 05d07ca..7005633 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -3,7 +3,7 @@ "plugins": [ "stylelint-order", "stylelint-scss", - "stylelint-stylistic" + "@stylistic/stylelint-plugin" ], "rules": { "at-rule-empty-line-before": [ @@ -11,27 +11,27 @@ "ignoreAtRules": [ "after-comment", "else" ] } ], - "stylistic/at-rule-name-space-after": [ + "@stylistic/at-rule-name-space-after": [ "always", { "ignoreAtRules": [ "after-comment" ] } ], - "stylistic/block-closing-brace-newline-after": [ + "@stylistic/block-closing-brace-newline-after": [ "always", { "ignoreAtRules": [ "if", "else" ] } ], - "stylistic/block-closing-brace-newline-before": "always-multi-line", - "stylistic/block-opening-brace-newline-after": "always-multi-line", - "stylistic/block-opening-brace-space-before": "always", - "stylistic/color-hex-case": "lower", + "@stylistic/block-closing-brace-newline-before": "always-multi-line", + "@stylistic/block-opening-brace-newline-after": "always-multi-line", + "@stylistic/block-opening-brace-space-before": "always", + "@stylistic/color-hex-case": "lower", "color-hex-length": "short", "color-no-invalid-hex": true, - "stylistic/declaration-colon-space-after": "always", - "stylistic/declaration-colon-space-before": "never", - "stylistic/indentation": "tab", + "@stylistic/declaration-colon-space-after": "always", + "@stylistic/declaration-colon-space-before": "never", + "@stylistic/indentation": "tab", "no-descending-specificity": null, - "stylistic/no-eol-whitespace": true, + "@stylistic/no-eol-whitespace": true, "property-no-vendor-prefix": true, "rule-empty-line-before": [ "always", { diff --git a/composer.lock b/composer.lock index 4a2e5eb..c0dbac4 100644 --- a/composer.lock +++ b/composer.lock @@ -9,16 +9,16 @@ "packages-dev": [ { "name": "phpstan/phpstan", - "version": "1.10.66", + "version": "1.11.8", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "94779c987e4ebd620025d9e5fdd23323903950bd" + "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/94779c987e4ebd620025d9e5fdd23323903950bd", - "reference": "94779c987e4ebd620025d9e5fdd23323903950bd", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", + "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", "shasum": "" }, "require": { @@ -61,31 +61,27 @@ { "url": "https://github.com/phpstan", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" } ], - "time": "2024-03-28T16:17:31+00:00" + "time": "2024-07-24T07:01:22+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.5.3", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b" + "reference": "363f921dd8441777d4fc137deb99beb486c77df1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/568210bd301f94a0d4b1e5a0808c374c1b9cf11b", - "reference": "568210bd301f94a0d4b1e5a0808c374c1b9cf11b", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/363f921dd8441777d4fc137deb99beb486c77df1", + "reference": "363f921dd8441777d4fc137deb99beb486c77df1", "shasum": "" }, "require": { "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.60" + "phpstan/phpstan": "^1.11" }, "require-dev": { "nikic/php-parser": "^4.13.0", @@ -114,22 +110,22 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.3" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.0" }, - "time": "2024-04-06T07:43:25+00:00" + "time": "2024-04-20T06:37:51+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.9.1", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909" + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/267a4405fff1d9c847134db3a3c92f1ab7f77909", - "reference": "267a4405fff1d9c847134db3a3c92f1ab7f77909", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", "shasum": "" }, "require": { @@ -196,7 +192,7 @@ "type": "open_collective" } ], - "time": "2024-03-31T21:03:09+00:00" + "time": "2024-07-21T23:26:44+00:00" } ], "aliases": [], @@ -233,5 +229,5 @@ "ext-tokenizer": "*", "ext-xmlwriter": "*" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.6.0" } diff --git a/package-lock.json b/package-lock.json index 38d0060..aebdc4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,134 +7,55 @@ "name": "freshrss-extensions", "license": "see each extension", "devDependencies": { - "eslint": "^8.51.0", + "@stylistic/stylelint-plugin": "^2.1.2", + "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.28.1", - "eslint-plugin-n": "^16.0.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-n": "^16.6.2", "eslint-plugin-promise": "^6.1.1", - "markdownlint-cli": "^0.37.0", + "markdownlint-cli": "^0.41.0", "rtlcss": "^4.1.1", - "sass": "^1.69.0", - "stylelint": "^15.10.3", - "stylelint-config-recommended-scss": "^13.1.0", - "stylelint-order": "^6.0.3", - "stylelint-stylistic": "^0.4.3" + "sass": "^1.77.6", + "stylelint": "^16.6.1", + "stylelint-config-recommended-scss": "^14.0.0", + "stylelint-order": "^6.0.4" }, "engines": { "node": ">=12" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@babel/code-frame": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz", - "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -212,9 +133,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -230,13 +151,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -253,9 +174,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -271,14 +192,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "funding": [ { @@ -297,6 +218,16 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "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", @@ -313,18 +244,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -345,22 +276,23 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -381,9 +313,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@isaacs/cliui": { @@ -475,24 +408,34 @@ "node": ">=14" } }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.1.3.tgz", + "integrity": "sha512-/KUcqX36AbbUk7KvNuM0dWv2XSlPa1M12CPcC//eA4MNEFsZFl+2Kf8UZCLjlIWIrDNitd591vaVkXfOwUtsFQ==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.1.1", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.8.0" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -500,9 +443,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -580,28 +523,32 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -621,16 +568,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -676,17 +624,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -696,15 +645,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -715,10 +655,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -733,12 +676,15 @@ "dev": true }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { @@ -752,12 +698,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -776,34 +722,19 @@ } }, "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", "dev": true, "dependencies": { "semver": "^7.0.0" } }, - "node_modules/builtins/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/builtins/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==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -812,14 +743,19 @@ } }, "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -834,48 +770,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -893,16 +787,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -915,6 +803,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -956,12 +847,12 @@ "dev": true }, "node_modules/commander": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.0.0.tgz", - "integrity": "sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/concat-map": { @@ -971,15 +862,15 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -1011,9 +902,9 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "engines": { "node": ">=12 || >=16" @@ -1044,10 +935,61 @@ "node": ">=4" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1061,52 +1003,6 @@ } } }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -1123,17 +1019,20 @@ "dev": true }, "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -1190,9 +1089,9 @@ "dev": true }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "engines": { "node": ">=0.12" @@ -1201,6 +1100,15 @@ "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1211,50 +1119,57 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -1263,15 +1178,48 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -1304,9 +1252,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -1325,16 +1273,16 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1380,10 +1328,13 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, "engines": { "node": ">=12" }, @@ -1391,6 +1342,18 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-config-standard": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", @@ -1441,9 +1404,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -1467,29 +1430,30 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.4.0.tgz", - "integrity": "sha512-WJa3RhYzBtl8I37ebY9p76s61UhZyi4KaFOnX2A5r32RPazkXj5yoT6PGnD02dhwzEUj0KwsUdqfKDd/OuvGsw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, "peerDependencies": { "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", - "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { "array-includes": "^3.1.7", @@ -1508,7 +1472,7 @@ "object.groupby": "^1.0.1", "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -1539,15 +1503,16 @@ } }, "node_modules/eslint-plugin-n": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.3.1.tgz", - "integrity": "sha512-w46eDIkxQ2FaTHcey7G40eD+FhTXOdKudDXPUO2n9WNcslze/i/HT2qJ3GXjHngYSGDISIgPNhwGtgoix4zeOw==", + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.1.0", + "eslint-plugin-es-x": "^7.5.0", "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", "ignore": "^5.2.4", "is-builtin-module": "^3.2.1", "is-core-module": "^2.12.1", @@ -1565,26 +1530,11 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-n/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==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -1593,15 +1543,18 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-scope": { @@ -1650,9 +1603,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1737,6 +1690,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -1747,9 +1706,9 @@ } }, "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==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -1768,9 +1727,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -1810,9 +1769,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-each": { @@ -1825,9 +1784,9 @@ } }, "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -1897,16 +1856,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "dependencies": { + "es-errors": "^1.3.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1924,13 +1887,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -1940,9 +1904,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.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -1952,23 +1916,21 @@ } }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "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" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -1995,9 +1957,9 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2054,9 +2016,9 @@ } }, "node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2069,12 +2031,13 @@ } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2127,15 +2090,6 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -2155,21 +2109,21 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -2191,12 +2145,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2206,9 +2160,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { "function-bind": "^1.1.2" @@ -2217,30 +2171,6 @@ "node": ">= 0.4" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/html-tags": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", @@ -2254,18 +2184,18 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", "dev": true }, "node_modules/import-fresh": { @@ -2284,15 +2214,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2302,22 +2223,11 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -2331,21 +2241,21 @@ "dev": true }, "node_modules/ini": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", - "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.2", + "es-errors": "^1.3.0", "hasown": "^2.0.0", "side-channel": "^1.0.4" }, @@ -2354,14 +2264,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2441,12 +2353,30 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2498,9 +2428,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -2542,15 +2472,6 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -2577,12 +2498,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2619,12 +2543,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -2658,16 +2582,13 @@ "dev": true }, "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -2730,11 +2651,20 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2754,9 +2684,9 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", "dev": true }, "node_modules/levn": { @@ -2779,12 +2709,12 @@ "dev": true }, "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, "dependencies": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "node_modules/locate-path": { @@ -2815,76 +2745,67 @@ "dev": true }, "node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, "dependencies": { "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdownlint": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.31.1.tgz", - "integrity": "sha512-CKMR2hgcIBrYlIUccDCOvi966PZ0kJExDrUi1R+oF9PvqQmCrTqjOsgIvf2403OmJ+CWomuzDoylr6KbuMyvHA==", + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz", + "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==", "dev": true, "dependencies": { - "markdown-it": "13.0.1", - "markdownlint-micromark": "0.1.7" + "markdown-it": "14.1.0", + "markdownlint-micromark": "0.1.9" }, "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" } }, "node_modules/markdownlint-cli": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.37.0.tgz", - "integrity": "sha512-hNKAc0bWBBuVhJbSWbUhRzavstiB4o1jh3JeSpwC4/dt6eJ54lRfYHRxVdzVp4qGWBKbeE6Pg490PFEfrKjqSg==", + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.41.0.tgz", + "integrity": "sha512-kp29tKrMKdn+xonfefjp3a/MsNzAd9c5ke0ydMEI9PR98bOjzglYN4nfMSaIs69msUf1DNkgevAIAPtK2SeX0Q==", "dev": true, "dependencies": { - "commander": "~11.0.0", + "commander": "~12.1.0", "get-stdin": "~9.0.0", - "glob": "~10.3.4", - "ignore": "~5.2.4", + "glob": "~10.4.1", + "ignore": "~5.3.1", "js-yaml": "^4.1.0", - "jsonc-parser": "~3.2.0", - "markdownlint": "~0.31.1", - "minimatch": "~9.0.3", - "run-con": "~1.3.2" + "jsonc-parser": "~3.2.1", + "jsonpointer": "5.0.1", + "markdownlint": "~0.34.0", + "minimatch": "~9.0.4", + "run-con": "~1.3.2", + "smol-toml": "~1.2.0" }, "bin": { "markdownlint": "markdownlint.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/markdownlint-cli/node_modules/brace-expansion": { @@ -2896,19 +2817,10 @@ "balanced-match": "^1.0.0" } }, - "node_modules/markdownlint-cli/node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/markdownlint-cli/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -2921,12 +2833,15 @@ } }, "node_modules/markdownlint-micromark": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.7.tgz", - "integrity": "sha512-BbRPTC72fl5vlSKv37v/xIENSRDYL/7X/XoFzZ740FGEbs9vZerLrIkFRY0rv7slQKxDczToYuMmqQFN61fi4Q==", + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz", + "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/DavidAnson" } }, "node_modules/mathml-tag-names": { @@ -2946,44 +2861,18 @@ "dev": true }, "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2999,27 +2888,18 @@ } }, "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.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3041,24 +2921,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -3094,48 +2960,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/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==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3146,10 +2970,13 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3164,13 +2991,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -3182,14 +3009,15 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3199,26 +3027,28 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3237,17 +3067,17 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -3283,6 +3113,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3347,16 +3183,16 @@ "dev": true }, "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==", "dev": true, "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" @@ -3372,9 +3208,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -3389,10 +3225,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", "dev": true, "funding": [ { @@ -3409,9 +3254,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -3424,25 +3269,35 @@ "dev": true }, "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.4.tgz", + "integrity": "sha512-R6vHqZWgVnTAPq0C+xjyHfEZqfIYboCBVSy24MjxEDm+tIh1BU4O6o7DP7AA7kHzf136d+Qc5duI4tlpHjixDw==", "dev": true }, "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-scss": { @@ -3472,9 +3327,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3517,6 +3372,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -3537,77 +3401,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3620,31 +3413,16 @@ "node": ">=8.10.0" } }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -3711,6 +3489,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -3726,6 +3505,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -3743,9 +3523,9 @@ } }, "node_modules/rtlcss": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz", - "integrity": "sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.2.0.tgz", + "integrity": "sha512-AV+V3oOVvCrqyH5Q/6RuT1IDH1Xy5kJTkEWTWZPN5rdQ3HCFOd8SrbC7c6N5Y8bPpCfZSR6yYbUATXslvfvu5g==", "dev": true, "dependencies": { "escalade": "^3.1.1", @@ -3799,13 +3579,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -3817,23 +3597,26 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -3857,29 +3640,32 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3907,14 +3693,18 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3958,47 +3748,24 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/smol-toml": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.2.2.tgz", + "integrity": "sha512-fVEjX2ybKdJKzFL46VshQbj9PuA4IUKivalgp48/3zwS9vXzyykzQ6AX92UxHSvWJagziMRLeHMgEzoGO7A8hQ==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -4065,14 +3832,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -4082,28 +3850,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4143,21 +3914,6 @@ "node": ">=4" } }, - "node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4177,88 +3933,106 @@ "dev": true }, "node_modules/stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.8.1.tgz", + "integrity": "sha512-O8aDyfdODSDNz/B3gW2HQ+8kv8pfhSu7ZR7xskQ93+vI6FhKKGUJMQ03Ydu+w3OvXXE0/u4hWU4hCPNOyld+OA==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", + "@csstools/selector-specificity": "^3.1.1", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "debug": "^4.3.6", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", + "file-entry-cache": "^9.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.7", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "picocolors": "^1.0.1", + "postcss": "^8.4.40", + "postcss-resolve-nested-selector": "^0.1.4", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.1.1", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-recommended-scss": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", - "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", "dev": true, "dependencies": { "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.3.0" + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.6.1" }, "peerDependenciesMeta": { "postcss": { @@ -4267,48 +4041,35 @@ } }, "node_modules/stylelint-order": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz", - "integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", "dev": true, "dependencies": { - "postcss": "^8.4.21", + "postcss": "^8.4.32", "postcss-sorting": "^8.0.2" }, "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0" + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" } }, "node_modules/stylelint-scss": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.1.tgz", - "integrity": "sha512-5I9ZDIm77BZrjOccma5WyW2nJEKjXDd4Ca8Kk+oBapSO4pewSlno3n+OyimcyVJJujQZkBN2D+xuMkIamSc6hA==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.4.1.tgz", + "integrity": "sha512-+clI2bQC2FPOt06ZwUlXZZ95IO2C5bKTP0GLN1LNQPVvISfSNcgMKv/VTwym1mK9vnqhHbOk8lO4rj4nY7L9pw==", "dev": true, "dependencies": { - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "postcss-media-query-parser": "^0.2.3", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0" }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, - "node_modules/stylelint-stylistic": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/stylelint-stylistic/-/stylelint-stylistic-0.4.3.tgz", - "integrity": "sha512-WphmneK3MRrm5ixvRPWy7+c9+EQUh0FPvNMXW/N9VD85vyqtpxUejpD+mxubVVht0fRgidcqBxtW3s3tU2Ujhw==", - "dev": true, - "dependencies": { - "is-plain-object": "^5.0.0", - "postcss": "^8.4.21", - "postcss-media-query-parser": "^0.2.3", - "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0" + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.0.0" + "stylelint": "^16.0.2" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -4324,15 +4085,28 @@ "dev": true }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", + "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", "dev": true, "dependencies": { - "flat-cache": "^3.2.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" } }, "node_modules/stylelint/node_modules/resolve-from": { @@ -4358,6 +4132,45 @@ "node": ">=8" } }, + "node_modules/stylelint/node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stylelint/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4402,9 +4215,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -4418,15 +4231,15 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4477,22 +4290,10 @@ "node": ">=8.0" } }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -4526,29 +4327,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -4558,16 +4360,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -4577,23 +4380,29 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "dev": true }, "node_modules/unbox-primitive": { @@ -4626,16 +4435,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4668,16 +4467,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4686,6 +4485,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -4799,21 +4607,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index bb63ff0..45281b1 100644 --- a/package.json +++ b/package.json @@ -31,18 +31,18 @@ "fix": "npm run rtlcss && npm run stylelint_fix && npm run eslint_fix && npm run markdownlint_fix" }, "devDependencies": { - "eslint": "^8.54.0", + "eslint": "^8.57.0", "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-n": "^16.3.1", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-n": "^16.6.2", "eslint-plugin-promise": "^6.1.1", - "markdownlint-cli": "^0.37.0", + "markdownlint-cli": "^0.41.0", "rtlcss": "^4.1.1", - "sass": "^1.69.5", - "stylelint": "^15.11.0", - "stylelint-config-recommended-scss": "^13.1.0", - "stylelint-order": "^6.0.3", - "stylelint-stylistic": "^0.4.3" + "sass": "^1.77.6", + "stylelint": "^16.6.1", + "stylelint-config-recommended-scss": "^14.0.0", + "stylelint-order": "^6.0.4", + "@stylistic/stylelint-plugin": "^2.1.2" }, "rtlcssConfig": {} } diff --git a/phpcs.xml b/phpcs.xml index 41dbfcd..64002d1 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,119 +1,109 @@ - - Created with the PHP Coding Standard Generator. https://edorian.github.com/php-coding-standard-generator/ - + + - ./lib/SimplePie/ - ./lib/PHPMailer/ - ./lib/http-conditional.php - ./lib/lib_phpQuery.php - ./node_modules/ + ./.git/ ./data/config.php + ./data/update.php ./data/users/*/config.php ./extensions/ + ./lib/http-conditional.php + ./lib/marienfressinaud/ + ./lib/phpgt/ + ./lib/phpmailer/ + ./lib/SimplePie/ + ./node_modules/ ./p/scripts/vendor/ ./vendor/ - *.min.js$ - + + ./symbolic/ + ./third-party/ + ./tmp/ + ./xExtension-TTRSS_API + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - ./app/i18n/ - - *.phtml$ + /app/i18n/*\.php$ + *\.phtml$ - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - + + *\.phtml$ + /app/install.php - - - + + *\.phtml$ + /app/install.php + + + *\.phtml$ + + - - - - - - - - + *\.phtml$ - + - - - + + *\.phtml$ + - + - + + *\.phtml$ + - - - - - .phtml$ - - - - - - .phtml$ - .js$ - - - - .phtml$ - diff --git a/phpstan-third-party.neon b/phpstan-third-party.neon index 6d6168c..494f2ca 100644 --- a/phpstan-third-party.neon +++ b/phpstan-third-party.neon @@ -1,6 +1,5 @@ parameters: level: 0 - treatPhpDocTypesAsCertain: false fileExtensions: - php - phtml @@ -22,3 +21,4 @@ parameters: dynamicConstantNames: - TYPE_GIT reportMaybesInPropertyPhpDocTypes: false + treatPhpDocTypesAsCertain: false diff --git a/phpstan.neon b/phpstan.neon index 02a5f8e..2a16f17 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,7 +2,6 @@ parameters: # TODO: Increase rule-level https://phpstan.org/user-guide/rule-levels level: 1 phpVersion: 80399 # TODO: Remove line when moving composer.json to PHP 8+ - treatPhpDocTypesAsCertain: false fileExtensions: - php - phtml @@ -23,6 +22,7 @@ parameters: - TYPE_GIT checkMissingOverrideMethodAttribute: true reportMaybesInPropertyPhpDocTypes: false + treatPhpDocTypesAsCertain: false strictRules: allRules: false booleansInConditions: true @@ -37,5 +37,12 @@ parameters: strictCalls: true switchConditionsMatchingType: true uselessCast: true + exceptions: + check: + missingCheckedExceptionInThrows: false # TODO pass + tooWideThrowType: true + implicitThrows: false + checkedExceptionClasses: + - 'Minz_Exception' includes: - vendor/phpstan/phpstan-strict-rules/rules.neon From 31bbdb55be20d78aa6d452e6bc6fd90dc7d7497c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Melega?= Date: Thu, 1 Aug 2024 20:42:41 +0200 Subject: [PATCH 57/72] New extension WordHighlighter - for highlighting words. (#238) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * init commit for new extension WordHighlighter - for highlighting words. * use `json` for storing configuration, add more configuration options (enable_in_article, enable_logs, case_sensitive, separate_word_search) and refactored & simplified code * fix: try to fix test errors * fix: try to fix tests * fix unnecessary casting to string * fix: try to fix PHPStan errors, mostly: Cannot access offset '...' on mixed. And add missing types. * fix: try to fix "Cannot access offset '...' on mixed." * fix typo in comment * refactor: remove $lineSeparator and replace `explode` with `preg_split` * i18n: fr --------- Co-authored-by: Lukáš Melega Co-authored-by: Alexandre Alapetite --- README.md | 4 + extensions.json | 11 + xExtension-WordHighlighter/LICENSE | 662 ++++++++++++++++++ xExtension-WordHighlighter/README.md | 30 + xExtension-WordHighlighter/configure.phtml | 88 +++ xExtension-WordHighlighter/extension.php | 102 +++ xExtension-WordHighlighter/i18n/en/ext.php | 15 + xExtension-WordHighlighter/i18n/fr/ext.php | 15 + xExtension-WordHighlighter/metadata.json | 8 + xExtension-WordHighlighter/snapshot-dark.png | Bin 0 -> 232602 bytes xExtension-WordHighlighter/snapshot.png | Bin 0 -> 214640 bytes xExtension-WordHighlighter/static/.gitignore | 2 + xExtension-WordHighlighter/static/mark.min.js | 13 + xExtension-WordHighlighter/static/style.css | 14 + .../static/word-highlighter.js | 89 +++ 15 files changed, 1053 insertions(+) create mode 100644 xExtension-WordHighlighter/LICENSE create mode 100644 xExtension-WordHighlighter/README.md create mode 100644 xExtension-WordHighlighter/configure.phtml create mode 100644 xExtension-WordHighlighter/extension.php create mode 100644 xExtension-WordHighlighter/i18n/en/ext.php create mode 100644 xExtension-WordHighlighter/i18n/fr/ext.php create mode 100644 xExtension-WordHighlighter/metadata.json create mode 100644 xExtension-WordHighlighter/snapshot-dark.png create mode 100644 xExtension-WordHighlighter/snapshot.png create mode 100644 xExtension-WordHighlighter/static/.gitignore create mode 100644 xExtension-WordHighlighter/static/mark.min.js create mode 100644 xExtension-WordHighlighter/static/style.css create mode 100644 xExtension-WordHighlighter/static/word-highlighter.js diff --git a/README.md b/README.md index e80104b..ce78399 100644 --- a/README.md +++ b/README.md @@ -136,3 +136,7 @@ There are some FreshRSS extensions out there, developed by community members: ### By [@kalvn](https://github.com/kalvn) * [Mark Previous as Read](https://github.com/kalvn/freshrss-mark-previous-as-read): Adds a button in the footer of each entry. Clicking this button will mark all previous entries belonging to the current feed, as read. + +### By [@lukasMega](https://github.com/lukasMega) + +* [Word Highlighter](https://github.com/lukasMega/Extensions-FreshRSS-): Gives you ability to highlight user-defined words (using [mark.js](https://github.com/julkue/mark.js)) diff --git a/extensions.json b/extensions.json index d607984..f5b63ec 100644 --- a/extensions.json +++ b/extensions.json @@ -519,6 +519,17 @@ "method": "git", "directory": "." }, + { + "name": "Word Highlighter", + "author": "Lukas Melega", + "description": "Highlighting user-defined words", + "version": "0.0.2", + "entrypoint": "WordHighlighter", + "type": "user", + "url": "https://github.com/FreshRSS/Extensions", + "method": "git", + "directory": "xExtension-WordHighlighter" + }, { "name": "White List", "author": "Alexis Degrugillier", diff --git a/xExtension-WordHighlighter/LICENSE b/xExtension-WordHighlighter/LICENSE new file mode 100644 index 0000000..cebe035 --- /dev/null +++ b/xExtension-WordHighlighter/LICENSE @@ -0,0 +1,662 @@ +GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. + diff --git a/xExtension-WordHighlighter/README.md b/xExtension-WordHighlighter/README.md new file mode 100644 index 0000000..51a23f8 --- /dev/null +++ b/xExtension-WordHighlighter/README.md @@ -0,0 +1,30 @@ +# WordHighlighter extension + +A FreshRSS extension which give ability to highlight user-defined words. + +## Usage + +To use it, upload this directory in your `./extensions` directory and enable it on the extension panel in FreshRSS. You can add words to be highlighted by clicking on the manage button ⚙️. +See also official docs at freshrss.github.io/FreshRSS/en/admins/15_extensions.html + +## Preview + +Light theme: + +![snapshot](./snapshot.png) + + +
+ click to see example screenshot in dark theme + +![snapshot-dark-theme](./snapshot-dark.png) + +
+ + +## Changelog + +- 0.0.2 use `json` for storing configuration, add more configuration options + (enable_in_article, enable_logs, case_sensitive, separate_word_search) + and refactored & simplified code +- 0.0.1 initial version (as a proper FreshRSS extension) diff --git a/xExtension-WordHighlighter/configure.phtml b/xExtension-WordHighlighter/configure.phtml new file mode 100644 index 0000000..ea2be03 --- /dev/null +++ b/xExtension-WordHighlighter/configure.phtml @@ -0,0 +1,88 @@ + +
+ + +
+ +
+ +
+
+ +
+ +
+ enable_in_article == '') { ?> + + + + + +
+
+ +
+ Click to see more advanced options + +
+ +
+ case_sensitive == '') { ?> + + + + +
+
+ +
+ +
+ separate_word_search == '') { ?> + + + + +
+
+ +
+ +
+ enable_logs == '') { ?> + + + + +
+ +
+
+ +
+ permission_problem !== '') { ?> +

permission_problem) ?>

+ +
+ + +
+ +
+ +
diff --git a/xExtension-WordHighlighter/extension.php b/xExtension-WordHighlighter/extension.php new file mode 100644 index 0000000..29b85e2 --- /dev/null +++ b/xExtension-WordHighlighter/extension.php @@ -0,0 +1,102 @@ +registerTranslates(); + + // register CSS for WordHighlighter: + Minz_View::appendStyle($this->getFileUrl('style.css', 'css')); + + Minz_View::appendScript($this->getFileUrl('mark.min.js', 'js'), false, false, false); + + $current_user = Minz_Session::paramString('currentUser'); + + $staticPath = join_path($this->getPath(), 'static'); + $configFileJs = join_path($staticPath, ('config.' . $current_user . '.js')); + + if (file_exists($configFileJs)) { + Minz_View::appendScript($this->getFileUrl(('config.' . $current_user . '.js'), 'js')); + } + + Minz_View::appendScript($this->getFileUrl('word-highlighter.js', 'js')); + } + + #[\Override] + public function handleConfigureAction(): void + { + $this->registerTranslates(); + + $current_user = Minz_Session::paramString('currentUser'); + $staticPath = join_path($this->getPath(), 'static'); + + $configFileJson = join_path($staticPath, ('config.' . $current_user . '.json')); + + if (!file_exists($configFileJson) && !is_writable($staticPath)) { + $tmpPath = explode(EXTENSIONS_PATH . '/', $staticPath); + $this->permission_problem = $tmpPath[1] . '/'; + + } elseif (file_exists($configFileJson) && !is_writable($configFileJson)) { + $tmpPath = explode(EXTENSIONS_PATH . '/', $configFileJson); + $this->permission_problem = $tmpPath[1]; + + } elseif (Minz_Request::isPost()) { + $configWordList = html_entity_decode(Minz_Request::paramString('words_list')); + + $this->word_highlighter_conf = $configWordList; + $this->enable_in_article = (bool) Minz_Request::paramString('enable-in-article'); + $this->enable_logs = (bool) Minz_Request::paramString('enable_logs'); + $this->case_sensitive = (bool) Minz_Request::paramString('case_sensitive'); + $this->separate_word_search = (bool) Minz_Request::paramString('separate_word_search'); + + $configObj = [ + 'enable_in_article' => $this->enable_in_article, + 'enable_logs' => $this->enable_logs, + 'case_sensitive' => $this->case_sensitive, + 'separate_word_search' => $this->separate_word_search, + 'words' => preg_split("/\r\n|\n|\r/", $configWordList), + ]; + $configJson = json_encode($configObj, WordHighlighterExtension::JSON_ENCODE_CONF); + file_put_contents(join_path($staticPath, ('config.' . $current_user . '.json')), $configJson . PHP_EOL); + file_put_contents(join_path($staticPath, ('config.' . $current_user . '.js')), $this->jsonToJs($configJson) . PHP_EOL); + } + + if (file_exists($configFileJson)) { + try { + $confJson = json_decode(file_get_contents($configFileJson) ?: '', true, 8, JSON_THROW_ON_ERROR); + if (json_last_error() !== JSON_ERROR_NONE || !is_array($confJson)) { + return; + } + $this->enable_in_article = (bool) ($confJson['enable_in_article'] ?? false); + $this->enable_logs = (bool) ($confJson['enable_logs'] ?? false); + $this->case_sensitive = (bool) ($confJson['case_sensitive'] ?? false); + $this->separate_word_search = (bool) ($confJson['separate_word_search'] ?? false); + $this->word_highlighter_conf = implode("\n", (array) ($confJson['words'] ?? [])); + + } catch (Exception $exception) { + // probably nothing to do needed + } + } + } + + private function jsonToJs(string $jsonStr): string + { + $js = "window.WordHighlighterConf = " . + $jsonStr . ";\n" . + "window.WordHighlighterConf.enable_logs && console.log('WordHighlighter: loaded user config:', window.WordHighlighterConf);"; + return $js; + } +} diff --git a/xExtension-WordHighlighter/i18n/en/ext.php b/xExtension-WordHighlighter/i18n/en/ext.php new file mode 100644 index 0000000..9954541 --- /dev/null +++ b/xExtension-WordHighlighter/i18n/en/ext.php @@ -0,0 +1,15 @@ + array( + 'write_words' => 'Words to highlight', + 'write_words_more' => '(separated by newline)', + 'enable_in_article' => 'Enable highlighting also in article', + 'enable_in_article_more' => '(⚠️ may be slower with a lot of words)', + 'enable_logs' => 'Enable logs', + 'case_sensitive' => 'Case sensitive', + 'separate_word_search' => 'Separate word search', + 'test_highlighting_word' => 'highlight', + 'permission_problem' => 'Your config file is not writable, please change the file permissions for %s', + ), +); diff --git a/xExtension-WordHighlighter/i18n/fr/ext.php b/xExtension-WordHighlighter/i18n/fr/ext.php new file mode 100644 index 0000000..a78e090 --- /dev/null +++ b/xExtension-WordHighlighter/i18n/fr/ext.php @@ -0,0 +1,15 @@ + array( + 'write_words' => 'Mots à surligner', + 'write_words_more' => '(séparés par une nouvelle ligne)', + 'enable_in_article' => 'Activer la mise en évidence également dans l’article', + 'enable_in_article_more' => '(⚠️ peut être plus lent avec beaucoup de mots)', + 'enable_logs' => 'Activer les journaux', + 'case_sensitive' => 'Sensible à la casse', + 'separate_word_search' => 'Recherche de mots séparés', + 'test_highlighting_word' => 'surligner', + 'permission_problem' => 'Votre fichier de configuration n’est pas accessible en écriture, veuillez modifier les permissions du fichier %s', + ), +); diff --git a/xExtension-WordHighlighter/metadata.json b/xExtension-WordHighlighter/metadata.json new file mode 100644 index 0000000..ab88d27 --- /dev/null +++ b/xExtension-WordHighlighter/metadata.json @@ -0,0 +1,8 @@ +{ + "name": "Word highlighter", + "author": "Lukas Melega", + "description": "Highlight specific words", + "version": "0.0.2", + "entrypoint": "WordHighlighter", + "type": "user" +} diff --git a/xExtension-WordHighlighter/snapshot-dark.png b/xExtension-WordHighlighter/snapshot-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..01dbd11683d7291d63eedef1d1b2ddf682c03b29 GIT binary patch literal 232602 zcmb4q1ymf%wl)wFEO?OM1PwY^a0~8%Kyb+5Zi5V-1a}KCI6*=Z+--p1?gW?M?jG!K z&N=tJdvfkwZ~e1oRyW;M)m6K;eEZu?$SY+TOmq@-1Ox<3Iax_H1O((Y1cV2DsE>dv zYc^FU2ngs!mJ$-LFi-nQO9wgEO->J_LWrS2MvSP_+rmQY*kHV`SVmY7XqF|BmB& z-tTEYpTrOG;pbnt6I@8U>QBW$&`zhp%l&?Ykb}fIsJC^T=0X}I9iJ!CXU*9I8yr+HACu}PLp;30l@{e zd%LI)N6AsJMV(`Ws>SB*$|J>DAB4D+BU!2f!Xt<=A5TnOV=x8liTz~3fR3JyrZOI)rI^|YFnc7plVOW) zPJcwW(~cy9mgWjP-5Jte%kvEEE8}C;s?&tS+EYy

~FHPB89_E^~#`ay$tdGyc~& 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%0Al+8oXq#DfG6| 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%0D<3 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�ex$qg6q2%NZ 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

  • $YK3ueeR`wo%RbwHW~{GSJOviOM33G9 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 z

    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 b5`q|c9bsA6Ea-`q0Y8`hhxe82@xAyLjP}=< literal 0 HcmV?d00001 diff --git a/xExtension-WordHighlighter/static/.gitignore b/xExtension-WordHighlighter/static/.gitignore new file mode 100644 index 0000000..6d6756d --- /dev/null +++ b/xExtension-WordHighlighter/static/.gitignore @@ -0,0 +1,2 @@ +config-words.*.js +config-words.*.txt diff --git a/xExtension-WordHighlighter/static/mark.min.js b/xExtension-WordHighlighter/static/mark.min.js new file mode 100644 index 0000000..c725bc4 --- /dev/null +++ b/xExtension-WordHighlighter/static/mark.min.js @@ -0,0 +1,13 @@ +/** + * mark.js (Library for highlighting words) + * https://github.com/julkue/mark.js/blob/master/dist/mark.es6.min.js + */ +/* eslint-disable */ + +/*!*************************************************** +* mark.js v9.0.0 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Mark=t()}(this,function(){"use strict";class e{constructor(e,t=!0,s=[],r=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=r}static matches(e,t){const s="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){let t=!1;return s.every(s=>!r.call(e,s)||(t=!0,!1)),t}return!1}getContexts(){let e,t=[];return(e=void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach(e=>{const s=t.filter(t=>t.contains(e)).length>0;-1!==t.indexOf(e)||s||t.push(e)}),t}getIframeContents(e,t,s=(()=>{})){let r;try{const t=e.contentWindow;if(r=t.document,!t||!r)throw new Error("iframe inaccessible")}catch(e){s()}r&&t(r)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let r=!1,i=null;const n=()=>{if(!r){r=!0,clearTimeout(i);try{this.isIframeBlank(e)||(e.removeEventListener("load",n),this.getIframeContents(e,t,s))}catch(e){s()}}};e.addEventListener("load",n),i=setTimeout(n,this.iframesTimeout)}onIframeReady(e,t,s){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch(e){s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,e=>{s++,this.waitForIframes(e.querySelector("html"),()=>{--s||t()})},e=>{e||t()})}forEachIframe(t,s,r,i=(()=>{})){let n=t.querySelectorAll("iframe"),o=n.length,a=0;n=Array.prototype.slice.call(n);const h=()=>{--o<=0&&i(a)};o||h(),n.forEach(t=>{e.matches(t,this.exclude)?h():this.onIframeReady(t,e=>{s(t)&&(a++,r(e)),h()},h)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(t){return new e(t.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){if(e.compareDocumentPosition(s)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(s)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}getIteratorNode(e){const t=e.previousNode();let s;return{prevNode:t,node:s=null===t?e.nextNode():e.nextNode()&&e.nextNode()}}checkIframeFilter(e,t,s,r){let i=!1,n=!1;return r.forEach((e,t)=>{e.val===s&&(i=t,n=e.handled)}),this.compareNodeIframe(e,t,s)?(!1!==i||n?!1===i||n||(r[i].handled=!0):r.push({val:s,handled:!0}),!0):(!1===i&&r.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,r){e.forEach(e=>{e.handled||this.getIframeContents(e.val,e=>{this.createInstanceOnIframe(e).forEachNode(t,s,r)})})}iterateThroughNodes(e,t,s,r,i){const n=this.createIterator(t,e,r);let o,a,h=[],c=[],l=()=>(({prevNode:a,node:o}=this.getIteratorNode(n)),o);for(;l();)this.iframes&&this.forEachIframe(t,e=>this.checkIframeFilter(o,a,e,h),t=>{this.createInstanceOnIframe(t).forEachNode(e,e=>c.push(e),r)}),c.push(o);c.forEach(e=>{s(e)}),this.iframes&&this.handleOpenIframes(h,e,s,r),i()}forEachNode(e,t,s,r=(()=>{})){const i=this.getContexts();let n=i.length;n||r(),i.forEach(i=>{const o=()=>{this.iterateThroughNodes(e,i,t,s,()=>{--n<=0&&r()})};this.iframes?this.waitForIframes(i,o):o()})}}class t{constructor(e){this.opt=Object.assign({},{diacritics:!0,synonyms:{},accuracy:"partially",caseSensitive:!1,ignoreJoiners:!1,ignorePunctuation:[],wildcards:"disabled"},e)}create(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),new RegExp(e,`gm${this.opt.caseSensitive?"":"i"}`)}sortByLength(e){return e.sort((e,t)=>e.length===t.length?e>t?1:-1:t.length-e.length)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let i in t)if(t.hasOwnProperty(i)){let n=Array.isArray(t[i])?t[i]:[t[i]];n.unshift(i),(n=this.sortByLength(n).map(e=>("disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e))).filter(e=>""!==e)).length>1&&(e=e.replace(new RegExp(`(${n.map(e=>this.escapeStr(e)).join("|")})`,`gm${s}`),r+`(${n.map(e=>this.processSynonyms(e)).join("|")})`+r))}return e}processSynonyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return(e=e.replace(/(?:\\)*\?/g,e=>"\\"===e.charAt(0)?"?":"")).replace(/(?:\\)*\*/g,e=>"\\"===e.charAt(0)?"*":"")}createWildcardsRegExp(e){let t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(e,t,s)=>{let r=s.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let r=[];return e.split("").forEach(i=>{s.every(s=>{if(-1!==s.indexOf(i)){if(r.indexOf(s)>-1)return!1;e=e.replace(new RegExp(`[${s}]`,`gm${t}`),`[${s}]`),r.push(s)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gim,"[\\s]+")}createAccuracyRegExp(e){let t=this.opt.accuracy,s="string"==typeof t?t:t.value,r="string"==typeof t?[]:t.limiters,i="";switch(r.forEach(e=>{i+=`|${this.escapeStr(e)}`}),s){case"partially":default:return`()(${e})`;case"complementary":return`()([^${i="\\s"+(i||this.escapeStr("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿"))}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}}class s{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,acrossElements:!1,ignoreGroups:0,each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new e(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&"object"==typeof s&&"function"==typeof s[t]&&s[t](`mark.js: ${e}`)}getSeparatedKeywords(e){let t=[];return e.forEach(e=>{this.opt.separateWordSearch?e.split(" ").forEach(e=>{e.trim()&&-1===t.indexOf(e)&&t.push(e)}):e.trim()&&-1===t.indexOf(e)&&t.push(e)}),{keywords:t.sort((e,t)=>t.length-e.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((e,t)=>e.start-t.start).forEach(e=>{let{start:r,end:i,valid:n}=this.callNoMatchOnInvalidRanges(e,s);n&&(e.start=r,e.length=i-r,t.push(e),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,r,i=!1;return e&&void 0!==e.start?(r=(s=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-s>0?i=!0:(this.log("Ignoring invalid or overlapping range: "+`${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:r,valid:i}}checkWhitespaceRanges(e,t,s){let r,i=!0,n=s.length,o=t-n,a=parseInt(e.start,10)-o;return(r=(a=a>n?n:a)+parseInt(e.length,10))>n&&(r=n,this.log(`End range automatically set to the max value of ${n}`)),a<0||r-a<0||a>n||r>n?(i=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):""===s.substring(a,r).replace(/\s+/g,"")&&(i=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:a,end:r,valid:i}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,e=>{s.push({start:t.length,end:(t+=e.textContent).length,node:e})},e=>this.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(t){return e.matches(t,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const r=this.opt.element?this.opt.element:"mark",i=e.splitText(t),n=i.splitText(s-t);let o=document.createElement(r);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=i.textContent,i.parentNode.replaceChild(o,i),n}wrapRangeInMappedTextNode(e,t,s,r,i){e.nodes.every((n,o)=>{const a=e.nodes[o+1];if(void 0===a||a.start>t){if(!r(n.node))return!1;const a=t-n.start,h=(s>n.end?n.end:s)-n.start,c=e.value.substr(0,n.start),l=e.value.substr(h+n.start);if(n.node=this.wrapRangeInTextNode(n.node,a,h),e.value=c+l,e.nodes.forEach((t,s)=>{s>=o&&(e.nodes[s].start>0&&s!==o&&(e.nodes[s].start-=h),e.nodes[s].end-=h)}),s-=h,i(n.node.previousSibling,n.start),!(s>n.end))return!1;t=n.end}return!0})}wrapGroups(e,t,s,r){return r((e=this.wrapRangeInTextNode(e,t,t+s)).previousSibling),e}separateGroups(e,t,s,r,i){let n=t.length;for(let s=1;s-1&&r(t[s],e)&&(e=this.wrapGroups(e,n,t[s].length,i))}return e}wrapMatches(e,t,s,r,i){const n=0===t?0:t+1;this.getTextNodes(t=>{t.nodes.forEach(t=>{let i;for(t=t.node;null!==(i=e.exec(t.textContent))&&""!==i[n];){if(this.opt.separateGroups)t=this.separateGroups(t,i,n,s,r);else{if(!s(i[n],t))continue;let e=i.index;if(0!==n)for(let t=1;t{let o;for(;null!==(o=e.exec(t.value))&&""!==o[n];){let i=o.index;if(0!==n)for(let e=1;es(o[n],e),(t,s)=>{e.lastIndex=s,r(t)})}i()})}wrapRangeFromIndex(e,t,s,r){this.getTextNodes(i=>{const n=i.value.length;e.forEach((e,r)=>{let{start:o,end:a,valid:h}=this.checkWhitespaceRanges(e,n,i.value);h&&this.wrapRangeInMappedTextNode(i,o,a,s=>t(s,e,i.value.substring(o,a),r),t=>{s(t,e)})}),r()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,r="wrapMatches";this.opt.acrossElements&&(r="wrapMatchesAcrossElements"),this[r](e,this.opt.ignoreGroups,(e,t)=>this.opt.filter(t,e,s),e=>{s++,this.opt.each(e)},()=>{0===s&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,s){this.opt=s;let r=0,i="wrapMatches";const{keywords:n,length:o}=this.getSeparatedKeywords("string"==typeof e?[e]:e),a=e=>{const s=new t(this.opt).create(e);let h=0;this.log(`Searching with expression "${s}"`),this[i](s,1,(t,s)=>this.opt.filter(s,e,r,h),e=>{h++,r++,this.opt.each(e)},()=>{0===h&&this.opt.noMatch(e),n[o-1]===e?this.opt.done(r):a(n[n.indexOf(e)+1])})};this.opt.acrossElements&&(i="wrapMatchesAcrossElements"),0===o?this.opt.done(r):a(n[0])}markRanges(e,t){this.opt=t;let s=0,r=this.checkRanges(e);r&&r.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(r)),this.wrapRangeFromIndex(r,(e,t,s,r)=>this.opt.filter(e,t,s,r),(e,t)=>{s++,this.opt.each(e,t)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(t){this.opt=t;let s=this.opt.element?this.opt.element:"*";s+="[data-markjs]",this.opt.className&&(s+=`.${this.opt.className}`),this.log(`Removal selector "${s}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,e=>{this.unwrapMatches(e)},t=>{const r=e.matches(t,s),i=this.matchesExclude(t);return!r||i?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}}return function(e){const t=new s(e);return this.mark=((e,s)=>(t.mark(e,s),this)),this.markRegExp=((e,s)=>(t.markRegExp(e,s),this)),this.markRanges=((e,s)=>(t.markRanges(e,s),this)),this.unmark=(e=>(t.unmark(e),this)),this}}); diff --git a/xExtension-WordHighlighter/static/style.css b/xExtension-WordHighlighter/static/style.css new file mode 100644 index 0000000..6ad2b0b --- /dev/null +++ b/xExtension-WordHighlighter/static/style.css @@ -0,0 +1,14 @@ +/* WordHighlighter v0.0.2 (FreshRSS Extension) CSS */ +#stream mark { + padding: 2px; + padding-right: 0; /* because in case when part of word is highlighted */ + border-radius: 4px; +} + +#stream mark.mark-secondary { + background-color: rgba(255, 255, 0, 0.3) !important; +} + +html[class*="darkMode"] #stream mark.mark-secondary { + background-color: rgba(255, 255, 0, 0.5) !important; +} diff --git a/xExtension-WordHighlighter/static/word-highlighter.js b/xExtension-WordHighlighter/static/word-highlighter.js new file mode 100644 index 0000000..97b3689 --- /dev/null +++ b/xExtension-WordHighlighter/static/word-highlighter.js @@ -0,0 +1,89 @@ +'use strict'; + +/* WordHighlighter v0.0.2 (FreshRSS Extension) */ + +function wordHighlighter(c /* console */, Mark, context, OPTIONS) { + const markConf = (done, counter) => ({ + caseSensitive: OPTIONS.case_sensitive || false, + separateWordSearch: OPTIONS.separate_word_search || false, + ignoreJoiners: OPTIONS.ignore_joiners || false, + exclude: [ + 'mark', + ...(OPTIONS.enable_in_article ? [] : ['article *']), + ], + done: (n) => (counter.value += n) && done(), + noMatch: done, + }); + + const m = new Mark(context); + const changePageListener = debounce(200, (x) => { + OPTIONS.enable_logs && c.group('WordHighlighter: page change'); + stopObserving(); + highlightWords(m, startObserving); + }); + + const mo = new MutationObserver(changePageListener); + mo.observe(context, { subtree: true, childList: true }); + + function startObserving() { + mo.observe(context, { subtree: true, childList: true }); + } + + function stopObserving() { + mo.disconnect(); + } + + function highlightWords(m, done) { + const start = performance.now(); + const hCounter = { value: 0 }; + + new Promise((resolve) => + m.mark(OPTIONS.words || [], { ...markConf(resolve, hCounter) }) + ) + .finally(() => { + if (OPTIONS.enable_logs) { + c.log(`WordHighlighter: ${hCounter.value} new highlights added in ${performance.now() - start}ms.`); + c.groupEnd(); + } + typeof done === 'function' && done(); + }); + } + + highlightWords(m); +} + +// MAIN: + +(function main() { + try { + const confName = 'WordHighlighterConf'; + const OPTIONS = window[confName] || { }; + const onMainPage = !(new URL(window.location)).searchParams.get('c'); + if (onMainPage) { + console.log('WordHighlighter: script load...'); + const context = document.querySelector('#stream'); + wordHighlighter(console, window.Mark || (Error('mark.js library is not loaded ❗️')), context, OPTIONS); + console.log('WordHighlighter: script loaded.✅'); + } else { + OPTIONS.enable_logs && console.log('WordHighlighter: ❗️ paused outside of feed page'); + } + return Promise.resolve(); + } catch (error) { + console.error('WordHighlighter: ❌', error); + return Promise.reject(error); + } +})(); + +// Util functions: + +function debounce(duration, func) { + let timeout; + return function (...args) { + const effect = () => { + timeout = null; + return func.apply(this, args); + }; + clearTimeout(timeout); + timeout = setTimeout(effect, duration); + }; +} From 2bdabee8522f79031941cbf35bb9f74a59032e78 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 2 Aug 2024 11:20:14 +0000 Subject: [PATCH 58/72] Update extension list --- extensions.json | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/extensions.json b/extensions.json index f5b63ec..bce2785 100644 --- a/extensions.json +++ b/extensions.json @@ -519,17 +519,6 @@ "method": "git", "directory": "." }, - { - "name": "Word Highlighter", - "author": "Lukas Melega", - "description": "Highlighting user-defined words", - "version": "0.0.2", - "entrypoint": "WordHighlighter", - "type": "user", - "url": "https://github.com/FreshRSS/Extensions", - "method": "git", - "directory": "xExtension-WordHighlighter" - }, { "name": "White List", "author": "Alexis Degrugillier", @@ -541,6 +530,17 @@ "method": "git", "directory": "." }, + { + "name": "Word highlighter", + "author": "Lukas Melega", + "description": "Highlight specific words", + "version": "0.0.2", + "entrypoint": "WordHighlighter", + "type": "user", + "url": "https://github.com/FreshRSS/Extensions", + "method": "git", + "directory": "xExtension-WordHighlighter" + }, { "name": "YouTube Video Feed", "author": "Kevin Papst", From 25b20e4453f72075530db58ff4d91a38709f6ff0 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 4 Aug 2024 19:40:26 +0200 Subject: [PATCH 59/72] Migrate to ESLint 9 (#244) * Migrate to ESLint 9 Same as https://github.com/FreshRSS/FreshRSS/pull/6685 * More flexible syntax globals * resolveIgnoresFromGitignore * Sync FreshRSS --- .eslintignore | 7 - .eslintrc.json | 29 - eslint.config.js | 55 ++ package-lock.json | 1478 +++++++++++++++++++++++++++++++-------------- package.json | 26 +- 5 files changed, 1077 insertions(+), 518 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 5d9bd5a..0000000 --- a/.eslintignore +++ /dev/null @@ -1,7 +0,0 @@ -.git/ -*.min.js -node_modules/ -symbolic/ -third-party/ -tmp/ -vendor/ diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 449161c..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "env": { - "browser": true - }, - "extends": [ - "eslint:recommended", - "standard" - ], - "rules": { - "camelcase": "off", - "comma-dangle": ["warn", { - "arrays": "always-multiline", - "objects": "always-multiline" - }], - "eqeqeq": "off", - "indent": ["warn", "tab", { "SwitchCase": 1 }], - "linebreak-style": ["error", "unix"], - "max-len": ["warn", 165], - "no-tabs": "off", - "semi": ["warn", "always"], - "space-before-function-paren": ["warn", { - "anonymous": "always", - "named": "never", - "asyncArrow": "always" - }], - "yoda": "off" - }, - "root": true -} diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..c65f752 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,55 @@ +import globals from "globals"; +import js from "@eslint/js"; +import neostandard, { resolveIgnoresFromGitignore } from 'neostandard'; +import stylistic from '@stylistic/eslint-plugin'; + +export default [ + { + files: ["**/*.js"], + languageOptions: { + globals: { + ...globals.browser, + }, + sourceType: "script", + }, + }, + { + ignores: [ + ...resolveIgnoresFromGitignore(), + "**/*.min.js", + "extensions/", + "p/scripts/vendor/", + ], + }, + js.configs.recommended, + // stylistic.configs['recommended-flat'], + ...neostandard(), + { + plugins: { + "@stylistic": stylistic, + }, + rules: { + "camelcase": "off", + "eqeqeq": "off", + "no-empty": ["error", { "allowEmptyCatch": true }], + "no-unused-vars": ["error", { + "args": "none", + "caughtErrors": "none", + }], + "object-shorthand": "off", + "yoda": "off", + "@stylistic/indent": ["warn", "tab", { "SwitchCase": 1 }], + "@stylistic/linebreak-style": ["error", "unix"], + "@stylistic/max-len": ["warn", 165], + "@stylistic/no-tabs": "off", + "@stylistic/quotes": ["off", "single", { "avoidEscape": true }], + "@stylistic/quote-props": ["warn", "consistent"], + "@stylistic/semi": ["warn", "always"], + "@stylistic/space-before-function-paren": ["warn", { + "anonymous": "always", + "asyncArrow": "always", + "named": "never", + }], + }, + }, +]; diff --git a/package-lock.json b/package-lock.json index aebdc4c..eebfd01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,21 +7,20 @@ "name": "freshrss-extensions", "license": "see each extension", "devDependencies": { - "@stylistic/stylelint-plugin": "^2.1.2", - "eslint": "^8.57.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-n": "^16.6.2", - "eslint-plugin-promise": "^6.1.1", + "@eslint/js": "^9.8.0", + "@stylistic/stylelint-plugin": "^3.0.0", + "eslint": "^9.8.0", + "globals": "^15.9.0", "markdownlint-cli": "^0.41.0", - "rtlcss": "^4.1.1", - "sass": "^1.77.6", - "stylelint": "^16.6.1", - "stylelint-config-recommended-scss": "^14.0.0", + "neostandard": "^0.11.2", + "rtlcss": "^4.2.0", + "sass": "^1.77.8", + "stylelint": "^16.8.1", + "stylelint-config-recommended-scss": "^14.1.0", "stylelint-order": "^6.0.4" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@babel/code-frame": { @@ -243,6 +242,18 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.11.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", @@ -252,16 +263,30 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", + "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -269,34 +294,50 @@ "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/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/js": { + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.8.0.tgz", + "integrity": "sha512-MfluB7EUfxXtv3i/++oh89uzAr4PDI4nn201hsp+qaXqsjAWzinlZEHEfPgAX4doIlKvPG/i0A9dpKxOLII8yA==", "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -312,12 +353,18 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -408,10 +455,95 @@ "node": ">=14" } }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.6.1.tgz", + "integrity": "sha512-UT0f4t+3sQ/GKW7875NiIIjZJ1Bh4gd7JNfoIkwIQyWqO7wGd0Pqzu0Ho30Ka8MNF5lm++SkVeqAk26vGxoUpg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "2.6.1", + "@stylistic/eslint-plugin-jsx": "2.6.1", + "@stylistic/eslint-plugin-plus": "2.6.1", + "@stylistic/eslint-plugin-ts": "2.6.1", + "@types/eslint": "^9.6.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-js": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.1.tgz", + "integrity": "sha512-iLOiVzcvqzDGD9U0EuVOX680v+XOPiPAjkxWj+Q6iV2GLOM5NB27tKVOpJY7AzBhidwpRbaLTgg3T4UzYx09jw==", + "dev": true, + "dependencies": { + "@types/eslint": "^9.6.0", + "acorn": "^8.12.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-jsx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-jsx/-/eslint-plugin-jsx-2.6.1.tgz", + "integrity": "sha512-5qHLXqxfY6jubAQfDqrifv41fx7gaqA9svDaChxMI6JiHpEBfh+PXxmm3g+B8gJCYVBTC62Rjl0Ny5QabK58bw==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "^2.6.1", + "@types/eslint": "^9.6.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin-plus": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-plus/-/eslint-plugin-plus-2.6.1.tgz", + "integrity": "sha512-z/IYu/q8ipApzNam5utSU+BrXg4pK/Gv9xNbr4eWv/bZppvTWJU62xCO4nw/6r2dHNPnqc7uCHEC7GMlBnPY0A==", + "dev": true, + "dependencies": { + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.1.tgz", + "integrity": "sha512-Mxl1VMorEG1Hc6oBYPD0+KIJOWkjEF1R0liL7wWgKfwpqOkgmnh5lVdZBrYyfRKOE4RlGcwEFTNai1IW6orgVg==", + "dev": true, + "dependencies": { + "@stylistic/eslint-plugin-js": "2.6.1", + "@types/eslint": "^9.6.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, "node_modules/@stylistic/stylelint-plugin": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.1.3.tgz", - "integrity": "sha512-/KUcqX36AbbUk7KvNuM0dWv2XSlPa1M12CPcC//eA4MNEFsZFl+2Kf8UZCLjlIWIrDNitd591vaVkXfOwUtsFQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.0.0.tgz", + "integrity": "sha512-GymY+9CSqkPaZ1A3m3w/tvCdpP3qQcaL1FSaoVv9aKL3Tn6GVJWHc2VWVkbNEsYr4QImHjWnlmVZROwgUEjMmQ==", "dev": true, "dependencies": { "@csstools/css-parser-algorithms": "^2.7.1", @@ -427,21 +559,249 @@ "node": "^18.12 || >=20.9" }, "peerDependencies": { - "stylelint": "^16.0.2" + "stylelint": "^16.8.0" } }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0.tgz", + "integrity": "sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/type-utils": "8.0.0", + "@typescript-eslint/utils": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0.tgz", + "integrity": "sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/typescript-estree": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", + "debug": "^4.3.4" + }, + "engines": { + "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" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz", + "integrity": "sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.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/type-utils": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0.tgz", + "integrity": "sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.0.0", + "@typescript-eslint/utils": "8.0.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz", + "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz", + "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/visitor-keys": "8.0.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "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==", + "dev": true, + "dependencies": { + "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==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz", + "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.0.0", + "@typescript-eslint/types": "8.0.0", + "@typescript-eslint/typescript-estree": "8.0.0" + }, + "engines": { + "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" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz", + "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.0.0", + "eslint-visitor-keys": "^3.4.3" + }, + "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": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -516,6 +876,18 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -567,10 +939,10 @@ "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { + "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", @@ -623,6 +995,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", @@ -709,39 +1097,6 @@ "node": ">=8" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -1065,15 +1420,15 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/eastasianwidth": { @@ -1088,6 +1443,19 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1199,6 +1567,31 @@ "node": ">= 0.4" } }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", @@ -1273,41 +1666,37 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.8.0.tgz", + "integrity": "sha512-K8qnZ/QJzT2dLKdZJVX6W4XOwBzutMYmt0lqUS+JdXgd+HTYFlonFgkJ8s44d/zMPPCnOOk0kMWCApCPhiOy9A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.17.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.8.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -1321,10 +1710,10 @@ "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" } }, "node_modules/eslint-compat-utils": { @@ -1342,93 +1731,6 @@ "eslint": ">=6.0.0" } }, - "node_modules/eslint-compat-utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/eslint-plugin-es-x": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", @@ -1450,105 +1752,62 @@ "eslint": ">=8" } }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-n": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", - "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "version": "17.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.1.tgz", + "integrity": "sha512-hm/q37W6efDptJXdwirsm6A257iY6ZNtpoSG0wEzFzjJ3AhL7OhEIhdSR2e4OdYfHO5EDeqlCfFrjf9q208IPw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", + "enhanced-resolve": "^5.17.0", "eslint-plugin-es-x": "^7.5.0", "get-tsconfig": "^4.7.0", - "globals": "^13.24.0", + "globals": "^15.8.0", "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", + "minimatch": "^9.0.5", "semver": "^7.5.3" }, "engines": { - "node": ">=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "eslint": ">=7.0.0" + "eslint": ">=8.23.0" } }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/eslint-plugin-n/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==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint-plugin-promise": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", - "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.0.0.tgz", + "integrity": "sha512-wb1ECT+b90ndBdAujhIdAU8oQ3Vt5gKqP/t78KOmg0ifynrvc2jGR9f6ndbOVNFpKf6jLUBlBBDF3H3Wk0JICg==", "dev": true, "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" @@ -1557,46 +1816,87 @@ "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, + "node_modules/eslint-plugin-react": { + "version": "7.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", + "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.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/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==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, "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": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.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" @@ -1715,15 +2015,15 @@ } }, "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==", "dev": true, "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/fill-range": { @@ -1755,17 +2055,16 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -1799,12 +2098,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2016,15 +2309,12 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2084,6 +2374,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2223,23 +2519,6 @@ "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "node_modules/ini": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", @@ -2285,6 +2564,21 @@ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -2325,21 +2619,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -2406,6 +2685,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -2415,6 +2706,21 @@ "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2427,6 +2733,18 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -2497,6 +2815,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", @@ -2557,6 +2887,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -2569,6 +2911,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -2581,6 +2939,19 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -2638,18 +3009,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/jsonc-parser": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", @@ -2665,6 +3024,21 @@ "node": ">=0.10.0" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2744,6 +3118,18 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -2900,6 +3286,18 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2960,6 +3358,33 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/neostandard": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/neostandard/-/neostandard-0.11.2.tgz", + "integrity": "sha512-p7CrLh1fOmXzoA53QrrrmxikAF8k+x+d6sr5OX0CvHzzl0UrK2fs7+Vi4/3gnDgZizkji0KNnpJZA62g8f4zBA==", + "dev": true, + "dependencies": { + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@stylistic/eslint-plugin": "^2.6.1", + "@types/eslint": "^9.6.0", + "eslint-plugin-n": "^17.10.1", + "eslint-plugin-promise": "^7.0.0", + "eslint-plugin-react": "^7.35.0", + "find-up": "^5.0.0", + "globals": "^15.9.0", + "peowly": "^1.3.2", + "typescript-eslint": "^8.0.0" + }, + "bin": { + "neostandard": "cli.mjs" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.0.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2969,6 +3394,15 @@ "node": ">=0.10.0" } }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -3008,6 +3442,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.fromentries": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", @@ -3026,20 +3474,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/object.values": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", @@ -3057,15 +3491,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -3158,15 +3583,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3207,6 +3623,15 @@ "node": ">=8" } }, + "node_modules/peowly": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/peowly/-/peowly-1.3.2.tgz", + "integrity": "sha512-BYIrwr8JCXY49jUZscgw311w9oGEKo7ux/s+BxrhKTQbiQ0iYNdZNJ5LgagaeercQdFHwnR7Z5IxxFWVQ+BasQ==", + "dev": true, + "engines": { + "node": ">=18.6.0" + } + }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", @@ -3214,12 +3639,12 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" @@ -3363,6 +3788,17 @@ "node": ">= 0.8.0" } }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3401,6 +3837,12 @@ } ] }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3413,6 +3855,39 @@ "node": ">=8.10.0" } }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", @@ -3441,9 +3916,9 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", @@ -3485,43 +3960,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==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rtlcss": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.2.0.tgz", @@ -3631,12 +4069,15 @@ } }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/set-function-length": { @@ -3831,6 +4272,42 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", @@ -3905,15 +4382,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4272,6 +4740,15 @@ "node": ">=8" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4290,16 +4767,16 @@ "node": ">=8.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, "node_modules/type-check": { @@ -4314,18 +4791,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", @@ -4399,6 +4864,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.0.0.tgz", + "integrity": "sha512-yQWBJutWL1PmpmDddIOl9/Mi6vZjqNCjqSGBMQ4vsc2Aiodk0SnbQQWPXbSy0HNuKCuGkw1+u4aQ2mO40TdhDQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.0.0", + "@typescript-eslint/parser": "8.0.0", + "@typescript-eslint/utils": "8.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -4466,6 +4968,50 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", @@ -4588,12 +5134,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", diff --git a/package.json b/package.json index 45281b1..4243849 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "name": "freshrss-extensions", + "type": "module", "description": "Extensions for FreshRSS", "homepage": "https://freshrss.org/", "readmeFilename": "README.md", @@ -16,11 +17,11 @@ }, "license": "see each extension", "engines": { - "node": ">=12" + "node": ">=18" }, "scripts": { - "eslint": "eslint --ext .js .", - "eslint_fix": "eslint --fix --ext .js .", + "eslint": "eslint .", + "eslint_fix": "eslint --fix .", "markdownlint": "markdownlint '**/*.md'", "markdownlint_fix": "markdownlint --fix '**/*.md'", "rtlcss": "npm run symbolic && rtlcss -d symbolic/ && find -L symbolic/ -type f -name '*.rtl.rtl.css' -delete", @@ -31,18 +32,17 @@ "fix": "npm run rtlcss && npm run stylelint_fix && npm run eslint_fix && npm run markdownlint_fix" }, "devDependencies": { - "eslint": "^8.57.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-n": "^16.6.2", - "eslint-plugin-promise": "^6.1.1", + "eslint": "^9.8.0", + "@eslint/js": "^9.8.0", + "globals": "^15.9.0", "markdownlint-cli": "^0.41.0", - "rtlcss": "^4.1.1", - "sass": "^1.77.6", - "stylelint": "^16.6.1", - "stylelint-config-recommended-scss": "^14.0.0", + "neostandard": "^0.11.2", + "rtlcss": "^4.2.0", + "sass": "^1.77.8", + "stylelint": "^16.8.1", + "stylelint-config-recommended-scss": "^14.1.0", "stylelint-order": "^6.0.4", - "@stylistic/stylelint-plugin": "^2.1.2" + "@stylistic/stylelint-plugin": "^3.0.0" }, "rtlcssConfig": {} } From 474e27f011cfa0d76616266209891fd2292b8d38 Mon Sep 17 00:00:00 2001 From: Joedmin Date: Mon, 5 Aug 2024 12:08:19 +0000 Subject: [PATCH 60/72] Add Readeck Button extension (#245) --- README.md | 4 ++++ repositories.json | 3 +++ 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index ce78399..a6898ad 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,10 @@ There are some FreshRSS extensions out there, developed by community members: * [Pocket Button](https://github.com/christian-putzke/freshrss-pocket-button): Add articles to Pocket with one simple button click or a keyboard shortcut. +### By [@Joedmin](https://github.com/Joedmin/) + +* [Readeck Button](https://github.com/Joedmin/xExtension-readeck-button): Add articles to a selected Readeck instance with one simple button click or a keyboard shortcut. + ### By [@printfuck](https://github.com/printfuck/) * [Readable](https://github.com/printfuck/xExtension-Readable): Fetch article content for selected feeds with [Readability](https://github.com/mozilla/readability) or [Mercury](https://github.com/postlight/mercury-parser) diff --git a/repositories.json b/repositories.json index 496894f..6071f43 100644 --- a/repositories.json +++ b/repositories.json @@ -55,6 +55,9 @@ }, { "url": "https://github.com/christian-putzke/freshrss-pocket-button", "type": "git" +}, { + "url": "https://github.com/Joedmin/xExtension-readeck-button", + "type": "git" }, { "url": "https://github.com/printfuck/xExtension-Readable", "type": "git" From 54fc9718669e4ee8e82338faf6e1f604b7895964 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Tue, 6 Aug 2024 11:20:35 +0000 Subject: [PATCH 61/72] Update extension list --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index bce2785..df6b30b 100644 --- a/extensions.json +++ b/extensions.json @@ -342,6 +342,17 @@ "method": "git", "directory": "." }, + { + "name": "Readeck Button", + "author": "Joedmin", + "description": "Add articles to Readeck with one simple button click or a keyboard shortcut.", + "version": "0.3", + "entrypoint": "ReadeckButton", + "type": "user", + "url": "https://github.com/Joedmin/xExtension-readeck-button", + "method": "git", + "directory": "." + }, { "name": "Reading Time", "author": "Lapineige", From 056ac0d11667a490bcca27e540bc87ee4da7ac57 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sun, 18 Aug 2024 12:55:51 +0200 Subject: [PATCH 62/72] Composer update --- composer.json | 4 ++-- composer.lock | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 0c5d91a..5b04d66 100644 --- a/composer.json +++ b/composer.json @@ -49,8 +49,8 @@ "ext-phar": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-strict-rules": "^1.5", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-strict-rules": "^1.6", "squizlabs/php_codesniffer": "^3.9" }, "scripts": { diff --git a/composer.lock b/composer.lock index c0dbac4..dfb526d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,21 +4,21 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bf0d2d1a05ed08841ca6bd3e7ec96b74", + "content-hash": "52101009acffc9684a721cc20ec9e731", "packages": [], "packages-dev": [ { "name": "phpstan/phpstan", - "version": "1.11.8", + "version": "1.11.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec" + "reference": "640410b32995914bde3eed26fa89552f9c2c082f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", - "reference": "6adbd118e6c0515dd2f36b06cde1d6da40f1b8ec", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f", "shasum": "" }, "require": { @@ -63,7 +63,7 @@ "type": "github" } ], - "time": "2024-07-24T07:01:22+00:00" + "time": "2024-08-08T09:02:50+00:00" }, { "name": "phpstan/phpstan-strict-rules", From aea8482935589041b6b80ef67435f721c90f5ab0 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Mon, 19 Aug 2024 11:20:58 +0000 Subject: [PATCH 63/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index df6b30b..8d526b2 100644 --- a/extensions.json +++ b/extensions.json @@ -335,7 +335,7 @@ "name": "Readable", "author": "printfuck", "description": "Fetch article content for selected feeds with readability or mercury", - "version": "0.2", + "version": "0.3", "entrypoint": "Readable", "type": "user", "url": "https://github.com/printfuck/xExtension-Readable", From 04cf77ab3fedd22237e252ba1aec281ba51add8a Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 26 Sep 2024 11:22:30 +0000 Subject: [PATCH 64/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 8d526b2..6b6f1fa 100644 --- a/extensions.json +++ b/extensions.json @@ -236,7 +236,7 @@ "name": "Kagi Summarizer", "author": "Rudis Muiznieks", "description": "Add buttons to summarize articles with the Kagi Universal Summarizer.", - "version": "0.2", + "version": "0.3", "entrypoint": "KagiSummarizer", "type": "user", "url": "https://code.sitosis.com/rudism/freshrss-kagi-summarizer", From 7a33024e4ea276b0c633f9efab97a0233c90294c Mon Sep 17 00:00:00 2001 From: Christian Putzke Date: Sat, 5 Oct 2024 12:04:04 +0200 Subject: [PATCH 65/72] Update extensions.json --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 6b6f1fa..e5e5519 100644 --- a/extensions.json +++ b/extensions.json @@ -302,7 +302,7 @@ "name": "Pocket Button", "author": "Christian Putzke", "description": "Add articles to Pocket with one simple button click or a keyboard shortcut.", - "version": "0.4", + "version": "0.5", "entrypoint": "PocketButton", "type": "user", "url": "https://github.com/christian-putzke/freshrss-pocket-button", From be89423ecc28d2744e7cefd4f14f5a7cdad7ee8e Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Thu, 17 Oct 2024 11:22:39 +0000 Subject: [PATCH 66/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index e5e5519..5a973a9 100644 --- a/extensions.json +++ b/extensions.json @@ -346,7 +346,7 @@ "name": "Readeck Button", "author": "Joedmin", "description": "Add articles to Readeck with one simple button click or a keyboard shortcut.", - "version": "0.3", + "version": "0.4", "entrypoint": "ReadeckButton", "type": "user", "url": "https://github.com/Joedmin/xExtension-readeck-button", From 30b16a8633bd0dddfd5c4462b47ffe6081473037 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 18 Oct 2024 11:22:31 +0000 Subject: [PATCH 67/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 5a973a9..7a9406a 100644 --- a/extensions.json +++ b/extensions.json @@ -27,7 +27,7 @@ "name": "AutoTTL", "author": "Magnus Kokk", "description": "A FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries.", - "version": "0.5.5", + "version": "0.5.6", "entrypoint": "AutoTTL", "type": "user", "url": "https://github.com/mgnsk/FreshRSS-AutoTTL", From cab51a7e7b593bdcce98642523ea6c63348816b3 Mon Sep 17 00:00:00 2001 From: Joedmin Date: Sat, 19 Oct 2024 17:06:53 +0200 Subject: [PATCH 68/72] Add Wallabag extension (#254) --- README.md | 1 + repositories.json | 3 +++ 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index a6898ad..b6ef878 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ There are some FreshRSS extensions out there, developed by community members: ### By [@Joedmin](https://github.com/Joedmin/) * [Readeck Button](https://github.com/Joedmin/xExtension-readeck-button): Add articles to a selected Readeck instance with one simple button click or a keyboard shortcut. +* [Wallabag Button](https://github.com/Joedmin/xExtension-wallabag-button): Add articles to a selected Wallabag instance with one simple button click or a keyboard shortcut. ### By [@printfuck](https://github.com/printfuck/) diff --git a/repositories.json b/repositories.json index 6071f43..b01bbd1 100644 --- a/repositories.json +++ b/repositories.json @@ -59,6 +59,9 @@ "url": "https://github.com/Joedmin/xExtension-readeck-button", "type": "git" }, { + "url": "https://github.com/Joedmin/xExtension-wallabag-button", + "type": "git" +},{ "url": "https://github.com/printfuck/xExtension-Readable", "type": "git" }, { From e94d04f7f60cdef5fb4072ff7474c4d06bac8248 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Sat, 19 Oct 2024 15:07:31 +0000 Subject: [PATCH 69/72] Update extension list --- extensions.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/extensions.json b/extensions.json index 7a9406a..8a3b24a 100644 --- a/extensions.json +++ b/extensions.json @@ -530,6 +530,17 @@ "method": "git", "directory": "." }, + { + "name": "Wallabag Button", + "author": "Joedmin", + "description": "Add articles to Wallabag with one simple button click or a keyboard shortcut.", + "version": "0.1", + "entrypoint": "WallabagButton", + "type": "user", + "url": "https://github.com/Joedmin/xExtension-wallabag-button", + "method": "git", + "directory": "." + }, { "name": "White List", "author": "Alexis Degrugillier", From d2a87c29386964eb4cceb66ee8d9498e15e6eda6 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Sat, 19 Oct 2024 17:29:30 +0200 Subject: [PATCH 70/72] Sync PHPCS settings with FreshRSS (#255) https://github.com/FreshRSS/FreshRSS/pull/6896 --- phpcs.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/phpcs.xml b/phpcs.xml index 64002d1..05eeefe 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -11,7 +11,7 @@ ./lib/marienfressinaud/ ./lib/phpgt/ ./lib/phpmailer/ - ./lib/SimplePie/ + ./lib/simplepie/ ./node_modules/ ./p/scripts/vendor/ ./vendor/ @@ -88,12 +88,17 @@ *\.phtml$ + *\.phtml$ + + *\.php$ + + *\.phtml$ From 2fa8c5c3321e767eb500cf47fde9ca026c92e758 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Wed, 23 Oct 2024 11:22:18 +0000 Subject: [PATCH 71/72] Update extension list --- extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions.json b/extensions.json index 8a3b24a..a63fbf7 100644 --- a/extensions.json +++ b/extensions.json @@ -27,7 +27,7 @@ "name": "AutoTTL", "author": "Magnus Kokk", "description": "A FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries.", - "version": "0.5.6", + "version": "0.5.7", "entrypoint": "AutoTTL", "type": "user", "url": "https://github.com/mgnsk/FreshRSS-AutoTTL", From 90fc5e7a9181448f04c7c8a91051e3473892a089 Mon Sep 17 00:00:00 2001 From: GitHub Actions Bot <> Date: Fri, 25 Oct 2024 11:22:30 +0000 Subject: [PATCH 72/72] Update extension list --- extensions.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions.json b/extensions.json index a63fbf7..6ed7f03 100644 --- a/extensions.json +++ b/extensions.json @@ -27,7 +27,7 @@ "name": "AutoTTL", "author": "Magnus Kokk", "description": "A FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries.", - "version": "0.5.7", + "version": "0.5.8", "entrypoint": "AutoTTL", "type": "user", "url": "https://github.com/mgnsk/FreshRSS-AutoTTL", @@ -346,7 +346,7 @@ "name": "Readeck Button", "author": "Joedmin", "description": "Add articles to Readeck with one simple button click or a keyboard shortcut.", - "version": "0.4", + "version": "0.5", "entrypoint": "ReadeckButton", "type": "user", "url": "https://github.com/Joedmin/xExtension-readeck-button", @@ -534,7 +534,7 @@ "name": "Wallabag Button", "author": "Joedmin", "description": "Add articles to Wallabag with one simple button click or a keyboard shortcut.", - "version": "0.1", + "version": "0.2", "entrypoint": "WallabagButton", "type": "user", "url": "https://github.com/Joedmin/xExtension-wallabag-button",