diff --git a/composer.lock b/composer.lock index 2609d98e..4a364edb 100644 --- a/composer.lock +++ b/composer.lock @@ -8,16 +8,16 @@ "packages": [ { "name": "arabcoders/database", - "version": "v1.0.4", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/arabcoders/database.git", - "reference": "d47bfcf9b4ea3d1d01d83185f39f2eca9044144b" + "reference": "6ff4c9389e0972562797b6d14748ac6e5d70cb73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/arabcoders/database/zipball/d47bfcf9b4ea3d1d01d83185f39f2eca9044144b", - "reference": "d47bfcf9b4ea3d1d01d83185f39f2eca9044144b", + "url": "https://api.github.com/repos/arabcoders/database/zipball/6ff4c9389e0972562797b6d14748ac6e5d70cb73", + "reference": "6ff4c9389e0972562797b6d14748ac6e5d70cb73", "shasum": "" }, "require": { @@ -60,9 +60,9 @@ ], "support": { "issues": "https://github.com/arabcoders/database/issues", - "source": "https://github.com/arabcoders/database/tree/v1.0.4" + "source": "https://github.com/arabcoders/database/tree/v1.0.5" }, - "time": "2026-05-01T21:45:42+00:00" + "time": "2026-05-21T08:28:26+00:00" }, { "name": "dragonmantank/cron-expression", @@ -1376,25 +1376,25 @@ }, { "name": "symfony/cache", - "version": "v8.0.10", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "8ff96cde73684bfa32b702f5cff1eb83b1fac429" + "reference": "ba62e0ed9ea9bc26142844a891d4a3dfceb24aed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/8ff96cde73684bfa32b702f5cff1eb83b1fac429", - "reference": "8ff96cde73684bfa32b702f5cff1eb83b1fac429", + "url": "https://api.github.com/repos/symfony/cache/zipball/ba62e0ed9ea9bc26142844a891d4a3dfceb24aed", + "reference": "ba62e0ed9ea9bc26142844a891d4a3dfceb24aed", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/cache": "^2.0|^3.0", "psr/log": "^1.1|^2|^3", "symfony/cache-contracts": "^3.6", "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^7.4|^8.0" + "symfony/var-exporter": "^8.1" }, "conflict": { "ext-redis": "<6.1", @@ -1451,7 +1451,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v8.0.10" + "source": "https://github.com/symfony/cache/tree/v8.1.0" }, "funding": [ { @@ -1471,7 +1471,7 @@ "type": "tidelift" } ], - "time": "2026-05-05T08:24:00+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/cache-contracts", @@ -1555,23 +1555,29 @@ }, { "name": "symfony/console", - "version": "v8.0.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7113778e2e91f4709cb3194a75dfa9c0d028d94d" + "reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7113778e2e91f4709cb3194a75dfa9c0d028d94d", - "reference": "7113778e2e91f4709cb3194a75dfa9c0d028d94d", + "url": "https://api.github.com/repos/symfony/console/zipball/f5a856c6ecb56b3c21ed94a5b7bf940d857d110a", + "reference": "f5a856c6ecb56b3c21ed94a5b7bf940d857d110a", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.4|^8.0" + "symfony/string": "^7.4.6|^8.0.6" + }, + "conflict": { + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -1579,14 +1585,18 @@ "require-dev": { "psr/log": "^1|^2|^3", "symfony/config": "^7.4|^8.0", - "symfony/dependency-injection": "^7.4|^8.0", - "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", "symfony/http-foundation": "^7.4|^8.0", "symfony/http-kernel": "^7.4|^8.0", "symfony/lock": "^7.4|^8.0", "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", "symfony/process": "^7.4|^8.0", "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", @@ -1621,7 +1631,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v8.0.9" + "source": "https://github.com/symfony/console/tree/v8.1.0" }, "funding": [ { @@ -1641,7 +1651,7 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1716,20 +1726,21 @@ }, { "name": "symfony/event-dispatcher", - "version": "v8.0.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f" + "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0c3c1a17604c4dbbec4b93fe162c538482096e1f", - "reference": "0c3c1a17604c4dbbec4b93fe162c538482096e1f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f249ae3f680958b6f1f9dd76e5747cf0695b4102", + "reference": "f249ae3f680958b6f1f9dd76e5747cf0695b4102", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { @@ -1777,7 +1788,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.9" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.1.0" }, "funding": [ { @@ -1797,7 +1808,7 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:51:42+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -1881,22 +1892,23 @@ }, { "name": "symfony/http-client", - "version": "v8.0.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "537c7f164078975b800f3f1c56810791024e4c77" + "reference": "68a48e4c31f63fcd1bdff997a85a09e55efe8cdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/537c7f164078975b800f3f1c56810791024e4c77", - "reference": "537c7f164078975b800f3f1c56810791024e4c77", + "url": "https://api.github.com/repos/symfony/http-client/zipball/68a48e4c31f63fcd1bdff997a85a09e55efe8cdb", + "reference": "68a48e4c31f63fcd1bdff997a85a09e55efe8cdb", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/log": "^1|^2|^3", - "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/http-client-contracts": "^3.7", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -1912,7 +1924,7 @@ "require-dev": { "amphp/http-client": "^5.3.2", "amphp/http-tunnel": "^2.0", - "guzzlehttp/promises": "^1.4|^2.0", + "guzzlehttp/guzzle": "^7.10", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", @@ -1953,7 +1965,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v8.0.9" + "source": "https://github.com/symfony/http-client/tree/v8.1.0" }, "funding": [ { @@ -1973,7 +1985,7 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/http-client-contracts", @@ -2059,20 +2071,20 @@ }, { "name": "symfony/lock", - "version": "v8.0.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/lock.git", - "reference": "02e7142df3d647411fd88655d20d8ec79dafb78c" + "reference": "501dbc68f546a87b82d3a7430d15c6b63fc12b71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/lock/zipball/02e7142df3d647411fd88655d20d8ec79dafb78c", - "reference": "02e7142df3d647411fd88655d20d8ec79dafb78c", + "url": "https://api.github.com/repos/symfony/lock/zipball/501dbc68f546a87b82d3a7430d15c6b63fc12b71", + "reference": "501dbc68f546a87b82d3a7430d15c6b63fc12b71", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "psr/log": "^1|^2|^3" }, "conflict": { @@ -2117,7 +2129,7 @@ "semaphore" ], "support": { - "source": "https://github.com/symfony/lock/tree/v8.0.9" + "source": "https://github.com/symfony/lock/tree/v8.1.0" }, "funding": [ { @@ -2137,7 +2149,94 @@ "type": "tidelift" } ], - "time": "2026-04-29T15:02:55+00:00" + "time": "2026-05-29T05:06:50+00:00" + }, + { + "name": "symfony/polyfill-deepclone", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-deepclone.git", + "reference": "2ca9e9e75ead5174f2b44613a646bdc9338b8eb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/2ca9e9e75ead5174f2b44613a646bdc9338b8eb4", + "reference": "2ca9e9e75ead5174f2b44613a646bdc9338b8eb4", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "provide": { + "ext-deepclone": "*" + }, + "suggest": { + "ext-deepclone": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\DeepClone\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the deepclone extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "deepclone", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.37.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-26T13:03:27+00:00" }, { "name": "symfony/polyfill-uuid", @@ -2224,20 +2323,20 @@ }, { "name": "symfony/process", - "version": "v8.0.8", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", + "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.4.1" }, "type": "library", "autoload": { @@ -2265,7 +2364,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.8" + "source": "https://github.com/symfony/process/tree/v8.1.0" }, "funding": [ { @@ -2285,7 +2384,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/service-contracts", @@ -2376,20 +2475,20 @@ }, { "name": "symfony/string", - "version": "v8.0.8", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" + "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", + "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9", + "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-intl-grapheme": "^1.33", "symfony/polyfill-intl-normalizer": "^1.0", @@ -2442,7 +2541,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.8" + "source": "https://github.com/symfony/string/tree/v8.1.0" }, "funding": [ { @@ -2462,24 +2561,24 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/uid", - "version": "v8.0.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "4d9d6510bbe88ebb4608b7200d18606cdf80825c" + "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/4d9d6510bbe88ebb4608b7200d18606cdf80825c", - "reference": "4d9d6510bbe88ebb4608b7200d18606cdf80825c", + "url": "https://api.github.com/repos/symfony/uid/zipball/7393f157a55f7e70a4de0334435c55a5a8fe749a", + "reference": "7393f157a55f7e70a4de0334435c55a5a8fe749a", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { @@ -2520,7 +2619,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v8.0.9" + "source": "https://github.com/symfony/uid/tree/v8.1.0" }, "funding": [ { @@ -2540,24 +2639,26 @@ "type": "tidelift" } ], - "time": "2026-04-30T16:10:06+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/var-exporter", - "version": "v8.0.9", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "24cf67be4dd0926e4413635418682f4fff831412" + "reference": "2dd18582c5f6c024db9fc0ff9c76d873af726f34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/24cf67be4dd0926e4413635418682f4fff831412", - "reference": "24cf67be4dd0926e4413635418682f4fff831412", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2dd18582c5f6c024db9fc0ff9c76d873af726f34", + "reference": "2dd18582c5f6c024db9fc0ff9c76d873af726f34", "shasum": "" }, "require": { - "php": ">=8.4" + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-deepclone": "^1.37" }, "require-dev": { "symfony/property-access": "^7.4|^8.0", @@ -2587,11 +2688,12 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "description": "Provides tools to export, instantiate, hydrate, clone and lazy-load PHP objects", "homepage": "https://symfony.com", "keywords": [ "clone", "construct", + "deep-clone", "export", "hydrate", "instantiate", @@ -2600,7 +2702,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v8.0.9" + "source": "https://github.com/symfony/var-exporter/tree/v8.1.0" }, "funding": [ { @@ -2620,31 +2722,32 @@ "type": "tidelift" } ], - "time": "2026-04-18T13:51:42+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "symfony/yaml", - "version": "v8.0.10", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "aa9ee60c41d9b20a2468c41ff0a32e2a7405ac05" + "reference": "efb42bd2c6f4f3ccfd4683583449938b5fc146b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/aa9ee60c41d9b20a2468c41ff0a32e2a7405ac05", - "reference": "aa9ee60c41d9b20a2468c41ff0a32e2a7405ac05", + "url": "https://api.github.com/repos/symfony/yaml/zipball/efb42bd2c6f4f3ccfd4683583449938b5fc146b0", + "reference": "efb42bd2c6f4f3ccfd4683583449938b5fc146b0", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/console": "<7.4" }, "require-dev": { - "symfony/console": "^7.4|^8.0" + "symfony/console": "^7.4|^8.0", + "yaml/yaml-test-suite": "*" }, "bin": [ "Resources/bin/yaml-lint" @@ -2675,7 +2778,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v8.0.10" + "source": "https://github.com/symfony/yaml/tree/v8.1.0" }, "funding": [ { @@ -2695,22 +2798,22 @@ "type": "tidelift" } ], - "time": "2026-05-05T08:10:04+00:00" + "time": "2026-05-29T05:06:50+00:00" } ], "packages-dev": [ { "name": "carthage-software/mago", - "version": "1.26.0", + "version": "1.29.0", "source": { "type": "git", "url": "https://github.com/carthage-software/mago.git", - "reference": "9ae2f7ad58ffeeaa2ff890e736a8658f8e397cdf" + "reference": "8aab53f6d004f9a6e85128c365d3d28737fdb272" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/carthage-software/mago/zipball/9ae2f7ad58ffeeaa2ff890e736a8658f8e397cdf", - "reference": "9ae2f7ad58ffeeaa2ff890e736a8658f8e397cdf", + "url": "https://api.github.com/repos/carthage-software/mago/zipball/8aab53f6d004f9a6e85128c365d3d28737fdb272", + "reference": "8aab53f6d004f9a6e85128c365d3d28737fdb272", "shasum": "" }, "require": { @@ -2725,9 +2828,12 @@ "type": "library", "autoload": { "files": [ - "composer/functions.php", - "composer/internal.php" - ] + "composer/src/functions.php", + "composer/src/internal.php" + ], + "psr-4": { + "Mago\\": "composer/src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2745,7 +2851,7 @@ ], "support": { "issues": "https://github.com/carthage-software/mago/issues", - "source": "https://github.com/carthage-software/mago/tree/1.26.0" + "source": "https://github.com/carthage-software/mago/tree/1.29.0" }, "funding": [ { @@ -2753,7 +2859,7 @@ "type": "github" } ], - "time": "2026-05-06T21:44:02+00:00" + "time": "2026-05-23T18:53:33+00:00" }, { "name": "myclabs/deep-copy", @@ -2993,16 +3099,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "14.1.8", + "version": "14.1.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "031856c28c060e1c1d1fc94d256e3ffbe4230c91" + "reference": "3719c5b6c045761798238ebacfee1fe06e4ce5be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/031856c28c060e1c1d1fc94d256e3ffbe4230c91", - "reference": "031856c28c060e1c1d1fc94d256e3ffbe4230c91", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/3719c5b6c045761798238ebacfee1fe06e4ce5be", + "reference": "3719c5b6c045761798238ebacfee1fe06e4ce5be", "shasum": "" }, "require": { @@ -3014,14 +3120,14 @@ "php": ">=8.4", "phpunit/php-text-template": "^6.0", "sebastian/complexity": "^6.0", - "sebastian/environment": "^9.2", + "sebastian/environment": "^9.3.2", "sebastian/git-state": "^1.0", - "sebastian/lines-of-code": "^5.0", + "sebastian/lines-of-code": "^5.0.1", "sebastian/version": "^7.0", "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^13.1" + "phpunit/phpunit": "^13.1.13" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -3059,7 +3165,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.1.8" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.1.10" }, "funding": [ { @@ -3079,7 +3185,7 @@ "type": "tidelift" } ], - "time": "2026-05-09T12:06:52+00:00" + "time": "2026-06-01T13:26:42+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3376,16 +3482,16 @@ }, { "name": "phpunit/phpunit", - "version": "13.1.9", + "version": "13.1.13", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "506033fd7d6855fea1e2973767d65844412b4574" + "reference": "ddf7f25d9ee9652b464475d7f3bacde2613e355e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/506033fd7d6855fea1e2973767d65844412b4574", - "reference": "506033fd7d6855fea1e2973767d65844412b4574", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ddf7f25d9ee9652b464475d7f3bacde2613e355e", + "reference": "ddf7f25d9ee9652b464475d7f3bacde2613e355e", "shasum": "" }, "require": { @@ -3399,21 +3505,21 @@ "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.4.1", - "phpunit/php-code-coverage": "^14.1.8", + "phpunit/php-code-coverage": "^14.1.9", "phpunit/php-file-iterator": "^7.0.0", "phpunit/php-invoker": "^7.0.0", "phpunit/php-text-template": "^6.0.0", "phpunit/php-timer": "^9.0.0", "sebastian/cli-parser": "^5.0.0", - "sebastian/comparator": "^8.1.2", - "sebastian/diff": "^8.1.0", - "sebastian/environment": "^9.3.0", - "sebastian/exporter": "^8.0.2", + "sebastian/comparator": "^8.2.1", + "sebastian/diff": "^8.3.0", + "sebastian/environment": "^9.3.2", + "sebastian/exporter": "^8.1.0", "sebastian/git-state": "^1.0", "sebastian/global-state": "^9.0.0", "sebastian/object-enumerator": "^8.0.0", "sebastian/recursion-context": "^8.0.0", - "sebastian/type": "^7.0.0", + "sebastian/type": "^7.0.1", "sebastian/version": "^7.0.0", "staabm/side-effects-detector": "^1.0.5" }, @@ -3455,7 +3561,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/13.1.9" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.1.13" }, "funding": [ { @@ -3463,7 +3569,7 @@ "type": "other" } ], - "time": "2026-05-13T04:00:53+00:00" + "time": "2026-05-27T14:03:08+00:00" }, { "name": "roave/security-advisories", @@ -3471,18 +3577,18 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "ec0c867c22e5b8d392815d48e4cc9de37470e8c0" + "reference": "dbed7be7bb408eef2d3812a0d173671940f92a9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/ec0c867c22e5b8d392815d48e4cc9de37470e8c0", - "reference": "ec0c867c22e5b8d392815d48e4cc9de37470e8c0", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/dbed7be7bb408eef2d3812a0d173671940f92a9a", + "reference": "dbed7be7bb408eef2d3812a0d173671940f92a9a", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", "adaptcms/adaptcms": "<=1.3", - "admidio/admidio": "<=5.0.8", + "admidio/admidio": "<=5.0.9", "adodb/adodb-php": "<=5.22.9", "aheinze/cockpit": "<2.2", "aimeos/ai-admin-graphql": ">=2022.04.1,<2022.10.10|>=2023.04.1,<2023.10.6|>=2024.04.1,<2024.07.2", @@ -3531,7 +3637,7 @@ "auth0/login": "<=7.20", "auth0/symfony": "<=5.7", "auth0/wordpress": "<=5.5", - "automad/automad": "<2.0.0.0-alpha5", + "automad/automad": "<=2.0.0.0-beta27", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<=3.371.3", @@ -3539,7 +3645,7 @@ "azuracast/azuracast": "<=0.23.5", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", - "backpack/crud": "<3.4.9", + "backpack/crud": "<4.0.63|>=4.1,<4.1.69|>=5,<5.0.13", "backpack/filemanager": "<2.0.2|>=3,<3.0.9", "bacula-web/bacula-web": "<9.7.1", "badaso/core": "<=2.9.11", @@ -3591,13 +3697,13 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<=0.31.7", + "ci4-cms-erp/ci4ms": "<=0.31.8", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", "co-stack/fal_sftp": "<0.2.6", - "cockpit-hq/cockpit": "<2.14", - "code16/sharp": "<9.20", + "cockpit-hq/cockpit": "<=2.14", + "code16/sharp": "<9.22", "codeception/codeception": "<3.1.3|>=4,<4.1.22", "codeigniter/framework": "<3.1.10", "codeigniter4/framework": "<4.6.2", @@ -3607,7 +3713,7 @@ "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<2.2.27|>=2.3,<2.9.6", + "composer/composer": "<2.2.28|>=2.3,<2.9.8", "concrete5/concrete5": "<9.4.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -3617,7 +3723,7 @@ "contao/core-bundle": "<4.13.57|>=5,<5.3.42|>=5.4,<5.6.5", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", - "coreshop/core-shop": "<4.1.9", + "coreshop/core-shop": "<4.1.9|==5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", "couleurcitron/tarteaucitron-wp": "<0.3", @@ -3707,6 +3813,7 @@ "drupal/umami_analytics": "<1.0.1", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", + "easycorp/easyadmin-bundle": ">=4,<4.29.10|>=5,<5.0.10", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.3.1", "ecodev/newsletter": "<=4", "ectouch/ectouch": "<=2.7.2", @@ -3722,6 +3829,7 @@ "erusev/parsedown": "<1.7.2", "ether/logs": "<3.0.4", "evolutioncms/evolution": "<=3.2.3", + "evoweb/sf-register": "<13.2.4|>=14,<14.0.2", "exceedone/exment": "<4.4.3|>=5,<5.0.3", "exceedone/laravel-admin": "<2.2.3|==3", "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", @@ -3786,21 +3894,22 @@ "friendsofsymfony1/symfony1": ">=1.1,<1.5.19", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "friendsoftypo3/tt-address": "<8.1.2|>=9,<9.1.1|>=10,<10.0.1", "froala/wysiwyg-editor": "<=4.3", "frosh/adminer-platform": "<2.2.1", - "froxlor/froxlor": "<2.3.6", + "froxlor/froxlor": "<2.3.7", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", "funadmin/funadmin": "<=7.1.0.0-RC6", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", - "georgringer/news": "<1.3.3", + "georgringer/news": "<10.0.4|>=11,<11.4.4|>=12,<12.3.2|>=13,<13.0.2|>=14,<14.0.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", - "getgrav/grav": "<2.0.0.0-beta4", + "getgrav/grav": "<=2.0.0.0-RC1", "getgrav/grav-plugin-api": "<1.0.0.0-beta15", "getgrav/grav-plugin-form": "<9.1", - "getkirby/cms": "<4.9|>=5,<5.4", + "getkirby/cms": "<=4.9|>=5,<=5.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", @@ -3848,6 +3957,7 @@ "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", + "illuminate/mail": ">=9,<12.60|>=13,<13.10", "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", "imdbphp/imdbphp": "<=5.1.1", "impresscms/impresscms": "<=1.4.5", @@ -3902,20 +4012,21 @@ "kimai/kimai": "<=2.55", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<=1.4.2", + "knplabs/knp-snappy": "<=1.7", "kohana/core": "<3.3.3", "koillection/koillection": "<1.6.12", "krayin/laravel-crm": "<=2.2", "kreait/firebase-php": ">=3.2,<3.8.1", "kumbiaphp/kumbiapp": "<=1.1.1", "la-haute-societe/tcpdf": "<6.2.22", + "laktak/hjson": "<2.3", "laminas/laminas-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", "laminas/laminas-http": "<2.14.2", "lara-zeus/artemis": ">=1,<=1.0.6", "lara-zeus/dynamic-dashboard": ">=3,<=3.0.1", "laravel/fortify": "<1.11.1", - "laravel/framework": "<10.48.29|>=11,<11.44.1|>=12,<12.1.1", + "laravel/framework": "<12.60|>=13,<13.10", "laravel/laravel": ">=5.4,<5.4.22", "laravel/passport": ">=13,<13.7.1", "laravel/pulse": "<1.3.1", @@ -3993,6 +4104,7 @@ "miraheze/ts-portal": "<=33", "mittwald/typo3_forum": "<1.2.1", "mix/mix": ">=2,<=2.2.17", + "mmc/ceselector": "<3.0.3|>=4,<4.0.2|>=5,<5.0.1|>=6,<6.0.1", "mobiledetect/mobiledetectlib": "<2.8.32", "modx/revolution": "<=3.1", "mojo42/jirafeau": "<4.4", @@ -4086,7 +4198,7 @@ "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", "personnummer/personnummer": "<3.0.2", "ph7software/ph7builder": "<=17.9.1", - "phanan/koel": "<5.1.4", + "phanan/koel": "<=9.3.4", "phenx/php-svg-lib": "<0.5.2", "php-censor/php-censor": "<2.0.13|>=2.1,<2.1.5", "php-mod/curl": "<2.3.2", @@ -4096,7 +4208,7 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<=4.1.1", + "phpmyfaq/phpmyfaq": "<4.1.3", "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", @@ -4111,14 +4223,14 @@ "phpxmlrpc/phpxmlrpc": "<4.9.2", "phraseanet/phraseanet": "==4.0.3", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<=1.7.15|>=2.0.0.0-RC1-dev,<=2.2.2", + "pimcore/admin-ui-classic-bundle": "<=2.3.5", "pimcore/customer-management-framework-bundle": "<4.2.1", "pimcore/data-hub": "<1.2.4", "pimcore/data-importer": "<1.8.9|>=1.9,<1.9.3", "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<=11.5.14.1|>=12,<12.3.3|==12.3.3", + "pimcore/pimcore": "<=12.3.6", "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", @@ -4144,7 +4256,7 @@ "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "psy/psysh": "<=0.11.22|>=0.12,<=0.12.18", - "pterodactyl/panel": "<1.12.1", + "pterodactyl/panel": "<1.12.3", "ptheofan/yii2-statemachine": ">=2.0.0.0-RC1-dev,<=2", "ptrofimov/beanstalk_console": "<1.7.14", "pubnub/pubnub": "<6.1", @@ -4187,9 +4299,11 @@ "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", - "setasign/fpdi": "<2.6.4", + "setasign/fpdi": "<2.6.7", "sfroemken/url_redirect": "<=1.2.1", "sheng/yiicms": "<1.2.1", + "shopper/cart": "<2.8", + "shopper/framework": "<2.8", "shopware/core": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", "shopware/platform": "<6.6.10.15-dev|>=6.7,<6.7.8.1-dev", "shopware/production": "<=6.3.5.2", @@ -4221,6 +4335,7 @@ "simplesamlphp/saml2": "<=4.16.15|>=5.0.0.0-alpha1,<=5.0.0.0-alpha19", "simplesamlphp/saml2-legacy": "<=4.16.15", "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/simplesamlphp-module-casserver": "<=7.0.2", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", @@ -4242,6 +4357,7 @@ "soosyze/soosyze": "<=2", "spatie/browsershot": "<5.0.5", "spatie/image-optimizer": "<1.7.3", + "spatie/schema-org": ">=3.23.1,<3.23.2|>=4,<4.0.2", "spencer14420/sp-php-email-handler": "<1", "spipu/html2pdf": "<5.2.8", "spiral/roadrunner": "<2025.1", @@ -4253,14 +4369,14 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.21|>=6,<6.15", + "statamic/cms": "<5.73.22|>=6,<6.18.1", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<=2.1.67", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", "sulu/form-bundle": ">=2,<2.5.3", - "sulu/sulu": "<2.6.22|>=3,<3.0.5", + "sulu/sulu": "<=2.6.22|>=3,<=3.0.5", "sumocoders/framework-user-bundle": "<1.4", "superbig/craft-audit": "<3.0.2", "svewap/a21glossary": "<=0.4.10", @@ -4278,42 +4394,53 @@ "symbiote/silverstripe-seed": "<6.0.3", "symbiote/silverstripe-versionedfiles": "<=2.0.3", "symfont/process": ">=0", - "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/cache": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/dom-crawler": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<5.3.15|>=5.4.3,<5.4.4|>=6.0.3,<6.0.4", - "symfony/http-client": ">=4.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", - "symfony/http-foundation": "<5.4.50|>=6,<6.4.29|>=7,<7.3.7", - "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/html-sanitizer": ">=6.1,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/http-client": ">=4.3,<5.4.53|>=6,<6.4.15|>=7,<7.1.8", + "symfony/http-foundation": "<5.4.50|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6|>=7.4,<7.4.12|>=8,<8.0.12", "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/json-path": ">=7.3,<7.4.12|>=8,<8.0.12", + "symfony/lox24-notifier": ">=7.1,<7.4.12|>=8,<8.0.12", + "symfony/mailer": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/mailjet-mailer": ">=6.4,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/mailomat-mailer": ">=7.2,<7.4.13|>=8,<8.0.13", + "symfony/mailtrap-mailer": ">=7.2,<7.4.12|>=8,<8.0.12", "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", - "symfony/mime": ">=4.3,<4.3.8", + "symfony/mime": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/monolog-bridge": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill": ">=1,<1.10|>=1.17.1,<1.38.1", + "symfony/polyfill-intl-idn": ">=1.17.1,<1.38.1", "symfony/polyfill-php55": ">=1,<1.10", "symfony/process": "<5.4.51|>=6,<6.4.33|>=7,<7.1.7|>=7.3,<7.3.11|>=7.4,<7.4.5|>=8,<8.0.5", "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/routing": ">=2,<2.0.19", - "symfony/runtime": ">=5.3,<5.4.46|>=6,<6.4.14|>=7,<7.1.7", + "symfony/routing": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", + "symfony/runtime": ">=5.3,<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.4.10|>=7,<7.0.10|>=7.1,<7.1.3", "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.4.47|>=6,<6.4.15|>=7,<7.1.8", + "symfony/security-http": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": "<5.4.51|>=6,<6.4.33|>=7,<7.3.11|>=7.4,<7.4.5|>=8,<8.0.5", + "symfony/symfony": "<5.4.53|>=6,<6.4.41|>=7,<7.4.13|>=8,<8.0.13", "symfony/translation": ">=2,<2.0.17", - "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8", - "symfony/ux-autocomplete": "<2.11.2", - "symfony/ux-live-component": "<2.25.1", + "symfony/twig-bridge": ">=2,<4.4.51|>=5,<5.4.31|>=6,<6.3.8|>=6.4.24,<6.4.40", + "symfony/twilio-notifier": ">=6.4,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", + "symfony/ux-autocomplete": "<2.36|>=3,<3.1", + "symfony/ux-live-component": "<2.36|>=3,<3.1", "symfony/ux-twig-component": "<2.25.1", "symfony/validator": "<5.4.43|>=6,<6.4.11|>=7,<7.1.4", "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4|>=7.2.9,<7.4.12|>=8,<8.0.12", "symfony/webhook": ">=6.3,<6.3.8", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7|>=2.2.0.0-beta1,<2.2.0.0-beta2", + "symfony/yaml": "<5.4.52|>=6,<6.4.40|>=7,<7.4.12|>=8,<8.0.12", "symphonycms/symphony-2": "<2.6.4", "t3/dce": "<0.11.5|>=2.2,<2.6.2", "t3g/svg-sanitizer": "<1.0.3", @@ -4327,7 +4454,7 @@ "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<=4.1.1", + "thorsten/phpmyfaq": "<4.1.3", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -4335,16 +4462,20 @@ "titon/framework": "<9.9.99", "tltneon/lgsl": "<7", "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "tomasnorre/crawler": "<11.0.13|>=12,<12.0.11", "topthink/framework": "<6.0.17|>=6.1,<=8.0.4", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3|>=6.1.3,<=8.0.4", "torrentpier/torrentpier": "<=2.8.8", - "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "tpwd/ke_search": "<5.6.2|>=6,<6.6.1|>=7,<7.0.1", "tribalsystems/zenario": "<=9.7.61188", "truckersmp/phpwhois": "<=4.3.1", "ttskch/pagination-service-provider": "<1", "twbs/bootstrap": "<3.4.1|>=4,<4.3.1", - "twig/twig": "<3.11.2|>=3.12,<3.14.1|>=3.16,<3.19", + "twig/cssinliner-extra": "<3.26", + "twig/intl-extra": "<3.26", + "twig/markdown-extra": "<3.26", + "twig/twig": "<3.27", "typicms/core": "<16.1.7", "typo3/cms": "<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", "typo3/cms-backend": "<4.1.14|>=4.2,<4.2.15|>=4.3,<4.3.7|>=4.4,<4.4.4|>=7,<=7.6.50|>=8,<=8.7.39|>=9,<9.5.55|>=10,<=10.4.54|>=11,<=11.5.48|>=12,<=12.4.40|>=13,<=13.4.22|>=14,<=14.0.1|==14.2", @@ -4386,7 +4517,7 @@ "uvdesk/core-framework": "<=1.1.1", "vanilla/safecurl": "<0.9.2", "verbb/comments": "<1.5.5", - "verbb/formie": "<=2.1.43", + "verbb/formie": "<2.2.21|>=3,<3.1.26", "verbb/image-resizer": "<2.0.9", "verbb/knock-knock": "<1.2.8", "verot/class.upload.php": "<=2.1.6", @@ -4434,7 +4565,7 @@ "xpressengine/xpressengine": "<3.0.15", "yab/quarx": "<2.4.5", "yansongda/pay": "<=3.7.19", - "yeswiki/yeswiki": "<=4.6", + "yeswiki/yeswiki": "<4.6.4", "yetiforce/yetiforce-crm": "<6.5", "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", @@ -4529,7 +4660,7 @@ "type": "tidelift" } ], - "time": "2026-05-11T19:35:52+00:00" + "time": "2026-06-03T22:45:07+00:00" }, { "name": "sebastian/cli-parser", @@ -4602,27 +4733,27 @@ }, { "name": "sebastian/comparator", - "version": "8.1.2", + "version": "8.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "b3d09f4360ad97dcad8f82d1c047ad16ff38b7e1" + "reference": "ce999bf08b2c387a5423fe56961c32eed3f88089" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b3d09f4360ad97dcad8f82d1c047ad16ff38b7e1", - "reference": "b3d09f4360ad97dcad8f82d1c047ad16ff38b7e1", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ce999bf08b2c387a5423fe56961c32eed3f88089", + "reference": "ce999bf08b2c387a5423fe56961c32eed3f88089", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", "php": ">=8.4", - "sebastian/diff": "^8.1", - "sebastian/exporter": "^8.0" + "sebastian/diff": "^8.3", + "sebastian/exporter": "^8.0.3" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.1.10" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -4630,7 +4761,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.1-dev" + "dev-main": "8.2-dev" } }, "autoload": { @@ -4670,7 +4801,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/8.1.2" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.2.1" }, "funding": [ { @@ -4690,7 +4821,7 @@ "type": "tidelift" } ], - "time": "2026-04-14T08:24:42+00:00" + "time": "2026-05-21T04:46:40+00:00" }, { "name": "sebastian/complexity", @@ -4764,16 +4895,16 @@ }, { "name": "sebastian/diff", - "version": "8.1.0", + "version": "8.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "9c957d730257f49c873f3761674559bd90098a7d" + "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/9c957d730257f49c873f3761674559bd90098a7d", - "reference": "9c957d730257f49c873f3761674559bd90098a7d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b36d33b6e796513de7cb7df053afb3f55eefcd47", + "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47", "shasum": "" }, "require": { @@ -4786,7 +4917,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.1-dev" + "dev-main": "8.3-dev" } }, "autoload": { @@ -4819,7 +4950,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/8.1.0" + "source": "https://github.com/sebastianbergmann/diff/tree/8.3.0" }, "funding": [ { @@ -4839,27 +4970,27 @@ "type": "tidelift" } ], - "time": "2026-04-05T12:02:33+00:00" + "time": "2026-05-15T04:58:09+00:00" }, { "name": "sebastian/environment", - "version": "9.3.0", + "version": "9.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "6767059a30e4277ac95ee034809e793528464768" + "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6767059a30e4277ac95ee034809e793528464768", - "reference": "6767059a30e4277ac95ee034809e793528464768", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e", + "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.1.11" }, "suggest": { "ext-posix": "*" @@ -4895,7 +5026,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/9.3.0" + "source": "https://github.com/sebastianbergmann/environment/tree/9.3.2" }, "funding": [ { @@ -4915,20 +5046,20 @@ "type": "tidelift" } ], - "time": "2026-04-15T12:14:03+00:00" + "time": "2026-05-25T13:41:38+00:00" }, { "name": "sebastian/exporter", - "version": "8.0.2", + "version": "8.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "9cee180ebe62259e3ed48df2212d1fc8cfd971bb" + "reference": "c0d29a945f8cf82f300a05e69874508e307ca4c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/9cee180ebe62259e3ed48df2212d1fc8cfd971bb", - "reference": "9cee180ebe62259e3ed48df2212d1fc8cfd971bb", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c0d29a945f8cf82f300a05e69874508e307ca4c6", + "reference": "c0d29a945f8cf82f300a05e69874508e307ca4c6", "shasum": "" }, "require": { @@ -4937,12 +5068,12 @@ "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.1.10" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -4985,7 +5116,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/8.0.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.1.0" }, "funding": [ { @@ -5005,7 +5136,7 @@ "type": "tidelift" } ], - "time": "2026-04-15T12:38:05+00:00" + "time": "2026-05-21T11:50:56+00:00" }, { "name": "sebastian/git-state", @@ -5078,16 +5209,16 @@ }, { "name": "sebastian/global-state", - "version": "9.0.0", + "version": "9.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7" + "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e52e3dc22441e6218c710afe72c3042f8fc41ea7", - "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ba68ba79da690cf7eddefd3ce5b78b20b9ba9945", + "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945", "shasum": "" }, "require": { @@ -5097,7 +5228,7 @@ }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.1.13" }, "type": "library", "extra": { @@ -5128,7 +5259,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.0" + "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.1" }, "funding": [ { @@ -5148,28 +5279,28 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:45:13+00:00" + "time": "2026-06-01T15:11:33+00:00" }, { "name": "sebastian/lines-of-code", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471" + "reference": "d2cff273a90c79b0eb590baa682d4b5c318bdbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", - "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d2cff273a90c79b0eb590baa682d4b5c318bdbb7", + "reference": "d2cff273a90c79b0eb590baa682d4b5c318bdbb7", "shasum": "" }, "require": { - "nikic/php-parser": "^5.0", + "nikic/php-parser": "^5.7.0", "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.1.10" }, "type": "library", "extra": { @@ -5198,7 +5329,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.1" }, "funding": [ { @@ -5218,7 +5349,7 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:45:54+00:00" + "time": "2026-05-19T16:23:37+00:00" }, { "name": "sebastian/object-enumerator", @@ -5436,23 +5567,23 @@ }, { "name": "sebastian/type", - "version": "7.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "42412224607bd3931241bbd17f38e0f972f5a916" + "reference": "fee0309275847fefd7636167085e379c1dbf6990" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/42412224607bd3931241bbd17f38e0f972f5a916", - "reference": "42412224607bd3931241bbd17f38e0f972f5a916", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fee0309275847fefd7636167085e379c1dbf6990", + "reference": "fee0309275847fefd7636167085e379c1dbf6990", "shasum": "" }, "require": { "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^13.0" + "phpunit/phpunit": "^13.1.10" }, "type": "library", "extra": { @@ -5481,7 +5612,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/7.0.1" }, "funding": [ { @@ -5501,7 +5632,7 @@ "type": "tidelift" } ], - "time": "2026-02-06T04:52:09+00:00" + "time": "2026-05-20T06:49:11+00:00" }, { "name": "sebastian/version", @@ -5623,20 +5754,20 @@ }, { "name": "symfony/var-dumper", - "version": "v8.0.8", + "version": "v8.1.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1" + "reference": "c2c4df1d21477cc21c9f6dc1b14d07c3abc4963e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", - "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c2c4df1d21477cc21c9f6dc1b14d07c3abc4963e", + "reference": "c2c4df1d21477cc21c9f6dc1b14d07c3abc4963e", "shasum": "" }, "require": { - "php": ">=8.4", + "php": ">=8.4.1", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { @@ -5686,7 +5817,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v8.0.8" + "source": "https://github.com/symfony/var-dumper/tree/v8.1.0" }, "funding": [ { @@ -5706,7 +5837,7 @@ "type": "tidelift" } ], - "time": "2026-03-31T07:15:36+00:00" + "time": "2026-05-29T05:06:50+00:00" }, { "name": "theseer/tokenizer", diff --git a/frontend/bun.lock b/frontend/bun.lock index b6fb7307..f956bf9e 100644 --- a/frontend/bun.lock +++ b/frontend/bun.lock @@ -63,7 +63,7 @@ "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], - "@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + "@babel/generator": ["@babel/generator@8.0.0-rc.6", "", { "dependencies": { "@babel/parser": "^8.0.0-rc.6", "@babel/types": "^8.0.0-rc.6", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "@types/jsesc": "^2.5.0", "jsesc": "^3.0.2" } }, "sha512-6mIzgVK8DgEzvIapoQwhXTMnnkuE4STQmVv9H03i/tZ2ml8oev3TRvZJgTenK2Bsq0YWNtzOrFdTyNzCMFtjJQ=="], "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], @@ -87,7 +87,7 @@ "@babel/helper-skip-transparent-expression-wrappers": ["@babel/helper-skip-transparent-expression-wrappers@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg=="], - "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "@babel/helper-string-parser": ["@babel/helper-string-parser@8.0.0-rc.6", "", {}, "sha512-BCkFy+zN6kXQed3YOT7aJl93NfDSzQc3pBfsvTVPs9gU9X3V0aefEF5kwBT0E+mDWH9QgKaZstYUQN9VdQZT4g=="], "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], @@ -95,7 +95,7 @@ "@babel/helpers": ["@babel/helpers@7.28.6", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw=="], - "@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + "@babel/parser": ["@babel/parser@7.29.7", "", { "dependencies": { "@babel/types": "^7.29.7" }, "bin": "./bin/babel-parser.js" }, "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg=="], "@babel/plugin-syntax-jsx": ["@babel/plugin-syntax-jsx@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w=="], @@ -107,9 +107,9 @@ "@babel/traverse": ["@babel/traverse@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/types": "^7.29.0", "debug": "^4.3.1" } }, "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA=="], - "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@babel/types": ["@babel/types@8.0.0-rc.6", "", { "dependencies": { "@babel/helper-string-parser": "^8.0.0-rc.6", "@babel/helper-validator-identifier": "^8.0.0-rc.6" } }, "sha512-p7/ABylAYlexb31wtRdIfH9L9A0Z2T/9H6zAqzqndkY2PLkvNNc580wGhp/gGKN4Sp9sQvSkhc6Oga8/O+wTyw=="], - "@bomb.sh/tab": ["@bomb.sh/tab@0.0.14", "", { "peerDependencies": { "cac": "^6.7.14", "citty": "^0.1.6 || ^0.2.0", "commander": "^13.1.0" }, "optionalPeers": ["cac", "citty", "commander"], "bin": { "tab": "dist/bin/cli.mjs" } }, "sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w=="], + "@bomb.sh/tab": ["@bomb.sh/tab@0.0.15", "", { "peerDependencies": { "cac": "^6.7.14", "citty": "^0.1.6 || ^0.2.0", "commander": "^13.1.0" }, "optionalPeers": ["cac", "citty", "commander"], "bin": { "tab": "dist/bin/cli.mjs" } }, "sha512-Y90ub44TAvbdO9P8mcD/XPyQjFhiR5xmd4Fk7JErmWmEWEUimNnjWiBrVZ16Tj3GA1rLZ+uvCN2V/pzLawv31g=="], "@capsizecss/unpack": ["@capsizecss/unpack@4.0.0", "", { "dependencies": { "fontkitten": "^1.0.0" } }, "sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA=="], @@ -119,15 +119,17 @@ "@cloudflare/kv-asset-handler": ["@cloudflare/kv-asset-handler@0.4.2", "", {}, "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ=="], - "@dxup/nuxt": ["@dxup/nuxt@0.4.0", "", { "dependencies": { "@dxup/unimport": "^0.1.2", "@nuxt/kit": "^4.2.2", "chokidar": "^5.0.0", "pathe": "^2.0.3", "tinyglobby": "^0.2.15" }, "peerDependencies": { "typescript": "*" } }, "sha512-28LDotpr9G2knUse3cQYsOo6NJq5yhABv4ByRVRYJUmzf9Q31DI7rpRek4POlKy1aAcYyKgu5J2616pyqLohYg=="], + "@colordx/core": ["@colordx/core@5.4.3", "", {}, "sha512-kIxYSfA5T8HXjav55UaaH/o/cKivF6jCCGIb8eqtcsfI46wsvlSiT8jMDyrl779qLec3c2c2oHBZo4oAhvbjrQ=="], + + "@dxup/nuxt": ["@dxup/nuxt@0.4.1", "", { "dependencies": { "@dxup/unimport": "^0.1.2", "@nuxt/kit": "^4.4.2", "chokidar": "^5.0.0", "pathe": "^2.0.3", "tinyglobby": "^0.2.16" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-gtYffW6OfWNvoLW+XD3Mx/K8uUq08PMGLYJoDxc92EzZAWqR0FhcR5iaLm5r/OxyGTKz+P5f5Y7Aoir9+SjYaw=="], "@dxup/unimport": ["@dxup/unimport@0.1.2", "", {}, "sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ=="], - "@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], "@es-joy/jsdoccomment": ["@es-joy/jsdoccomment@0.84.0", "", { "dependencies": { "@types/estree": "^1.0.8", "@typescript-eslint/types": "^8.54.0", "comment-parser": "1.4.5", "esquery": "^1.7.0", "jsdoc-type-pratt-parser": "~7.1.1" } }, "sha512-0xew1CxOam0gV5OMjh2KjFQZsKL2bByX1+q4j3E73MpYIdyUxcZb/xQct9ccUb+ve5KGUYbCUxyPnYB7RbuP+w=="], @@ -193,7 +195,7 @@ "@eslint/config-array": ["@eslint/config-array@0.23.5", "", { "dependencies": { "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA=="], - "@eslint/config-helpers": ["@eslint/config-helpers@0.5.5", "", { "dependencies": { "@eslint/core": "^1.2.1" } }, "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w=="], + "@eslint/config-helpers": ["@eslint/config-helpers@0.6.0", "", { "dependencies": { "@eslint/core": "^1.2.1" } }, "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA=="], "@eslint/config-inspector": ["@eslint/config-inspector@1.4.2", "", { "dependencies": { "ansis": "^4.2.0", "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "esbuild": "^0.27.0", "h3": "^1.15.4", "tinyglobby": "^0.2.15", "ws": "^8.18.3" }, "peerDependencies": { "eslint": "^8.50.0 || ^9.0.0" }, "bin": { "eslint-config-inspector": "bin.mjs", "config-inspector": "bin.mjs" } }, "sha512-Ay8QcvV/Tq6YDeoltwZDQsQTrcS5flPkOp4ylk1WdV7L2UGotINwjatjbAIEqBTmP3G0g3Ah8dnuHC8DsnKPYQ=="], @@ -203,7 +205,7 @@ "@eslint/object-schema": ["@eslint/object-schema@3.0.5", "", {}, "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw=="], - "@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.1", "", { "dependencies": { "@eslint/core": "^1.2.1", "levn": "^0.4.1" } }, "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ=="], + "@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.2", "", { "dependencies": { "@eslint/core": "^1.2.1", "levn": "^0.4.1" } }, "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A=="], "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="], @@ -221,15 +223,15 @@ "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], - "@iconify-json/lucide": ["@iconify-json/lucide@1.2.104", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-Vh4VPA/UNFhSPzEdDnSuOPA1xO6b/kI1w4SLBEiKnsFYPWimq2tVDynMgKnwddz6iZpuZfZU4PXR6kn0hJayKw=="], + "@iconify-json/lucide": ["@iconify-json/lucide@1.2.111", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-S6oXom2YOKuXFxWofhHa2oq++Z3WeZ78dRFDA7aEEJqyNCJlQd1UGAfN8u2gD2NzvYotmm+j5kH678viWfZbGQ=="], - "@iconify/collections": ["@iconify/collections@1.0.666", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-dAwFrwbb0exAEJeM9sbLhCTcTcFxUpzvH2fm0dLKCJ10QMna0MSWKEk3Z0QM75QT2d13m9zytjcMSZxUEQt9iw=="], + "@iconify/collections": ["@iconify/collections@1.0.691", "", { "dependencies": { "@iconify/types": "*" } }, "sha512-n6dqyILpgspOZ0vCgfAKlh2vKaCNxKHMCZlQnZZoi5cygpPlNBHbxlJ4MKTzVRMXAa7aTKV2M8ZiEjIX3B++rw=="], "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], - "@iconify/utils": ["@iconify/utils@3.1.0", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "mlly": "^1.8.0" } }, "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw=="], + "@iconify/utils": ["@iconify/utils@3.1.3", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-LPKOXPn/zV+zis1oOfGWogaXVpqUybF3ZS6SCZIsz8vg0ivVp9+fVqyYB7xq0aiST/VhUQYGO1qo6uoYSiEJqw=="], - "@iconify/vue": ["@iconify/vue@5.0.0", "", { "dependencies": { "@iconify/types": "^2.0.0" }, "peerDependencies": { "vue": ">=3" } }, "sha512-C+KuEWIF5nSBrobFJhT//JS87OZ++QDORB6f2q2Wm6fl2mueSTpFBeBsveK0KW9hWiZ4mNiPjsh6Zs4jjdROSg=="], + "@iconify/vue": ["@iconify/vue@5.0.1", "", { "dependencies": { "@iconify/types": "^2.0.0" }, "peerDependencies": { "vue": ">=3.0.0" } }, "sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw=="], "@internationalized/date": ["@internationalized/date@3.12.1", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ=="], @@ -261,7 +263,7 @@ "@microsoft/fetch-event-source": ["@microsoft/fetch-event-source@2.0.1", "", {}, "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], "@noble/hashes": ["@noble/hashes@2.2.0", "", {}, "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="], @@ -271,7 +273,7 @@ "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - "@nuxt/cli": ["@nuxt/cli@3.34.0", "", { "dependencies": { "@bomb.sh/tab": "^0.0.14", "@clack/prompts": "^1.1.0", "c12": "^3.3.3", "citty": "^0.2.1", "confbox": "^0.2.4", "consola": "^3.4.2", "debug": "^4.4.3", "defu": "^6.1.4", "exsolve": "^1.0.8", "fuse.js": "^7.1.0", "fzf": "^0.5.2", "giget": "^3.1.2", "jiti": "^2.6.1", "listhen": "^1.9.0", "nypm": "^0.6.5", "ofetch": "^1.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "scule": "^1.3.0", "semver": "^7.7.4", "srvx": "^0.11.9", "std-env": "^3.10.0", "tinyclip": "^0.1.12", "tinyexec": "^1.0.2", "ufo": "^1.6.3", "youch": "^4.1.0" }, "peerDependencies": { "@nuxt/schema": "^4.3.1" }, "optionalPeers": ["@nuxt/schema"], "bin": { "nuxi": "bin/nuxi.mjs", "nuxi-ng": "bin/nuxi.mjs", "nuxt": "bin/nuxi.mjs", "nuxt-cli": "bin/nuxi.mjs" } }, "sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw=="], + "@nuxt/cli": ["@nuxt/cli@3.35.2", "", { "dependencies": { "@bomb.sh/tab": "^0.0.15", "@clack/prompts": "^1.3.0", "c12": "^3.3.4", "citty": "^0.2.2", "confbox": "^0.2.4", "consola": "^3.4.2", "debug": "^4.4.3", "defu": "^6.1.7", "exsolve": "^1.0.8", "fuse.js": "^7.3.0", "fzf": "^0.5.2", "giget": "^3.2.0", "jiti": "^2.7.0", "listhen": "^1.10.0", "nypm": "^0.6.6", "ofetch": "^1.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.1", "scule": "^1.3.0", "semver": "^7.8.0", "srvx": "^0.11.15", "std-env": "^4.1.0", "tinyclip": "^0.1.12", "tinyexec": "^1.1.2", "ufo": "^1.6.4", "youch": "^4.1.1" }, "peerDependencies": { "@nuxt/schema": "^4.4.5" }, "optionalPeers": ["@nuxt/schema"], "bin": { "nuxi": "bin/nuxi.mjs", "nuxi-ng": "bin/nuxi.mjs", "nuxt": "bin/nuxi.mjs", "nuxt-cli": "bin/nuxi.mjs" } }, "sha512-sCxNnFuYamqippdj+Cj4Nue55yaUvasaneyf2mnowK5/F1TKln/WVqTH18McxQ4baLlIlVapIFovKjJx1L8XMQ=="], "@nuxt/devalue": ["@nuxt/devalue@2.0.2", "", {}, "sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA=="], @@ -289,143 +291,143 @@ "@nuxt/fonts": ["@nuxt/fonts@0.14.0", "", { "dependencies": { "@nuxt/devtools-kit": "^3.2.1", "@nuxt/kit": "^4.2.2", "consola": "^3.4.2", "defu": "^6.1.4", "fontless": "^0.2.1", "h3": "^1.15.5", "magic-regexp": "^0.10.0", "ofetch": "^1.5.1", "pathe": "^2.0.3", "sirv": "^3.0.2", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "unifont": "^0.7.4", "unplugin": "^3.0.0", "unstorage": "^1.17.4" } }, "sha512-4uXQl9fa5F4ibdgU8zomoOcyMdnwgdem+Pi8JEqeDYI5yPR32Kam6HnuRr47dTb97CstaepAvXPWQUUHMtjsFQ=="], - "@nuxt/icon": ["@nuxt/icon@2.2.1", "", { "dependencies": { "@iconify/collections": "^1.0.641", "@iconify/types": "^2.0.0", "@iconify/utils": "^3.1.0", "@iconify/vue": "^5.0.0", "@nuxt/devtools-kit": "^3.1.1", "@nuxt/kit": "^4.2.2", "consola": "^3.4.2", "local-pkg": "^1.1.2", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^3.10.0", "tinyglobby": "^0.2.15" } }, "sha512-GI840yYGuvHI0BGDQ63d6rAxGzG96jQcWrnaWIQKlyQo/7sx9PjXkSHckXUXyX1MCr9zY6U25Td6OatfY6Hklw=="], + "@nuxt/icon": ["@nuxt/icon@2.2.2", "", { "dependencies": { "@iconify/collections": "^1.0.679", "@iconify/types": "^2.0.0", "@iconify/utils": "^3.1.1", "@iconify/vue": "^5.0.0", "@nuxt/devtools-kit": "^3.2.4", "@nuxt/kit": "^4.4.4", "consola": "^3.4.2", "local-pkg": "^1.1.2", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "picomatch": "^4.0.4", "std-env": "^4.1.0", "tinyglobby": "^0.2.16" } }, "sha512-K9wINW21M9x5GcKF5JEXzPKAT/Kfxl/vdnEyppw54hh5qoLcdi5HmsYoTfDP9gbJ6Z1T6IdH5JxBWk72HMe1Zg=="], "@nuxt/kit": ["@nuxt/kit@4.4.2", "", { "dependencies": { "c12": "^3.3.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "mlly": "^1.8.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^3.0.0", "scule": "^1.3.0", "semver": "^7.7.4", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog=="], - "@nuxt/nitro-server": ["@nuxt/nitro-server@4.4.2", "", { "dependencies": { "@babel/plugin-syntax-typescript": "^7.28.6", "@nuxt/devalue": "^2.0.2", "@nuxt/kit": "4.4.2", "@unhead/vue": "^2.1.12", "@vue/shared": "^3.5.30", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "devalue": "^5.6.3", "errx": "^0.1.0", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "h3": "^1.15.6", "impound": "^1.1.5", "klona": "^2.0.6", "mocked-exports": "^0.1.1", "nitropack": "^2.13.1", "nypm": "^0.6.5", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rou3": "^0.8.1", "std-env": "^4.0.0", "ufo": "^1.6.3", "unctx": "^2.5.0", "unstorage": "^1.17.4", "vue": "^3.5.30", "vue-bundle-renderer": "^2.2.0", "vue-devtools-stub": "^0.1.0" }, "peerDependencies": { "@babel/plugin-proposal-decorators": "^7.25.0", "@rollup/plugin-babel": "^6.0.0 || ^7.0.0", "nuxt": "^4.4.2" }, "optionalPeers": ["@babel/plugin-proposal-decorators", "@rollup/plugin-babel"] }, "sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q=="], + "@nuxt/nitro-server": ["@nuxt/nitro-server@4.4.6", "", { "dependencies": { "@nuxt/devalue": "^2.0.2", "@nuxt/kit": "4.4.6", "@unhead/vue": "^2.1.15", "@vue/shared": "^3.5.34", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "devalue": "^5.8.1", "errx": "^0.1.0", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "h3": "^1.15.11", "impound": "^1.1.5", "klona": "^2.0.6", "mocked-exports": "^0.1.1", "nitropack": "^2.13.4", "nypm": "^0.6.6", "ohash": "^2.0.11", "pathe": "^2.0.3", "rou3": "^0.8.1", "std-env": "^4.1.0", "ufo": "^1.6.4", "unctx": "^2.5.0", "unstorage": "^1.17.5", "vue": "^3.5.34", "vue-bundle-renderer": "^2.2.0", "vue-devtools-stub": "^0.1.0" }, "peerDependencies": { "@babel/plugin-proposal-decorators": "^7.25.0", "@babel/plugin-syntax-typescript": "^7.25.0", "@rollup/plugin-babel": "^6.0.0 || ^7.0.0", "nuxt": "^4.4.6" }, "optionalPeers": ["@babel/plugin-proposal-decorators", "@babel/plugin-syntax-typescript", "@rollup/plugin-babel"] }, "sha512-3OgAWW8cK+0BgEWiGYv9wP/vfQcIWTs+YNmZZAf1f89py8KnHgHp2aFQjZ/zTXWKTHlkGPl9NntQQkMoF3j1fA=="], - "@nuxt/schema": ["@nuxt/schema@4.4.2", "", { "dependencies": { "@vue/shared": "^3.5.30", "defu": "^6.1.4", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "std-env": "^4.0.0" } }, "sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w=="], + "@nuxt/schema": ["@nuxt/schema@4.4.6", "", { "dependencies": { "@vue/shared": "^3.5.34", "defu": "^6.1.7", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "std-env": "^4.1.0" } }, "sha512-7FDMuD+skbFMgfF2ORYKEAKEuEFbu2oS60dln5uVtn94c8DHWCseJSrT3FUHzVUlVwyhztPU6stzB44dEoWAzw=="], - "@nuxt/telemetry": ["@nuxt/telemetry@2.7.0", "", { "dependencies": { "citty": "^0.2.0", "consola": "^3.4.2", "ofetch": "^2.0.0-alpha.3", "rc9": "^3.0.0", "std-env": "^3.10.0" }, "peerDependencies": { "@nuxt/kit": ">=3.0.0" }, "bin": { "nuxt-telemetry": "bin/nuxt-telemetry.mjs" } }, "sha512-mrKC3NjAlBOooLLVTYcIUie1meipoYq5vkoESoVTEWTB34T3a0QJzOfOPch+HYlUR+5Lqy1zLMv6epHFgYAKLA=="], + "@nuxt/telemetry": ["@nuxt/telemetry@2.8.0", "", { "dependencies": { "citty": "^0.2.1", "consola": "^3.4.2", "ofetch": "^2.0.0-alpha.3", "rc9": "^3.0.0", "std-env": "^4.0.0" }, "peerDependencies": { "@nuxt/kit": ">=3.0.0" }, "bin": { "nuxt-telemetry": "bin/nuxt-telemetry.mjs" } }, "sha512-zAwXY24KYvpLTmiV+osagd2EHkfs5IF+7oDZYTQoit5r0kPlwaCNlzHp5I/wUAWT4LBw6lG8gZ6bWidAdv/erQ=="], - "@nuxt/ui": ["@nuxt/ui@4.7.1", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@iconify/vue": "^5.0.0", "@internationalized/date": "^3.12.1", "@internationalized/number": "^3.6.6", "@nuxt/fonts": "^0.14.0", "@nuxt/icon": "^2.2.1", "@nuxt/kit": "^4.4.2", "@nuxt/schema": "^4.4.2", "@nuxtjs/color-mode": "^3.5.2", "@standard-schema/spec": "^1.1.0", "@tailwindcss/postcss": "^4.2.4", "@tailwindcss/vite": "^4.2.4", "@tanstack/vue-table": "^8.21.3", "@tanstack/vue-virtual": "^3.13.24", "@tiptap/core": "^3.22.4", "@tiptap/extension-bubble-menu": "^3.22.4", "@tiptap/extension-code": "^3.22.4", "@tiptap/extension-collaboration": "^3.22.4", "@tiptap/extension-drag-handle": "^3.22.4", "@tiptap/extension-drag-handle-vue-3": "^3.22.4", "@tiptap/extension-floating-menu": "^3.22.4", "@tiptap/extension-horizontal-rule": "^3.22.4", "@tiptap/extension-image": "^3.22.4", "@tiptap/extension-mention": "^3.22.4", "@tiptap/extension-node-range": "^3.22.4", "@tiptap/extension-placeholder": "^3.22.4", "@tiptap/markdown": "^3.22.4", "@tiptap/pm": "^3.22.4", "@tiptap/starter-kit": "^3.22.4", "@tiptap/suggestion": "^3.22.4", "@tiptap/vue-3": "^3.22.4", "@unhead/vue": "^2.1.13", "@vueuse/core": "^14.2.1", "@vueuse/integrations": "^14.2.1", "@vueuse/shared": "^14.2.1", "colortranslator": "^5.0.0", "consola": "^3.4.2", "defu": "^6.1.7", "embla-carousel-auto-height": "^8.6.0", "embla-carousel-auto-scroll": "^8.6.0", "embla-carousel-autoplay": "^8.6.0", "embla-carousel-class-names": "^8.6.0", "embla-carousel-fade": "^8.6.0", "embla-carousel-vue": "^8.6.0", "embla-carousel-wheel-gestures": "^8.1.0", "fuse.js": "^7.3.0", "hookable": "^6.1.1", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "mlly": "^1.8.2", "motion-v": "^2.2.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "reka-ui": "2.9.6", "scule": "^1.3.0", "tailwind-merge": "^3.5.0", "tailwind-variants": "^3.2.2", "tailwindcss": "^4.2.4", "tinyglobby": "^0.2.16", "ufo": "^1.6.3", "unplugin": "^3.0.0", "unplugin-auto-import": "^21.0.0", "unplugin-vue-components": "^32.0.0", "vaul-vue": "0.4.1", "vue-component-type-helpers": "^3.2.7" }, "peerDependencies": { "@inertiajs/vue3": "^2.0.7 || ^3.0.0", "@nuxt/content": "^3.0.0", "joi": "^18.0.0", "superstruct": "^2.0.0", "typescript": "^5.6.3 || ^6.0.0", "valibot": "^1.0.0", "vue-router": "^4.5.0 || ^5.0.0", "yup": "^1.7.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["@inertiajs/vue3", "@nuxt/content", "joi", "superstruct", "valibot", "vue-router", "yup", "zod"], "bin": { "nuxt-ui": "cli/index.mjs" } }, "sha512-s3Ix89RkJTeNDlLg7EflckkFxQgzm2W9bt4CBsudi7wNdmhbb3nzYG6rcns2R2Wos0gZlYkSfDKaX1o3zMC+Aw=="], + "@nuxt/ui": ["@nuxt/ui@4.8.1", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@iconify/vue": "^5.0.1", "@internationalized/date": "^3.12.1", "@internationalized/number": "^3.6.6", "@nuxt/fonts": "^0.14.0", "@nuxt/icon": "^2.2.2", "@nuxt/kit": "^4.4.6", "@nuxt/schema": "^4.4.6", "@nuxtjs/color-mode": "^3.5.2", "@standard-schema/spec": "^1.1.0", "@tailwindcss/postcss": "^4.3.0", "@tailwindcss/vite": "^4.3.0", "@tanstack/vue-table": "^8.21.3", "@tanstack/vue-virtual": "^3.13.25", "@tiptap/core": "^3.23.6", "@tiptap/extension-bubble-menu": "^3.23.6", "@tiptap/extension-code": "^3.23.6", "@tiptap/extension-collaboration": "^3.23.6", "@tiptap/extension-drag-handle": "^3.23.6", "@tiptap/extension-drag-handle-vue-3": "^3.23.6", "@tiptap/extension-floating-menu": "^3.23.6", "@tiptap/extension-horizontal-rule": "^3.23.6", "@tiptap/extension-image": "^3.23.6", "@tiptap/extension-mention": "^3.23.6", "@tiptap/extension-node-range": "^3.23.6", "@tiptap/extension-placeholder": "^3.23.6", "@tiptap/markdown": "^3.23.6", "@tiptap/pm": "^3.23.6", "@tiptap/starter-kit": "^3.23.6", "@tiptap/suggestion": "^3.23.6", "@tiptap/vue-3": "^3.23.6", "@unhead/vue": "^2.1.15", "@vueuse/core": "^14.3.0", "@vueuse/integrations": "^14.3.0", "@vueuse/shared": "^14.3.0", "colortranslator": "^5.0.0", "consola": "^3.4.2", "defu": "^6.1.7", "embla-carousel-auto-height": "^8.6.0", "embla-carousel-auto-scroll": "^8.6.0", "embla-carousel-autoplay": "^8.6.0", "embla-carousel-class-names": "^8.6.0", "embla-carousel-fade": "^8.6.0", "embla-carousel-vue": "^8.6.0", "embla-carousel-wheel-gestures": "^8.1.0", "fuse.js": "^7.3.0", "hookable": "^6.1.1", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "mlly": "^1.8.2", "motion-v": "^2.2.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "reka-ui": "2.9.8", "scule": "^1.3.0", "tailwind-merge": "^3.6.0", "tailwind-variants": "^3.2.2", "tailwindcss": "^4.3.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unplugin": "^3.0.0", "unplugin-auto-import": "^21.0.0", "unplugin-vue-components": "^32.1.0", "vaul-vue": "0.4.1", "vue-component-type-helpers": "^3.3.0" }, "peerDependencies": { "@inertiajs/vue3": "^2.0.7 || ^3.0.0", "@nuxt/content": "^3.0.0", "joi": "^18.0.0", "superstruct": "^2.0.0", "typescript": "^5.6.3 || ^6.0.0", "valibot": "^1.0.0", "vue-router": "^4.5.0 || ^5.0.0", "yup": "^1.7.0", "zod": "^3.24.0 || ^4.0.0" }, "optionalPeers": ["@inertiajs/vue3", "@nuxt/content", "joi", "superstruct", "valibot", "vue-router", "yup", "zod"], "bin": { "nuxt-ui": "cli/index.mjs" } }, "sha512-mS5Lxmv7FiLn7C6ww4XAQUs3aUa5Nrb/ZzGFP1SAc0gMUjyG0Y71nJe+wxtMPf/afq6QOPSdhu+I2sLhOd4j4w=="], - "@nuxt/vite-builder": ["@nuxt/vite-builder@4.4.2", "", { "dependencies": { "@nuxt/kit": "4.4.2", "@rollup/plugin-replace": "^6.0.3", "@vitejs/plugin-vue": "^6.0.4", "@vitejs/plugin-vue-jsx": "^5.1.4", "autoprefixer": "^10.4.27", "consola": "^3.4.2", "cssnano": "^7.1.3", "defu": "^6.1.4", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "get-port-please": "^3.2.0", "jiti": "^2.6.1", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "mlly": "^1.8.1", "mocked-exports": "^0.1.1", "nypm": "^0.6.5", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "postcss": "^8.5.8", "seroval": "^1.5.1", "std-env": "^4.0.0", "ufo": "^1.6.3", "unenv": "^2.0.0-rc.24", "vite": "^7.3.1", "vite-node": "^5.3.0", "vite-plugin-checker": "^0.12.0", "vue-bundle-renderer": "^2.2.0" }, "peerDependencies": { "@babel/plugin-proposal-decorators": "^7.25.0", "@babel/plugin-syntax-jsx": "^7.25.0", "nuxt": "4.4.2", "rolldown": "^1.0.0-beta.38", "rollup-plugin-visualizer": "^6.0.0 || ^7.0.1", "vue": "^3.3.4" }, "optionalPeers": ["@babel/plugin-proposal-decorators", "@babel/plugin-syntax-jsx", "rolldown", "rollup-plugin-visualizer"] }, "sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw=="], + "@nuxt/vite-builder": ["@nuxt/vite-builder@4.4.6", "", { "dependencies": { "@nuxt/kit": "4.4.6", "@rollup/plugin-replace": "^6.0.3", "@vitejs/plugin-vue": "^6.0.7", "@vitejs/plugin-vue-jsx": "^5.1.5", "autoprefixer": "^10.5.0", "consola": "^3.4.2", "cssnano": "^8.0.1", "defu": "^6.1.7", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "get-port-please": "^3.2.0", "jiti": "^2.7.0", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "mlly": "^1.8.2", "mocked-exports": "^0.1.1", "nypm": "^0.6.6", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "postcss": "^8.5.14", "seroval": "^1.5.4", "std-env": "^4.1.0", "ufo": "^1.6.4", "unenv": "^2.0.0-rc.24", "vite": "^7.3.3", "vite-node": "^5.3.0", "vite-plugin-checker": "^0.13.0", "vue-bundle-renderer": "^2.2.0" }, "peerDependencies": { "@babel/plugin-proposal-decorators": "^7.25.0", "@babel/plugin-syntax-jsx": "^7.25.0", "nuxt": "4.4.6", "rolldown": "^1.0.0-beta.38", "rollup-plugin-visualizer": "^6.0.0 || ^7.0.1", "vue": "^3.3.4" }, "optionalPeers": ["@babel/plugin-proposal-decorators", "@babel/plugin-syntax-jsx", "rolldown", "rollup-plugin-visualizer"] }, "sha512-q/JDHLy/tBJodyqu75GBrFWcOkkj9alGH8Qh/Wpir/xD6/MAMvnQNOHewC3KH40jMHxdETSglEmFaAkEIHzmLQ=="], "@nuxtjs/color-mode": ["@nuxtjs/color-mode@3.5.2", "", { "dependencies": { "@nuxt/kit": "^3.13.2", "pathe": "^1.1.2", "pkg-types": "^1.2.1", "semver": "^7.6.3" } }, "sha512-cC6RfgZh3guHBMLLjrBB2Uti5eUoGM9KyauOaYS9ETmxNWBMTvpgjvSiSJp1OFljIXPIqVTJ3xtJpSNZiO3ZaA=="], - "@oxc-minify/binding-android-arm-eabi": ["@oxc-minify/binding-android-arm-eabi@0.117.0", "", { "os": "android", "cpu": "arm" }, "sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg=="], + "@oxc-minify/binding-android-arm-eabi": ["@oxc-minify/binding-android-arm-eabi@0.131.0", "", { "os": "android", "cpu": "arm" }, "sha512-yLa7y9jjJgUeUUMm6AtjmBIQzK1YU5sYcNJnVVtr6WtoWu5SpuNDZ8u6cl/dhn0g/oQgVlf+E+8WJfsExt8R+Q=="], - "@oxc-minify/binding-android-arm64": ["@oxc-minify/binding-android-arm64@0.117.0", "", { "os": "android", "cpu": "arm64" }, "sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw=="], + "@oxc-minify/binding-android-arm64": ["@oxc-minify/binding-android-arm64@0.131.0", "", { "os": "android", "cpu": "arm64" }, "sha512-ShZDYFEVd46qCc9L0D3ZTPLXe/DezTedEj7g6x1Bdlm1WwgQ1pQJgWkqpMGlQhUet5wq4WUpQB/P6afK470Ydg=="], - "@oxc-minify/binding-darwin-arm64": ["@oxc-minify/binding-darwin-arm64@0.117.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA=="], + "@oxc-minify/binding-darwin-arm64": ["@oxc-minify/binding-darwin-arm64@0.131.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-h+5iCSKxpK7SJdAHmY4I+0BBxR+pJQVNJvAIB3KcOVyz8/ybaO2r41URCwV1N3FnPYkIIiMokZ24YYMB6/GrRw=="], - "@oxc-minify/binding-darwin-x64": ["@oxc-minify/binding-darwin-x64@0.117.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A=="], + "@oxc-minify/binding-darwin-x64": ["@oxc-minify/binding-darwin-x64@0.131.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-EIP8KmjqfZeDdhrbG+0GDsiw1/Bi3415uCFokhOm6b8tGG0UdiemVHAz9IQE/sIJgwguXYtg5ydz9oFYVOlOfA=="], - "@oxc-minify/binding-freebsd-x64": ["@oxc-minify/binding-freebsd-x64@0.117.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA=="], + "@oxc-minify/binding-freebsd-x64": ["@oxc-minify/binding-freebsd-x64@0.131.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2/xcCZfVm24sLFHbI5Rg/t6Ec93pth0NvTgy/J8vXjIOy8Yf5kkO/K1KVtdZBHW+cyLPe7YLLybxMF/BeqM8Kg=="], - "@oxc-minify/binding-linux-arm-gnueabihf": ["@oxc-minify/binding-linux-arm-gnueabihf@0.117.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA=="], + "@oxc-minify/binding-linux-arm-gnueabihf": ["@oxc-minify/binding-linux-arm-gnueabihf@0.131.0", "", { "os": "linux", "cpu": "arm" }, "sha512-LDQ1Y+QfL5lN54ib1Je2paoh4EsQmmDRvB5Bd9AQIGCP16LI+8jZnB8cjTT3GD1acITDg1aiaBKk9JpBjBA4iw=="], - "@oxc-minify/binding-linux-arm-musleabihf": ["@oxc-minify/binding-linux-arm-musleabihf@0.117.0", "", { "os": "linux", "cpu": "arm" }, "sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg=="], + "@oxc-minify/binding-linux-arm-musleabihf": ["@oxc-minify/binding-linux-arm-musleabihf@0.131.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mz99O2sZoyHnMoksxlZ5Mc+USS/w/uIp1LWQAn42RHAvVdIyQsqPRmTD/pJtW/KnjgpgaB0yDCpI6Xa3ivJppQ=="], - "@oxc-minify/binding-linux-arm64-gnu": ["@oxc-minify/binding-linux-arm64-gnu@0.117.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg=="], + "@oxc-minify/binding-linux-arm64-gnu": ["@oxc-minify/binding-linux-arm64-gnu@0.131.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-QjS1N4FwCV67ZylGyfTWoqURzar48dN5WTq/JVrGsiShFKlT9SpuyRsoUGMGJhiKNiI39MsLIHBlBWvoRQG+ng=="], - "@oxc-minify/binding-linux-arm64-musl": ["@oxc-minify/binding-linux-arm64-musl@0.117.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw=="], + "@oxc-minify/binding-linux-arm64-musl": ["@oxc-minify/binding-linux-arm64-musl@0.131.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-HGzqTov5sAzXyaNfRkQEpl0fRs+PrMYjT8b5jZAw8foQ/qnW+VMWgAr80Q+2j79T5nhXfboSF5SUgB8mcisgHw=="], - "@oxc-minify/binding-linux-ppc64-gnu": ["@oxc-minify/binding-linux-ppc64-gnu@0.117.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ=="], + "@oxc-minify/binding-linux-ppc64-gnu": ["@oxc-minify/binding-linux-ppc64-gnu@0.131.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-zpUZ4pmbDBqaZmRYacxeLHUBxA3fs5K7hi1WSXRVMXC4OjWuVcLsNxeavenKF9i0YtP7Q5n2z12Rz7eEnNWoDA=="], - "@oxc-minify/binding-linux-riscv64-gnu": ["@oxc-minify/binding-linux-riscv64-gnu@0.117.0", "", { "os": "linux", "cpu": "none" }, "sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg=="], + "@oxc-minify/binding-linux-riscv64-gnu": ["@oxc-minify/binding-linux-riscv64-gnu@0.131.0", "", { "os": "linux", "cpu": "none" }, "sha512-CYrC4tpW1wolbw/Fox+T0hxW92s1aG/WLi+htkk02JMiCHOWqGQKxUnm37lLiODKR/OwTYht3LB4xNrsS0RtCg=="], - "@oxc-minify/binding-linux-riscv64-musl": ["@oxc-minify/binding-linux-riscv64-musl@0.117.0", "", { "os": "linux", "cpu": "none" }, "sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g=="], + "@oxc-minify/binding-linux-riscv64-musl": ["@oxc-minify/binding-linux-riscv64-musl@0.131.0", "", { "os": "linux", "cpu": "none" }, "sha512-ZQNur0zujUjNYgjFF4mcNaeEKWuerY9XkaALYtBsHqNetkj55w0ZwCKYfYKLH2JAdyNF2LuS0s7VGgjXP9EvWA=="], - "@oxc-minify/binding-linux-s390x-gnu": ["@oxc-minify/binding-linux-s390x-gnu@0.117.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q=="], + "@oxc-minify/binding-linux-s390x-gnu": ["@oxc-minify/binding-linux-s390x-gnu@0.131.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-tR8oiFSNpcS1mfGY1N3/Hy6TxP2wr5X9FFdn/y8GarN8ST/JMLY5SUiwPiU35NKiC69CDaAsLHXoIKUxK/r8Pw=="], - "@oxc-minify/binding-linux-x64-gnu": ["@oxc-minify/binding-linux-x64-gnu@0.117.0", "", { "os": "linux", "cpu": "x64" }, "sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA=="], + "@oxc-minify/binding-linux-x64-gnu": ["@oxc-minify/binding-linux-x64-gnu@0.131.0", "", { "os": "linux", "cpu": "x64" }, "sha512-KodzbW12zmT/C/w4bGv2aWN7Q5+KVJKbNoAv5hooYeSujj8xSPGWl8pnyj7dJ9nd8j0CVjubEvHQ86rtzV99OA=="], - "@oxc-minify/binding-linux-x64-musl": ["@oxc-minify/binding-linux-x64-musl@0.117.0", "", { "os": "linux", "cpu": "x64" }, "sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw=="], + "@oxc-minify/binding-linux-x64-musl": ["@oxc-minify/binding-linux-x64-musl@0.131.0", "", { "os": "linux", "cpu": "x64" }, "sha512-CNG3/hPE6MxdLikfLq5l0aZMvJ3W5AP1aoVjzQ1Itokv5sbfBcW0fp6Srn8mB86CyAqO9e7dbffZVOWBDVkhgw=="], - "@oxc-minify/binding-openharmony-arm64": ["@oxc-minify/binding-openharmony-arm64@0.117.0", "", { "os": "none", "cpu": "arm64" }, "sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q=="], + "@oxc-minify/binding-openharmony-arm64": ["@oxc-minify/binding-openharmony-arm64@0.131.0", "", { "os": "none", "cpu": "arm64" }, "sha512-UyfimTwMLitJ0+5i5fL9M9U4E+DcIQJpGZWbVxxD3Mp9f7CTyQBIHnS68VEGZe+KQL/Y3IIb3AJ7cZB+ICgTVQ=="], - "@oxc-minify/binding-wasm32-wasi": ["@oxc-minify/binding-wasm32-wasi@0.117.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g=="], + "@oxc-minify/binding-wasm32-wasi": ["@oxc-minify/binding-wasm32-wasi@0.131.0", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-fH7sy51iYnmGv2pEPsS9KEVExHDKI1/nfy/OqYnStW2E5di41CQ1qBjVIvxHOMHcPD8RmKEBCf0zng6d9/vGDg=="], - "@oxc-minify/binding-win32-arm64-msvc": ["@oxc-minify/binding-win32-arm64-msvc@0.117.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ=="], + "@oxc-minify/binding-win32-arm64-msvc": ["@oxc-minify/binding-win32-arm64-msvc@0.131.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-C05v+5eIdvF4YXQ4t+U0JQDl8IWoIabxsmh4inBSGOL0VziELmis3lb5X6JMj208RbQdKhZGJbUkmNWq2B5Kxw=="], - "@oxc-minify/binding-win32-ia32-msvc": ["@oxc-minify/binding-win32-ia32-msvc@0.117.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w=="], + "@oxc-minify/binding-win32-ia32-msvc": ["@oxc-minify/binding-win32-ia32-msvc@0.131.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-bZio0euDmT6Er00I6jng66ftGw5doP/UmCAr2XtBooZMdr7ofTJ4+Bpp+ufguVIeVk5i1vgMPsq7g6FTcxHevg=="], - "@oxc-minify/binding-win32-x64-msvc": ["@oxc-minify/binding-win32-x64-msvc@0.117.0", "", { "os": "win32", "cpu": "x64" }, "sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ=="], + "@oxc-minify/binding-win32-x64-msvc": ["@oxc-minify/binding-win32-x64-msvc@0.131.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Lih6D0rjXStl0eUjzlcCiqr60AI/LuE+Zy29beEeXrXqTjOf8t0mcDX/MN3TZBBncxwUNi6osAEsKj4FRnItmQ=="], - "@oxc-parser/binding-android-arm-eabi": ["@oxc-parser/binding-android-arm-eabi@0.117.0", "", { "os": "android", "cpu": "arm" }, "sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw=="], + "@oxc-parser/binding-android-arm-eabi": ["@oxc-parser/binding-android-arm-eabi@0.131.0", "", { "os": "android", "cpu": "arm" }, "sha512-t2xicr9pfzkSRYx5aPqZqlLaayIwJTqgQ81Jor31Xep2nGyL2Aq3d0K5wOfeR7VevaSdxaS9dzSQP9xDwn8fDg=="], - "@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.117.0", "", { "os": "android", "cpu": "arm64" }, "sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA=="], + "@oxc-parser/binding-android-arm64": ["@oxc-parser/binding-android-arm64@0.131.0", "", { "os": "android", "cpu": "arm64" }, "sha512-nlGIod6gw75x1aEDgLS+srj+JRGY0HHm9MI9YgzE/B64l6d6+H3MSP9NOgp0+HTg8tp4vV9rVfgQGgd+TfVZcA=="], - "@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.117.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg=="], + "@oxc-parser/binding-darwin-arm64": ["@oxc-parser/binding-darwin-arm64@0.131.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-jukuV6xe5RbQKFo7QD34NDCLDZp4PSOm8rmckhNdH/60ymG5zXbDzGBEyc+nTkuLQNama2aSGCt+CPfpjNTqyw=="], - "@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.117.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw=="], + "@oxc-parser/binding-darwin-x64": ["@oxc-parser/binding-darwin-x64@0.131.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-g3JOo4khe9rslHm5WYaVDWb0HS/M1MLR3I9S8560MkKIcC96VQY00QjOlsuRyfSj/JDXj8i9T7ryPO2RidiXVg=="], - "@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.117.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw=="], + "@oxc-parser/binding-freebsd-x64": ["@oxc-parser/binding-freebsd-x64@0.131.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1hziITDTxjMePnX+dR9ocVT+EuZkQ8wm4FPAbmbEiKG+Phbo73J1ZnPAA6Y/aGsWF3McOFnQuZIktAFwalkfJQ=="], - "@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.117.0", "", { "os": "linux", "cpu": "arm" }, "sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ=="], + "@oxc-parser/binding-linux-arm-gnueabihf": ["@oxc-parser/binding-linux-arm-gnueabihf@0.131.0", "", { "os": "linux", "cpu": "arm" }, "sha512-9uRxfXwyKG9+MwmGQBo2ncPNwZH5HTmCETFM2WiuDBNDCW4NC5ttSQkwCAMrTAWgwMzVBH1CP8pM0v7nebCWXQ=="], - "@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.117.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw=="], + "@oxc-parser/binding-linux-arm-musleabihf": ["@oxc-parser/binding-linux-arm-musleabihf@0.131.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mgbLvzRShXOLBdWGInf08Af4q+pfj1xD8hSgLClDZ9of/BXkB6+LIhTH7fihiDUipqB3yoSkKBWaZ3Ejlf5Yag=="], - "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.117.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg=="], + "@oxc-parser/binding-linux-arm64-gnu": ["@oxc-parser/binding-linux-arm64-gnu@0.131.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-OPT8++4aN6j2GJ8+3IZHS/byXoZP4aSBn+FoG6rgBJ2fKwPKXWF3MqrFMNW7NKHM28FLY579xYLxJSfgobEqPA=="], - "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.117.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg=="], + "@oxc-parser/binding-linux-arm64-musl": ["@oxc-parser/binding-linux-arm64-musl@0.131.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-vtPiwmfVTAXzaxDKsOXG+LwgRAA7WEnaeHzhS5z0GE89gAK18KSXnly7Z6saXXq6L3dVMyK44uoTI03zKxrpmw=="], - "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.117.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA=="], + "@oxc-parser/binding-linux-ppc64-gnu": ["@oxc-parser/binding-linux-ppc64-gnu@0.131.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-8AW8L7w5cGHSdZPcyZX2yR0+GUODsT15rbRjfdD54rv6DMbtuEB19ysLOpKJlRGfH6UNYNpCHaU1uJWgTWf1/w=="], - "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.117.0", "", { "os": "linux", "cpu": "none" }, "sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA=="], + "@oxc-parser/binding-linux-riscv64-gnu": ["@oxc-parser/binding-linux-riscv64-gnu@0.131.0", "", { "os": "linux", "cpu": "none" }, "sha512-vvpjkjEOUsPcsYf8evE4MO3aGx9+3wodXEBOicGNnOwTuAik8eBONNkgSdhkGsAblQmfVHJyanRnpxglddTXIA=="], - "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.117.0", "", { "os": "linux", "cpu": "none" }, "sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA=="], + "@oxc-parser/binding-linux-riscv64-musl": ["@oxc-parser/binding-linux-riscv64-musl@0.131.0", "", { "os": "linux", "cpu": "none" }, "sha512-AqmcNC3fClXX+fxQ6VGEN1667xVFiRBkY0CZmDMSiaeFUsv1+UkBPYYi48IUKcA9/ivvoKNRzQl2I4//kT9F/w=="], - "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.117.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw=="], + "@oxc-parser/binding-linux-s390x-gnu": ["@oxc-parser/binding-linux-s390x-gnu@0.131.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-7d3jOMKy7RSQCcDLIci+ySll2FgsOMl/GiRux4q2JNv0zg4EdhFISa9idvrdN/HEUIQQJNg6dmveUeJl2YErGA=="], - "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.117.0", "", { "os": "linux", "cpu": "x64" }, "sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A=="], + "@oxc-parser/binding-linux-x64-gnu": ["@oxc-parser/binding-linux-x64-gnu@0.131.0", "", { "os": "linux", "cpu": "x64" }, "sha512-JHK/h95qVqVQ+ITER837kcTdwBDFpFaNnOTYGCP0zdUSX/mLKC7tXOoyrTb6vG7iRPwGlcgBil3v2IjYw1FqJA=="], - "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.117.0", "", { "os": "linux", "cpu": "x64" }, "sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg=="], + "@oxc-parser/binding-linux-x64-musl": ["@oxc-parser/binding-linux-x64-musl@0.131.0", "", { "os": "linux", "cpu": "x64" }, "sha512-b2BO82O8azXAyf7EUgOPKu145nWypbNyk07HbU09fkzhm9lEA5oPvaN/M8Nlo7tOErVTa2WOgS4QbOnxAPXdDQ=="], - "@oxc-parser/binding-openharmony-arm64": ["@oxc-parser/binding-openharmony-arm64@0.117.0", "", { "os": "none", "cpu": "arm64" }, "sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ=="], + "@oxc-parser/binding-openharmony-arm64": ["@oxc-parser/binding-openharmony-arm64@0.131.0", "", { "os": "none", "cpu": "arm64" }, "sha512-GHO9glZaX7LkX/OGfluEPf1yjg+ehiFbUdowbX6uNWOQhmwKWU4m4+nZ9FJkrHNKuxyI1KKertMdGjVKCApKWA=="], - "@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.117.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g=="], + "@oxc-parser/binding-wasm32-wasi": ["@oxc-parser/binding-wasm32-wasi@0.131.0", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-3SkikPaEFoih1N83qLVEDLRLeY4nYsf6JT9SnWiMCQ5lGQdKup6bEuKCqkRiG9dD1IIaFeYz9RjlciPmYoFIWA=="], - "@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.117.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w=="], + "@oxc-parser/binding-win32-arm64-msvc": ["@oxc-parser/binding-win32-arm64-msvc@0.131.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Os5bEhryeA2jkH+ZrnZyAC1EP5gs+X4YB1Fjqml7UPD5kU7ecsK1MPEVMfCrdt/GDNpDbavYXiOXOdyJ5b3OPw=="], - "@oxc-parser/binding-win32-ia32-msvc": ["@oxc-parser/binding-win32-ia32-msvc@0.117.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ=="], + "@oxc-parser/binding-win32-ia32-msvc": ["@oxc-parser/binding-win32-ia32-msvc@0.131.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-m+jNz9EuF0NXoiptc6B9h5yompZQVW/a5MJeOu5zojfH5yWk82tvF2ccrHkfhgtrS9h9DD5l1Qv8dWlfY7Nz8g=="], - "@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.117.0", "", { "os": "win32", "cpu": "x64" }, "sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw=="], + "@oxc-parser/binding-win32-x64-msvc": ["@oxc-parser/binding-win32-x64-msvc@0.131.0", "", { "os": "win32", "cpu": "x64" }, "sha512-o14Hk8dAyiEUMFEWEgmAwFZvBt1RzAYLM3xeQ+5315JXgVYhoemivgYcbYVRbsFkS71ShMGlAFE0kPnr460rww=="], - "@oxc-project/types": ["@oxc-project/types@0.117.0", "", {}, "sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w=="], + "@oxc-project/types": ["@oxc-project/types@0.131.0", "", {}, "sha512-PgnWDfV0h+b16XNKbXU7Daib/BFSt/J2mEzfYIBu6JB/wNdlU+kVYXCkGA1A9fWkTbOgbjh4e6NhPeQOYvFhEA=="], - "@oxc-transform/binding-android-arm-eabi": ["@oxc-transform/binding-android-arm-eabi@0.117.0", "", { "os": "android", "cpu": "arm" }, "sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw=="], + "@oxc-transform/binding-android-arm-eabi": ["@oxc-transform/binding-android-arm-eabi@0.131.0", "", { "os": "android", "cpu": "arm" }, "sha512-rcNvLlbNnxTfYVlZVF+Rev2AyCpJDpwVPphG4HOJxauaT1+w5VxL+kRdxCReof4A8ZsszbvIYlvkqvaJKO4Mog=="], - "@oxc-transform/binding-android-arm64": ["@oxc-transform/binding-android-arm64@0.117.0", "", { "os": "android", "cpu": "arm64" }, "sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg=="], + "@oxc-transform/binding-android-arm64": ["@oxc-transform/binding-android-arm64@0.131.0", "", { "os": "android", "cpu": "arm64" }, "sha512-/y+EH6QYQB2ZDQNvMlzItc36mw16GZwCDlvGYbQ4GCTE+7ZtSmx9E/rJOYzYyzMghz0c5dhJquRKScXdOZHpnQ=="], - "@oxc-transform/binding-darwin-arm64": ["@oxc-transform/binding-darwin-arm64@0.117.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA=="], + "@oxc-transform/binding-darwin-arm64": ["@oxc-transform/binding-darwin-arm64@0.131.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-x1Va8zFomdYghAI0Zkt7kUmG50S65XH1u0EbIDr80M9idfXrQgd08ZGl3ejwRGLBrkbA8tkkmeOu1rWVFf7BXg=="], - "@oxc-transform/binding-darwin-x64": ["@oxc-transform/binding-darwin-x64@0.117.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw=="], + "@oxc-transform/binding-darwin-x64": ["@oxc-transform/binding-darwin-x64@0.131.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-EwacackWpYYXGZsl0Aj4NKvDdLuxWZg7LQDneFyMwuftpAxPQLRkHFwZib7r6wpIJm4NELhHW261A4vZ8OQqXQ=="], - "@oxc-transform/binding-freebsd-x64": ["@oxc-transform/binding-freebsd-x64@0.117.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g=="], + "@oxc-transform/binding-freebsd-x64": ["@oxc-transform/binding-freebsd-x64@0.131.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-EhXqWOtL1PWcJ3ktdplV4Wrez2PRuTBSDdB7KF6CN4zuZhohUjxC1bxqDNRbNSX46yaZ27IzJLafah1J6mSA8Q=="], - "@oxc-transform/binding-linux-arm-gnueabihf": ["@oxc-transform/binding-linux-arm-gnueabihf@0.117.0", "", { "os": "linux", "cpu": "arm" }, "sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA=="], + "@oxc-transform/binding-linux-arm-gnueabihf": ["@oxc-transform/binding-linux-arm-gnueabihf@0.131.0", "", { "os": "linux", "cpu": "arm" }, "sha512-NfNACr3aqBKeeUh6HCoGGPSjdMkLvyXUZQywCg/DwRkEpqZo55KX65saW1sQdgBcu0SKXrAReTjIm/HDO/OI0Q=="], - "@oxc-transform/binding-linux-arm-musleabihf": ["@oxc-transform/binding-linux-arm-musleabihf@0.117.0", "", { "os": "linux", "cpu": "arm" }, "sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A=="], + "@oxc-transform/binding-linux-arm-musleabihf": ["@oxc-transform/binding-linux-arm-musleabihf@0.131.0", "", { "os": "linux", "cpu": "arm" }, "sha512-ABp6KGhbYFGDaAdB4gGZW12DYa55OF/Cu+6Rw6/Di0skuwpiDwnBOLHWz9VBq0QTcREy/qIUOnKW+vZHQLOT8A=="], - "@oxc-transform/binding-linux-arm64-gnu": ["@oxc-transform/binding-linux-arm64-gnu@0.117.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA=="], + "@oxc-transform/binding-linux-arm64-gnu": ["@oxc-transform/binding-linux-arm64-gnu@0.131.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-4nKYkHHjRela+jpt+VO4++jxgHoJQFxAeAGtfQ4x11dQMJllzqo3Yu8gfcfLEMsAfflwN/gY+KBbMD/y0exitg=="], - "@oxc-transform/binding-linux-arm64-musl": ["@oxc-transform/binding-linux-arm64-musl@0.117.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg=="], + "@oxc-transform/binding-linux-arm64-musl": ["@oxc-transform/binding-linux-arm64-musl@0.131.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-cW0Ab1s0sxfiyP1+gdd94f0vUjwGzJF4F3DepF3VnR9nFTGMmFLugwtrBS3DYjTnbugiUH3Fp+16yys1FhNzIA=="], - "@oxc-transform/binding-linux-ppc64-gnu": ["@oxc-transform/binding-linux-ppc64-gnu@0.117.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A=="], + "@oxc-transform/binding-linux-ppc64-gnu": ["@oxc-transform/binding-linux-ppc64-gnu@0.131.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-wunAU/lzE1nPGKL47uI0g+4Nsv/12xveOXNu4M70xe85kNBm7mQdMpZIeoVYCxtXew0iHxFKJDT6qK5mYFSA3w=="], - "@oxc-transform/binding-linux-riscv64-gnu": ["@oxc-transform/binding-linux-riscv64-gnu@0.117.0", "", { "os": "linux", "cpu": "none" }, "sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ=="], + "@oxc-transform/binding-linux-riscv64-gnu": ["@oxc-transform/binding-linux-riscv64-gnu@0.131.0", "", { "os": "linux", "cpu": "none" }, "sha512-r4sMt4OB4TryDcVWW9KnsXOf/ea7tIGX2QASNrpetzPocsBZqhHIFDbZ8EkBDjmlmWGHg6BgjVx6lLcMXX4Dcw=="], - "@oxc-transform/binding-linux-riscv64-musl": ["@oxc-transform/binding-linux-riscv64-musl@0.117.0", "", { "os": "linux", "cpu": "none" }, "sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ=="], + "@oxc-transform/binding-linux-riscv64-musl": ["@oxc-transform/binding-linux-riscv64-musl@0.131.0", "", { "os": "linux", "cpu": "none" }, "sha512-/rLVLItsBjKrnZFLiGrwRB3fs0dAjXZLqY7F42omvacFJjZsceQ3481oQX1bBs3RwoDDyDy/9ZkIN7kYIkv5Gw=="], - "@oxc-transform/binding-linux-s390x-gnu": ["@oxc-transform/binding-linux-s390x-gnu@0.117.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q=="], + "@oxc-transform/binding-linux-s390x-gnu": ["@oxc-transform/binding-linux-s390x-gnu@0.131.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-fUprJgJauI1A7e7cDgY/Z3mwLVtE3aswB4lvS96KpRNDHrwOh8bnCJOWf+0CYveDQzghDVFiZWVDo56pO4Wr9Q=="], - "@oxc-transform/binding-linux-x64-gnu": ["@oxc-transform/binding-linux-x64-gnu@0.117.0", "", { "os": "linux", "cpu": "x64" }, "sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw=="], + "@oxc-transform/binding-linux-x64-gnu": ["@oxc-transform/binding-linux-x64-gnu@0.131.0", "", { "os": "linux", "cpu": "x64" }, "sha512-XdbvDT1GPNxrTLXSRt4RU2uCH112q3nINTT05DZqTYYcAxaCPImnMoZe2TlBv5j2376Gk+2pcVnJs6xut47aSw=="], - "@oxc-transform/binding-linux-x64-musl": ["@oxc-transform/binding-linux-x64-musl@0.117.0", "", { "os": "linux", "cpu": "x64" }, "sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg=="], + "@oxc-transform/binding-linux-x64-musl": ["@oxc-transform/binding-linux-x64-musl@0.131.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Du2CxlBfC98EV3hOAmLVSUgP0JgqM9F47lRv9v43T4sGPcQVOjs9wffUybGUUraG9unmBZ4dgpMAqlCq0k3dGw=="], - "@oxc-transform/binding-openharmony-arm64": ["@oxc-transform/binding-openharmony-arm64@0.117.0", "", { "os": "none", "cpu": "arm64" }, "sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA=="], + "@oxc-transform/binding-openharmony-arm64": ["@oxc-transform/binding-openharmony-arm64@0.131.0", "", { "os": "none", "cpu": "arm64" }, "sha512-wTj2FkOgNhgdisnA0a15QQksyj6AH2snmpgYgAtj098i477x5LpHHdqfuk60jsA/QHSjmUc6dm4P88yI5GY4xA=="], - "@oxc-transform/binding-wasm32-wasi": ["@oxc-transform/binding-wasm32-wasi@0.117.0", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw=="], + "@oxc-transform/binding-wasm32-wasi": ["@oxc-transform/binding-wasm32-wasi@0.131.0", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-lE9UaZL0KomAlbATiB6FKoJ9no6W49yXs/MujJqY75AkHHMeOCsHSN9HvriyWz2FOIQgV7C5cmNj0jf+IaBtQg=="], - "@oxc-transform/binding-win32-arm64-msvc": ["@oxc-transform/binding-win32-arm64-msvc@0.117.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg=="], + "@oxc-transform/binding-win32-arm64-msvc": ["@oxc-transform/binding-win32-arm64-msvc@0.131.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8KUfPnuxbEfa9H+OQ5XNPFq9JIEWVCg8kczJaD8PvTprr515mz1lmSLSUoOW8mrLaN0mZaGg6pemuvTawOLoPg=="], - "@oxc-transform/binding-win32-ia32-msvc": ["@oxc-transform/binding-win32-ia32-msvc@0.117.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ=="], + "@oxc-transform/binding-win32-ia32-msvc": ["@oxc-transform/binding-win32-ia32-msvc@0.131.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-pXSu2A7L6H//1Uvsg5RJHb91BDZpCTho0r9oAwxPqKJM2LWV7Zph/ikWEIXt/YLbKF3WpkHrKQ5hbQGP9gWmHg=="], - "@oxc-transform/binding-win32-x64-msvc": ["@oxc-transform/binding-win32-x64-msvc@0.117.0", "", { "os": "win32", "cpu": "x64" }, "sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ=="], + "@oxc-transform/binding-win32-x64-msvc": ["@oxc-transform/binding-win32-x64-msvc@0.131.0", "", { "os": "win32", "cpu": "x64" }, "sha512-VXgk106WLl3NpBO/6G2gxkWBHguCJm01mGqAq2Q0l2o7hnbglsND0UWSCtM3a9MlsDimfJkLWFQveZu4UtnRvA=="], "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.47.0", "", { "os": "android", "cpu": "arm" }, "sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw=="], @@ -507,11 +509,11 @@ "@poppinss/exception": ["@poppinss/exception@1.2.3", "", {}, "sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw=="], - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.2", "", {}, "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], "@rollup/plugin-alias": ["@rollup/plugin-alias@6.0.0", "", { "peerDependencies": { "rollup": ">=4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g=="], - "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@29.0.0", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "fdir": "^6.2.0", "is-reference": "1.2.1", "magic-string": "^0.30.3", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ=="], + "@rollup/plugin-commonjs": ["@rollup/plugin-commonjs@29.0.3", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", "estree-walker": "^2.0.2", "fdir": "^6.2.0", "is-reference": "1.2.1", "magic-string": "^0.30.3", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^2.68.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-ZaOxZceP7SOUW7Lqw5IRVweSQYWaeIPnXIGLiB690EBA3FGJTO40EEr2L5yZplJWsgTCogILRSpcAe7+U0Otdg=="], "@rollup/plugin-inject": ["@rollup/plugin-inject@5.0.5", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "estree-walker": "^2.0.2", "magic-string": "^0.30.3" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg=="], @@ -521,7 +523,7 @@ "@rollup/plugin-replace": ["@rollup/plugin-replace@6.0.3", "", { "dependencies": { "@rollup/pluginutils": "^5.0.1", "magic-string": "^0.30.3" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA=="], - "@rollup/plugin-terser": ["@rollup/plugin-terser@0.4.4", "", { "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A=="], + "@rollup/plugin-terser": ["@rollup/plugin-terser@1.0.0", "", { "dependencies": { "serialize-javascript": "^7.0.3", "smob": "^1.0.0", "terser": "^5.17.4" }, "peerDependencies": { "rollup": "^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ=="], "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], @@ -589,130 +591,132 @@ "@swc/helpers": ["@swc/helpers@0.5.20", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw=="], - "@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.4", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.4", "@tailwindcss/oxide-darwin-arm64": "4.2.4", "@tailwindcss/oxide-darwin-x64": "4.2.4", "@tailwindcss/oxide-freebsd-x64": "4.2.4", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", "@tailwindcss/oxide-linux-x64-musl": "4.2.4", "@tailwindcss/oxide-wasm32-wasi": "4.2.4", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" } }, "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.4", "", { "os": "android", "cpu": "arm64" }, "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.4", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.4", "", { "os": "win32", "cpu": "x64" }, "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.4", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "postcss": "^8.5.6", "tailwindcss": "4.2.4" } }, "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.0", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "postcss": "^8.5.10", "tailwindcss": "4.3.0" } }, "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w=="], - "@tailwindcss/vite": ["@tailwindcss/vite@4.2.4", "", { "dependencies": { "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "tailwindcss": "4.2.4" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw=="], + "@tailwindcss/vite": ["@tailwindcss/vite@4.3.0", "", { "dependencies": { "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "tailwindcss": "4.3.0" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, "sha512-t6J3OrB5Fc0ExuhohouH0fWUGMYL6PTLhW+E7zIk/pdbnJARZDCwjBznFnkh5ynRnIRSI4YjtTH0t6USjJISrw=="], "@tanstack/table-core": ["@tanstack/table-core@8.21.3", "", {}, "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg=="], - "@tanstack/virtual-core": ["@tanstack/virtual-core@3.14.0", "", {}, "sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q=="], + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.16.0", "", {}, "sha512-Er2N7q3WOiH6y2JLxsxNX+u2/sLqSsL0bxFgDjuiPiA7vKhZRm+IzcS17vRee3GNXr64UsesA5CAp9yTiIYw9A=="], "@tanstack/vue-table": ["@tanstack/vue-table@8.21.3", "", { "dependencies": { "@tanstack/table-core": "8.21.3" }, "peerDependencies": { "vue": ">=3.2" } }, "sha512-rusRyd77c5tDPloPskctMyPLFEQUeBzxdQ+2Eow4F7gDPlPOB1UnnhzfpdvqZ8ZyX2rRNGmqNnQWm87OI2OQPw=="], - "@tanstack/vue-virtual": ["@tanstack/vue-virtual@3.13.24", "", { "dependencies": { "@tanstack/virtual-core": "3.14.0" }, "peerDependencies": { "vue": "^2.7.0 || ^3.0.0" } }, "sha512-A0k2qF0zFSUStXSZkGXABouXr2Tw2Ztl/cVIYG9qy84uR8W7UNjAcX3DvzBS3YnDcwvLxab8v7dbmYBZ39itDA=="], + "@tanstack/vue-virtual": ["@tanstack/vue-virtual@3.13.26", "", { "dependencies": { "@tanstack/virtual-core": "3.16.0" }, "peerDependencies": { "vue": "^2.7.0 || ^3.0.0" } }, "sha512-4TmREKi8rKiQC8E2XVEMMgzWbrgHNYolkBgYTXVK1kqXmXRGz6xPWgBq20GUYWUDDhit94+g0ricUQKpZhWRmg=="], - "@tiptap/core": ["@tiptap/core@3.22.4", "", { "peerDependencies": { "@tiptap/pm": "3.22.4" } }, "sha512-vGIGm/HpqLg8EAAQXQ+koV+/S828OEpzocfWcPOwo1u2QUVf9dQG47Yy6JJ8zFFaJwfv4dBcOXli+7BrJwsxDQ=="], + "@tiptap/core": ["@tiptap/core@3.24.0", "", { "peerDependencies": { "@tiptap/pm": "3.24.0" } }, "sha512-GTAsXAI32p4hEZgPzvUv2RPrObxamy9AFhmhG10fXSvN/cDUs8naEYVIqDV3Sh99jMwQEbTFKW1E1mcspsY6ow=="], - "@tiptap/extension-blockquote": ["@tiptap/extension-blockquote@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-7/61kNPbGFhMgM//zMknD0pSb69rGdRIkpulXOWS1JBrFHkH6hjZDfrOETNzgKkO+NlmzVl9rXSTv0xauS3lzA=="], + "@tiptap/extension-blockquote": ["@tiptap/extension-blockquote@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-DgwEEJ1GbDQcT054ynxoaZGmB9apGeUklPrinq9o6xdLHpdg+bO9HCQzggdB8n21VLLglb8jfAEWsVNwh3eASQ=="], - "@tiptap/extension-bold": ["@tiptap/extension-bold@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-jIaPKfNOQu2lhpbLDvtwlQqM+mjF+Kk+auHpzYjBnsuwUli1Cl5ZOau7RH+rru/SQvZe1DtpQlANujDywugZAA=="], + "@tiptap/extension-bold": ["@tiptap/extension-bold@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-CujogYaynasklFKHADUseuvj8X2FnWktTCCo3Hl+nlyRvBTmm5TK2aqiamg3v2P4dBh3O6a70mo8BfRJPuiR1g=="], - "@tiptap/extension-bubble-menu": ["@tiptap/extension-bubble-menu@3.22.4", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-v4pux5Ql3THAEjaLMY4ldtdy/Xy2qU7PJLBkq8ugLp8qicaKC+tpqxp6sGif4vLIjz7Ap5hurRbTNbXzszyyHA=="], + "@tiptap/extension-bubble-menu": ["@tiptap/extension-bubble-menu@3.24.0", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-jRXD+JPu9ayvq78g8hsCxx4q/qUFtrdfIYirRSf5YUseuuUbtfrq83AsGabcygpUTefjJkMQoXNITkh6294Ggw=="], - "@tiptap/extension-bullet-list": ["@tiptap/extension-bullet-list@3.22.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.22.4" } }, "sha512-TB+d3fGcTixYjO7coKqTr1mGTJuqr8hjDCPUFgzuvKyJnBhqWITmBzQ/8CLq4rr6mihgGURbD3N+xkQuPAKFiw=="], + "@tiptap/extension-bullet-list": ["@tiptap/extension-bullet-list@3.24.0", "", { "peerDependencies": { "@tiptap/extension-list": "3.24.0" } }, "sha512-IOpAm5c4XVVVvkOef+V9XYMVpea+3MgBpCQgn83UQRlwO9eIMwmcyxOznu7gQPQVShTEpkt4T6uK+ZN9o8meIA=="], - "@tiptap/extension-code": ["@tiptap/extension-code@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-cnbxmVhAcc7X3G81QUYEmKP0ve2hRmvAiFXBuuv9RUtQlBiRnzmhHoJOMgkX0CsMR7+8kMRpTfeDUYq2xp5s5w=="], + "@tiptap/extension-code": ["@tiptap/extension-code@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-MAQtrPRQ+HRmcGotWbksdIGeH1gqayFAdvi4lNGeFT7taHXP1o1XD7CQp7iYIKmg8IU4/MQ+RdetSfuC1A9edQ=="], - "@tiptap/extension-code-block": ["@tiptap/extension-code-block@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-MEurzNXfMET3rhjpoPJYUgMfxTdTqbzT9+ToFrqNGAHocdXVm6m1hhO2frVC7fEtHPnxXKsn0Z3NUbCRkRTLuA=="], + "@tiptap/extension-code-block": ["@tiptap/extension-code-block@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-NZglw4oHoH6oJ5+HvxxQCYk+wODJmsxzUpRQdsOmje08sekQH+Zt9i4UKimBhg4urpd5r+dKXTslab9a5eQ86w=="], - "@tiptap/extension-collaboration": ["@tiptap/extension-collaboration@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4", "@tiptap/y-tiptap": "^3.0.2", "yjs": "^13" } }, "sha512-4g4DdpvXZyYYCcWs3cO4DwtzhukqI13waYUKfwOcNnQwZ4YOCR83ET/kgqMk/xMAfbymKghbyAZRCc33zD5xvw=="], + "@tiptap/extension-collaboration": ["@tiptap/extension-collaboration@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0", "@tiptap/y-tiptap": "^3.0.4", "yjs": "^13" } }, "sha512-PF9rFZrZtgr7xemnzQaU1uScUz4GwDjE+vLMosugUJxaoz/zSsHRXQ00dHM32MKxBzbWg3A4ZQTHB7YzAtyl3Q=="], - "@tiptap/extension-document": ["@tiptap/extension-document@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-XQKla1+703FqQJC48tPDVgt9ucGiFbIEmQdOg5L5o07z9a6/NzuaZAc+1zJ7NxcUZzy+z6wBn1PrVMTiqiSXlw=="], + "@tiptap/extension-document": ["@tiptap/extension-document@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-yxgM3+yXy2XZzEwH43y2Kp8D1BkblxEWLXqo0YCoAKtxyKCcEaT8kdlf70kS7D0+VSzYU4D0iN7VdQIYHcL2mA=="], - "@tiptap/extension-drag-handle": ["@tiptap/extension-drag-handle@3.22.4", "", { "dependencies": { "@floating-ui/dom": "^1.6.13" }, "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/extension-collaboration": "3.22.4", "@tiptap/extension-node-range": "3.22.4", "@tiptap/pm": "3.22.4", "@tiptap/y-tiptap": "^3.0.2" } }, "sha512-VCheiqy0OGrcrxOYt7Kp7MXWMZoEaZp517HnRrdrvcCCO0j2hcrT5mbo1mMPzP/WvTUHkXCmqcLv+uIk3Bdo/g=="], + "@tiptap/extension-drag-handle": ["@tiptap/extension-drag-handle@3.24.0", "", { "dependencies": { "@floating-ui/dom": "^1.6.13" }, "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/extension-collaboration": "3.24.0", "@tiptap/extension-node-range": "3.24.0", "@tiptap/pm": "3.24.0", "@tiptap/y-tiptap": "^3.0.2" } }, "sha512-DMW2Dx89aS28+FXlpl5nlkZT4dhqdaAO6W76qXVUPIHFvO5yWP0q5UzAPGW5JEBOI+LxWj0AkTDMrX0XrLw9oA=="], - "@tiptap/extension-drag-handle-vue-3": ["@tiptap/extension-drag-handle-vue-3@3.22.4", "", { "peerDependencies": { "@tiptap/extension-drag-handle": "3.22.4", "@tiptap/pm": "3.22.4", "@tiptap/vue-3": "3.22.4", "vue": "^3.0.0" } }, "sha512-ySedk/4Szd8M3t2yE+5tjfXyTIwanmQ51jIGxro23D383upDxD0c/lrTk+9+KUWJfsUTqOrJDrzogpRF+F30dQ=="], + "@tiptap/extension-drag-handle-vue-3": ["@tiptap/extension-drag-handle-vue-3@3.24.0", "", { "peerDependencies": { "@tiptap/extension-drag-handle": "3.24.0", "@tiptap/pm": "3.24.0", "@tiptap/vue-3": "3.24.0", "vue": "^3.0.0" } }, "sha512-tk9yKgGPYMRAKeCtEdza532EZzbIID7pO6sSLqmteyDH3MxuaJZLhi6tqRheWm55SlPTTJzAUZuY8EchzPpC7g=="], - "@tiptap/extension-dropcursor": ["@tiptap/extension-dropcursor@3.22.4", "", { "peerDependencies": { "@tiptap/extensions": "3.22.4" } }, "sha512-N9/yMDC35jJp0V/naL0+6gi4gUDUIcPpWEzFdCDWUSYBA8mt41c1kI1ZU7UTKYIBzTClenhYHRc2XKZxxx0+LQ=="], + "@tiptap/extension-dropcursor": ["@tiptap/extension-dropcursor@3.24.0", "", { "peerDependencies": { "@tiptap/extensions": "3.24.0" } }, "sha512-Dbv1c5LnvG3PT+yEbCNroyOeeUkHq9wcir2pbC7wri7g7d2sCi0+HvKH0MAxLwY3j5NJJSiSyG2ypMaXOAs4sg=="], - "@tiptap/extension-floating-menu": ["@tiptap/extension-floating-menu@3.22.4", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-DFuyYxgaZPgxum5z1yvJPbfYCvDdO8geXsdyqt0qYYdiat3aGE4ncJhiLRIFDhSHBhaZg5eCgu/YPYAN6jZnrA=="], + "@tiptap/extension-floating-menu": ["@tiptap/extension-floating-menu@3.24.0", "", { "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-7QEbf3mUzFAkejjQGX9f0L507oMtnOBRwHt2skUTR+9yXgudsN8zaDBSSRHLeMWGk9b7L293ZMA6zCRrZaHrfA=="], - "@tiptap/extension-gapcursor": ["@tiptap/extension-gapcursor@3.22.4", "", { "peerDependencies": { "@tiptap/extensions": "3.22.4" } }, "sha512-UYBEUj3SFpKINIE7AdzcyeS3xICK+ee+YLBbuqNXyHStYChjJOohzJehqiqhjR16A88KQQ+ZjgyDcItKGygSog=="], + "@tiptap/extension-gapcursor": ["@tiptap/extension-gapcursor@3.24.0", "", { "peerDependencies": { "@tiptap/extensions": "3.24.0" } }, "sha512-CzCP5/jni5RFwW9jCfBO6auh83GbaioMTpSk6tyR3sd+CbwlBcUdsJFGJkbaRdiSS9dgIyi+6hRbhjpYdHcp+w=="], - "@tiptap/extension-hard-break": ["@tiptap/extension-hard-break@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-xq+a4dE7T6VwApCkh/yU3p30gn3F8g8Arb9CyEZm58/WIJUIGvHSTjDdHmvU16+kiWSBg+wOOsaFHhYjJjxcKA=="], + "@tiptap/extension-hard-break": ["@tiptap/extension-hard-break@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-T/ZEBiHQPMyTqDvXG0tiqBToNeuSemIPmNtdoGSgBN/degVl7VJZqQIrLIvOUHfjf3QkRs7TE/mcqTJsIboO/g=="], - "@tiptap/extension-heading": ["@tiptap/extension-heading@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-TUaj5f0Ir5qy9HKKt2ocnwfXKpZDYeHgbbP9gshKFzdq5PLe1RbIgkjfy6bnoI865cYjmPYWRjcT7XsKyIcb9Q=="], + "@tiptap/extension-heading": ["@tiptap/extension-heading@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-GCSgapIzQPqEGNcVGE0/Pcjg5wITMLYJlrS3GGVw7BPmECJwgexcoOsEwkxtzJnXT/HpFXbvOFW43sM0KeHSjg=="], - "@tiptap/extension-horizontal-rule": ["@tiptap/extension-horizontal-rule@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-cCI1HekGQwhY/MbgaKQ0R/7HcH5ZM1oFAyI/J72QGLC0XnF403S/OXoHMuBWr1mCu8hNiQWCzeNRJUty0iytNw=="], + "@tiptap/extension-horizontal-rule": ["@tiptap/extension-horizontal-rule@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-DFzWJTrb23x+qssLLs85vEyho8ItUGp3RY9XUsVTIAGZn5IsoUw8wMsvIBlH1ux4Ch7gLchtcD6kpTdMdrL9kw=="], - "@tiptap/extension-image": ["@tiptap/extension-image@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-ZDc+fLaratTQ4IgnKcJJwfUgUgpcHjbZSBi6UQAILJwkflMy1Zxj8mpbma5P934nLSI+uDnR5ret6ZZLNITKhA=="], + "@tiptap/extension-image": ["@tiptap/extension-image@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-mH+bvsX2cPKuZzV7YMQi4FV2YbDP+Kmq36bY+Bwi/x4mYUc8u0cjQxcu8RzLO7GtsgUJPxGMwfkQxmDqXFLZvw=="], - "@tiptap/extension-italic": ["@tiptap/extension-italic@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-fVSDx5AYXgDI3v2zZIqb7V8EewthwM2NJ/ZCX+XaxRsqNEpnjVhgHs7UlvDqK1wj2OJ6zmUNjPtVlAFRxwT+HQ=="], + "@tiptap/extension-italic": ["@tiptap/extension-italic@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-mf3cbNlbMPUNj3IyUkIke+o3ZpOUrtVeY5Yqs5IM/VhkUUh/PdIzqw74VuqEAJ0Z4oZ6nNDHeYLrl3Be1j99lQ=="], - "@tiptap/extension-link": ["@tiptap/extension-link@3.22.4", "", { "dependencies": { "linkifyjs": "^4.3.2" }, "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-uoP3yus02uwGPVzW2QaEPJWVIrUb/r5nKm6c8DiJv9fNSX1+gykZZMg42c6GwRFLZ/vyfWjVCbAE03VMUqafgA=="], + "@tiptap/extension-link": ["@tiptap/extension-link@3.24.0", "", { "dependencies": { "linkifyjs": "^4.3.3" }, "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-MwMoNGG2mL5XGFV1tEGunBRglwsIbW+ZOB2QnKiv+Mcbi2JCWMrorndJZBqpVPR5nM+Bef2KnpchEJmYlQLvKQ=="], - "@tiptap/extension-list": ["@tiptap/extension-list@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-Xe8UFvvHmyp/c/TJsFwlwU9CWACYbBirNsluJ3U1+H8BTu1wqdrT/AXR5uIXeyCl5kiWKgX5q71eHWbYFOrqrg=="], + "@tiptap/extension-list": ["@tiptap/extension-list@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-GcxDVMMmDGj7OFTBrV7JpVgr5wxlr2vmjwH7U8QxZX7OJI5vrsMYl/U6KRTvUpG8wP+Zmo5jRlLM+BbL+a/W3g=="], - "@tiptap/extension-list-item": ["@tiptap/extension-list-item@3.22.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.22.4" } }, "sha512-H659KXTvggSypIDWSOJBZ37jh9pKjQriDDvYPYvOZCdfij0D0hsDXN/wXoypArneUkoBdgruHfTtMkFOaQlgkw=="], + "@tiptap/extension-list-item": ["@tiptap/extension-list-item@3.24.0", "", { "peerDependencies": { "@tiptap/extension-list": "3.24.0" } }, "sha512-zl/U3viJiV9OzkKM37AHIUN1af1TSLrcbHUUoNLkfJ33Nq+NlpaXpCVK0rKRqiLFJf7zk/a5KWG5CrOy9TxjKA=="], - "@tiptap/extension-list-keymap": ["@tiptap/extension-list-keymap@3.22.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.22.4" } }, "sha512-t/zhker4oIS78AIGYDdFFfZC6zSBlszfD7z/zqFLGCg5PHNNgkZK5hKj6Vyix6D2SapRn/ajnx+8mhbKIUH5eA=="], + "@tiptap/extension-list-keymap": ["@tiptap/extension-list-keymap@3.24.0", "", { "peerDependencies": { "@tiptap/extension-list": "3.24.0" } }, "sha512-69fKcrngYGEKWNn4R5oLwl0YuV3FY4kufEValVcjnihUmqJTE1vx+fwctYoTsOGnIuNGpUIQ7f9YDD/0w34qBw=="], - "@tiptap/extension-mention": ["@tiptap/extension-mention@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4", "@tiptap/suggestion": "3.22.4" } }, "sha512-ZUJ1gCZlH+JGTAT7lVpZjcMAzvIi9hXIyBjOmjL+737NlF+Cfgo+fjHqFQgOSsiO9LEyc3ZMSclmbzII1Jy6IQ=="], + "@tiptap/extension-mention": ["@tiptap/extension-mention@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0", "@tiptap/suggestion": "3.24.0" } }, "sha512-c68AYrEoHJ4vlBvt5stBUTveKXiNwt5BxaQxgq2R4OXjc3VMoh+XJqo1bBbMNHEJfuGMNpcdfZ2zf09jnBf8/A=="], - "@tiptap/extension-node-range": ["@tiptap/extension-node-range@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-AJgZPX9DLDjN1nE4WLQBPHRChxrV3JuWHF6OakZIdO23cuBcg233FCQTqHQ/eNS/tD3J+Kw9gBc4ZUDhBes9gg=="], + "@tiptap/extension-node-range": ["@tiptap/extension-node-range@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-JUrhuKD5raii6IsARETNq3seAXUB9UpQGjeSJKBKBOv10PBAq0RLKlI0lbv7t9FR4vfZE7is/XpvoZ0v2Vr9kw=="], - "@tiptap/extension-ordered-list": ["@tiptap/extension-ordered-list@3.22.4", "", { "peerDependencies": { "@tiptap/extension-list": "3.22.4" } }, "sha512-w77hPVf7pcHt97vfrybg/l0t5CimCd4y75OJKuHuo3CfgM5xbUP/gaPNMDyLLe7MYole/UHi/XvG3XjgzqTzAw=="], + "@tiptap/extension-ordered-list": ["@tiptap/extension-ordered-list@3.24.0", "", { "peerDependencies": { "@tiptap/extension-list": "3.24.0" } }, "sha512-buRa6bmBDw0TztH+rAcusIye14DiLDS+yGheo6GiNCTD7kKJnksXagBdxvip3jhW5sx7gyAKvoBmvGSg1BbsGA=="], - "@tiptap/extension-paragraph": ["@tiptap/extension-paragraph@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-de6dFkIhigiENESY6rNJ3yTVS/337ybfP30dNPudTwGe9oAu9ZCS+04j6QCvXSjhlI3ULiv7wiSHqrP26Gd+Hw=="], + "@tiptap/extension-paragraph": ["@tiptap/extension-paragraph@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-wD06aB6hO7LgcrlhGiw7I64k2tus9kNoICX5R+UecBSB1DVJdzKvXoXL2kPNv4DqYvljHdkIeK/OpuOTQd6MJA=="], - "@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.22.4", "", { "peerDependencies": { "@tiptap/extensions": "3.22.4" } }, "sha512-Z3wtWL+KufwkC7CkJge5enAxx4q8C3oOYixme02snY9zfjX3V/1pjAmEfP4wxScgM5GIuTEJ83B9Yz3wRzPA6Q=="], + "@tiptap/extension-placeholder": ["@tiptap/extension-placeholder@3.24.0", "", { "peerDependencies": { "@tiptap/extensions": "3.24.0" } }, "sha512-3jfYYCIuwMADhvZ92vB6c80YiTmgTSFR23JqyLps8qkQtV59Va5CBYpwJtSs1+VrbCVnNxhZBHhVXusZO3uRkA=="], - "@tiptap/extension-strike": ["@tiptap/extension-strike@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-aRHWQj42HiailXSC9LkKYM3jWMcSeGwOjbqM4PiuxQZmHVDRFmeHkfJItOdn2cSHaO0vuEVK+TvrWUWsBFi3pg=="], + "@tiptap/extension-strike": ["@tiptap/extension-strike@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-sfN1iQs6Fdlorrfe8wipDkTPwu/Egx3s2fkY7TAWusTGFHwlovuRUGFKqCL9dI4N3u6uqUMpEuWmQNgv+aQGjQ=="], - "@tiptap/extension-text": ["@tiptap/extension-text@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-mM69uUW5cSxIhyEpWXi/YcfyupcJMDLCPEfYi62awH0iOP/LRoCv/nHjJq4Hyj/KxRJbe8HKwIUnqaCUf7m5Pg=="], + "@tiptap/extension-text": ["@tiptap/extension-text@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-Im7keLPEihxm3+LyF+drYCoaOY5hlq35lvHAp/el6M8pJ/scts88HrYpdR1Yc4BtpZBIhfHSyWgPaupI4qwdeg=="], - "@tiptap/extension-underline": ["@tiptap/extension-underline@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4" } }, "sha512-08kGdbhIrA6h10GWXqOkqIveaBj5tmxclK208/nUIAlonI9hPd739vu7fmVtpnmqCnSSNpoRtU4u6Gj5at0ZpA=="], + "@tiptap/extension-underline": ["@tiptap/extension-underline@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0" } }, "sha512-D4W4X3UMq9dLVIOfPB9+UodQ4eAJ8yDcm8qFWAwq0a15YWH6bnwulCuIdV+U5dEG+yaRxN8haB9GrrID9jmrSA=="], - "@tiptap/extensions": ["@tiptap/extensions@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-fOe8VptJvLPs32bNdUYo8SRyljwqKNQVXWW056VoXIc5en/59OdJlJQVeHI0jRRciH3MtrqODi/gfJR0VHNZ8A=="], + "@tiptap/extensions": ["@tiptap/extensions@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-z6gRYzy2ucJp07OQ0F2W07NxyhMTxPYH1ia2eGiQkWax1i56oExpjMsDHP8THWlg8Tb7NnbfKpkfh881EsmofA=="], - "@tiptap/markdown": ["@tiptap/markdown@3.22.4", "", { "dependencies": { "marked": "^17.0.1" }, "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-gcoLOq5TBntw13QdeWMy7yc2X+b9yTplcFb5kpMQNgNoxlu0+jlX4LiBR+E6lOV+m+AtkprHHltTYyKG23bdOw=="], + "@tiptap/markdown": ["@tiptap/markdown@3.24.0", "", { "dependencies": { "marked": "^17.0.1" }, "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-EIEQmH8tOIWAxVnRpYSALIQCU8dVaGQoEVvmsa6B2B/zZeIsBSEZzcVVE2yGEVZtShf3ag37Szr6Lu7lTor3sw=="], - "@tiptap/pm": ["@tiptap/pm@3.22.4", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-keymap": "^1.2.2", "prosemirror-model": "^1.24.1", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-hj8Qka6WcHRllHUdeSjDnq2XaisUo4KsoGJc1WcFpoa1Yd+OeD861zUMnV7DFVGdZRy45Obht0CUYJpXQ4yA4w=="], + "@tiptap/pm": ["@tiptap/pm@3.24.0", "", { "dependencies": { "prosemirror-changeset": "^2.3.0", "prosemirror-commands": "^1.6.2", "prosemirror-dropcursor": "^1.8.1", "prosemirror-gapcursor": "^1.3.2", "prosemirror-history": "^1.4.1", "prosemirror-inputrules": "^1.4.0", "prosemirror-keymap": "^1.2.2", "prosemirror-model": "^1.24.1", "prosemirror-schema-list": "^1.5.0", "prosemirror-state": "^1.4.3", "prosemirror-tables": "^1.6.4", "prosemirror-transform": "^1.10.2", "prosemirror-view": "^1.38.1" } }, "sha512-QQP/78ryOZDN99gNBV7dgh69/8AYaOYQYFklq/iR+ZRFaaL3+qqHFvPVJapGkzPdymBgNJ34xjFM8n5pJ4QmMg=="], - "@tiptap/starter-kit": ["@tiptap/starter-kit@3.22.4", "", { "dependencies": { "@tiptap/core": "^3.22.4", "@tiptap/extension-blockquote": "^3.22.4", "@tiptap/extension-bold": "^3.22.4", "@tiptap/extension-bullet-list": "^3.22.4", "@tiptap/extension-code": "^3.22.4", "@tiptap/extension-code-block": "^3.22.4", "@tiptap/extension-document": "^3.22.4", "@tiptap/extension-dropcursor": "^3.22.4", "@tiptap/extension-gapcursor": "^3.22.4", "@tiptap/extension-hard-break": "^3.22.4", "@tiptap/extension-heading": "^3.22.4", "@tiptap/extension-horizontal-rule": "^3.22.4", "@tiptap/extension-italic": "^3.22.4", "@tiptap/extension-link": "^3.22.4", "@tiptap/extension-list": "^3.22.4", "@tiptap/extension-list-item": "^3.22.4", "@tiptap/extension-list-keymap": "^3.22.4", "@tiptap/extension-ordered-list": "^3.22.4", "@tiptap/extension-paragraph": "^3.22.4", "@tiptap/extension-strike": "^3.22.4", "@tiptap/extension-text": "^3.22.4", "@tiptap/extension-underline": "^3.22.4", "@tiptap/extensions": "^3.22.4", "@tiptap/pm": "^3.22.4" } }, "sha512-qWjw+vfdin1rzMRpRU4cC5tLTwMJtUpXeQukv+6mOqqvhptuwuZBjUHImVEJaSPoHXS7+1ut+nTnrLyWyEuE5Q=="], + "@tiptap/starter-kit": ["@tiptap/starter-kit@3.24.0", "", { "dependencies": { "@tiptap/core": "^3.24.0", "@tiptap/extension-blockquote": "^3.24.0", "@tiptap/extension-bold": "^3.24.0", "@tiptap/extension-bullet-list": "^3.24.0", "@tiptap/extension-code": "^3.24.0", "@tiptap/extension-code-block": "^3.24.0", "@tiptap/extension-document": "^3.24.0", "@tiptap/extension-dropcursor": "^3.24.0", "@tiptap/extension-gapcursor": "^3.24.0", "@tiptap/extension-hard-break": "^3.24.0", "@tiptap/extension-heading": "^3.24.0", "@tiptap/extension-horizontal-rule": "^3.24.0", "@tiptap/extension-italic": "^3.24.0", "@tiptap/extension-link": "^3.24.0", "@tiptap/extension-list": "^3.24.0", "@tiptap/extension-list-item": "^3.24.0", "@tiptap/extension-list-keymap": "^3.24.0", "@tiptap/extension-ordered-list": "^3.24.0", "@tiptap/extension-paragraph": "^3.24.0", "@tiptap/extension-strike": "^3.24.0", "@tiptap/extension-text": "^3.24.0", "@tiptap/extension-underline": "^3.24.0", "@tiptap/extensions": "^3.24.0", "@tiptap/pm": "^3.24.0" } }, "sha512-Ef4PCP96vcY2GonXN9J0M8iC6zvxPTmQlL/QZiCwuYqqnH/hNpYIjNSQdTndiDpxRKofa32Sr2HWktgEnL32Bg=="], - "@tiptap/suggestion": ["@tiptap/suggestion@3.22.4", "", { "peerDependencies": { "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4" } }, "sha512-1buvLZemITTeKmPf2wGFWvvhRFKjdQ+JgMqc67xBraOKeDd8wQi1e2XlhCYAtlVMm5f6j+qlLC/MvwuHI2jHeQ=="], + "@tiptap/suggestion": ["@tiptap/suggestion@3.24.0", "", { "peerDependencies": { "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0" } }, "sha512-UlLIij1fxFy7tbCmqUoInWRijzsi8hsbaXKCx6L3KvLXtxHb4hMnDhd6W++rOk9Q1hDpmNf8qNIX498q/ZNstw=="], - "@tiptap/vue-3": ["@tiptap/vue-3@3.22.4", "", { "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.22.4", "@tiptap/extension-floating-menu": "^3.22.4" }, "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "3.22.4", "@tiptap/pm": "3.22.4", "vue": "^3.0.0" } }, "sha512-fcqUWt6LlA5PbcFaDXyV1apWwAs8j80m0kWwoL5+DgKdkGxsB5LgDZU1pTWle0zvR5zmGvJ7LmB6EGAYIBjdmQ=="], + "@tiptap/vue-3": ["@tiptap/vue-3@3.24.0", "", { "optionalDependencies": { "@tiptap/extension-bubble-menu": "^3.24.0", "@tiptap/extension-floating-menu": "^3.24.0" }, "peerDependencies": { "@floating-ui/dom": "^1.0.0", "@tiptap/core": "3.24.0", "@tiptap/pm": "3.24.0", "vue": "^3.0.0" } }, "sha512-B7H630A5kGRHPrj60FMLbKC8EBWFvGeP8EytaKqxfByEFW6I2mYeZV4BzDptx6Hgy7h5oTXJ1yjc8DH1Q80WYA=="], "@tiptap/y-tiptap": ["@tiptap/y-tiptap@3.0.2", "", { "dependencies": { "lib0": "^0.2.100" }, "peerDependencies": { "prosemirror-model": "^1.7.1", "prosemirror-state": "^1.2.3", "prosemirror-view": "^1.9.10", "y-protocols": "^1.0.1", "yjs": "^13.5.38" } }, "sha512-flMn/YW6zTbc6cvDaUPh/NfLRTXDIqgpBUkYzM74KA1snqQwhOMjnRcnpu4hDFrTnPO6QGzr99vRyXEA7M44WA=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - "@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="], + "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/jsesc": ["@types/jsesc@2.5.1", "", {}, "sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="], @@ -723,25 +727,25 @@ "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.57.1", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.57.1", "@typescript-eslint/type-utils": "8.57.1", "@typescript-eslint/utils": "8.57.1", "@typescript-eslint/visitor-keys": "8.57.1", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.57.1", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.1", "@typescript-eslint/types": "8.59.1", "@typescript-eslint/typescript-estree": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.60.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/typescript-estree": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-fcqpj/MyK4sxDPcbe7STNPbpQL4RLZOPWuaTmwZYuc+hJKzRf58yRxfhqGpc6PIq9ZyfSBpfHgmUHmHs0KwHwg=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.59.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.59.1", "@typescript-eslint/types": "^8.59.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.60.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.60.0", "@typescript-eslint/types": "^8.60.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-aZu74NNKJeUWqCjDddzdiKaS82dgYgV/vmf+Ui3ZdZejmgfXR/q+pRumgobnQ2cCJTgGTWp4ypiwsuofFubavg=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.59.1", "", { "dependencies": { "@typescript-eslint/types": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1" } }, "sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0" } }, "sha512-pFzqhllJMs+jghLQWzV00ds39xLzuyqPSev5pd8f4Ir0rtKR3ZLUB4/4dhjOFighWb9larvtfJvqL+4yKDI3Xw=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.59.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.60.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-BZPR3RGYlAXnly6ymAxfkVn5rCbZzQNou0rxv3GfWZ8cTQp+hhVd73khbGLAd8k1TlAPLISH337M+tAgAnaJDQ=="], "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.57.1", "", { "dependencies": { "@typescript-eslint/types": "8.57.1", "@typescript-eslint/typescript-estree": "8.57.1", "@typescript-eslint/utils": "8.57.1", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.59.1", "", {}, "sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.60.0", "", {}, "sha512-AsE7x2XaAK+CVbeih0Fvbn+r1qHxtpLDJ3XUuFcIinT318T90yHMJC+Zgv+jUuDjQQd06HKwxnDu6sz1IcTilA=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.59.1", "", { "dependencies": { "@typescript-eslint/project-service": "8.59.1", "@typescript-eslint/tsconfig-utils": "8.59.1", "@typescript-eslint/types": "8.59.1", "@typescript-eslint/visitor-keys": "8.59.1", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.60.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.60.0", "@typescript-eslint/tsconfig-utils": "8.60.0", "@typescript-eslint/types": "8.60.0", "@typescript-eslint/visitor-keys": "8.60.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-3AcZNBGMClm6CXDyo8kYvVGT/sx29sS0oBsIb9oZI2gunA4Vm2M3YHzRLPvsUBBsl+yB5FPtltq7gGH0iTlp9g=="], "@typescript-eslint/utils": ["@typescript-eslint/utils@8.57.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.57.1", "@typescript-eslint/types": "8.57.1", "@typescript-eslint/typescript-estree": "8.57.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.59.1", "", { "dependencies": { "@typescript-eslint/types": "8.59.1", "eslint-visitor-keys": "^5.0.0" } }, "sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.60.0", "", { "dependencies": { "@typescript-eslint/types": "8.60.0", "eslint-visitor-keys": "^5.0.0" } }, "sha512-9WI52t8ZGLVGrPMBet25yAftqY/n95+zmoUUtJBBQTKDSKUu7OsPTroT2op7U9JatkoRccL0YkWDNMFfC4Sjxg=="], - "@unhead/vue": ["@unhead/vue@2.1.13", "", { "dependencies": { "hookable": "^6.0.1", "unhead": "2.1.13" }, "peerDependencies": { "vue": ">=3.5.18" } }, "sha512-HYy0shaHRnLNW9r85gppO8IiGz0ONWVV3zGdlT8CQ0tbTwixznJCIiyqV4BSV1aIF1jJIye0pd1p/k6Eab8Z/A=="], + "@unhead/vue": ["@unhead/vue@2.1.15", "", { "dependencies": { "hookable": "^6.0.1", "unhead": "2.1.15" }, "peerDependencies": { "vue": ">=3.5.18" } }, "sha512-SSByXfEjhzPn8gXdEdgpYqpLMPSkLUH2HVE0GxZfOtNsJ0GgOHQs0g9T67ZZ1z0kTELLKdtOtYrzrbv9+ffF7g=="], "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="], @@ -781,11 +785,11 @@ "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="], - "@vercel/nft": ["@vercel/nft@1.3.1", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^13.0.0", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-ihNT1rswiq3cy4WKQAV5kJi6UjWX1vLUzlLc+Vvq83G8CU9nMgfDWz5f1tOnSlS8LeC4Wp4qTB3+HGj/ccUrFQ=="], + "@vercel/nft": ["@vercel/nft@1.10.2", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^13.0.0", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-w+WyX5Ulmj4dtTZrxaulqrjaLZHSbnPzx75SJsTNYmotKsqn1JlLnDJa+lz5hn90HJofhl/2MAtw0mCrgM3qYw=="], - "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.4", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.2" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vue": "^3.2.25" } }, "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ=="], + "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.7", "", { "dependencies": { "@rolldown/pluginutils": "^1.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.2.25" } }, "sha512-km+p+XdSz9Sxm5rqUbqcSfZYaAniKxWBj1KURl+Jr7UaPvvX7BmaWMdP69I5rrFDeQGyxAG7NXdc57vz+snhWg=="], - "@vitejs/plugin-vue-jsx": ["@vitejs/plugin-vue-jsx@5.1.4", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-syntax-typescript": "^7.28.6", "@babel/plugin-transform-typescript": "^7.28.6", "@rolldown/pluginutils": "^1.0.0-rc.2", "@vue/babel-plugin-jsx": "^2.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vue": "^3.0.0" } }, "sha512-70LmoVk9riR7qc4W2CpjsbNMWTPnuZb9dpFKX1emru0yP57nsc9k8nhLA6U93ngQapv5VDIUq2JatNfLbBIkrA=="], + "@vitejs/plugin-vue-jsx": ["@vitejs/plugin-vue-jsx@5.1.5", "", { "dependencies": { "@babel/core": "^7.29.0", "@babel/plugin-syntax-typescript": "^7.28.6", "@babel/plugin-transform-typescript": "^7.28.6", "@rolldown/pluginutils": "^1.0.0-rc.2", "@vue/babel-plugin-jsx": "^2.0.1" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", "vue": "^3.0.0" } }, "sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA=="], "@volar/language-core": ["@volar/language-core@2.4.28", "", { "dependencies": { "@volar/source-map": "2.4.28" } }, "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ=="], @@ -801,13 +805,13 @@ "@vue/babel-plugin-resolve-type": ["@vue/babel-plugin-resolve-type@2.0.1", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/parser": "^7.28.4", "@vue/compiler-sfc": "^3.5.22" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ=="], - "@vue/compiler-core": ["@vue/compiler-core@3.5.33", "", { "dependencies": { "@babel/parser": "^7.29.2", "@vue/shared": "3.5.33", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw=="], + "@vue/compiler-core": ["@vue/compiler-core@3.5.35", "", { "dependencies": { "@babel/parser": "^7.29.3", "@vue/shared": "3.5.35", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw=="], - "@vue/compiler-dom": ["@vue/compiler-dom@3.5.33", "", { "dependencies": { "@vue/compiler-core": "3.5.33", "@vue/shared": "3.5.33" } }, "sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA=="], + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.35", "", { "dependencies": { "@vue/compiler-core": "3.5.35", "@vue/shared": "3.5.35" } }, "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA=="], - "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.33", "", { "dependencies": { "@babel/parser": "^7.29.2", "@vue/compiler-core": "3.5.33", "@vue/compiler-dom": "3.5.33", "@vue/compiler-ssr": "3.5.33", "@vue/shared": "3.5.33", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.10", "source-map-js": "^1.2.1" } }, "sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA=="], + "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.35", "", { "dependencies": { "@babel/parser": "^7.29.3", "@vue/compiler-core": "3.5.35", "@vue/compiler-dom": "3.5.35", "@vue/compiler-ssr": "3.5.35", "@vue/shared": "3.5.35", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.15", "source-map-js": "^1.2.1" } }, "sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw=="], - "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.33", "", { "dependencies": { "@vue/compiler-dom": "3.5.33", "@vue/shared": "3.5.33" } }, "sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A=="], + "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.35", "", { "dependencies": { "@vue/compiler-dom": "3.5.35", "@vue/shared": "3.5.35" } }, "sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw=="], "@vue/devtools-api": ["@vue/devtools-api@7.7.9", "", { "dependencies": { "@vue/devtools-kit": "^7.7.9" } }, "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g=="], @@ -817,27 +821,27 @@ "@vue/devtools-shared": ["@vue/devtools-shared@8.1.1", "", {}, "sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ=="], - "@vue/language-core": ["@vue/language-core@3.2.7", "", { "dependencies": { "@volar/language-core": "2.4.28", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.1.2", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.4" } }, "sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw=="], + "@vue/language-core": ["@vue/language-core@3.3.3", "", { "dependencies": { "@volar/language-core": "2.4.28", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.2.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.4" } }, "sha512-X6p+7nfY7vVT6dQwUJ+v0Jfq/lwIfhL2jMi91dQ3ln4hnlGXlxsDu/FNkeyHYgvYtyQy18ZX76IZy7X4diDbiQ=="], - "@vue/reactivity": ["@vue/reactivity@3.5.33", "", { "dependencies": { "@vue/shared": "3.5.33" } }, "sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A=="], + "@vue/reactivity": ["@vue/reactivity@3.5.35", "", { "dependencies": { "@vue/shared": "3.5.35" } }, "sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ=="], - "@vue/runtime-core": ["@vue/runtime-core@3.5.33", "", { "dependencies": { "@vue/reactivity": "3.5.33", "@vue/shared": "3.5.33" } }, "sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ=="], + "@vue/runtime-core": ["@vue/runtime-core@3.5.35", "", { "dependencies": { "@vue/reactivity": "3.5.35", "@vue/shared": "3.5.35" } }, "sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg=="], - "@vue/runtime-dom": ["@vue/runtime-dom@3.5.33", "", { "dependencies": { "@vue/reactivity": "3.5.33", "@vue/runtime-core": "3.5.33", "@vue/shared": "3.5.33", "csstype": "^3.2.3" } }, "sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw=="], + "@vue/runtime-dom": ["@vue/runtime-dom@3.5.35", "", { "dependencies": { "@vue/reactivity": "3.5.35", "@vue/runtime-core": "3.5.35", "@vue/shared": "3.5.35", "csstype": "^3.2.3" } }, "sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA=="], - "@vue/server-renderer": ["@vue/server-renderer@3.5.33", "", { "dependencies": { "@vue/compiler-ssr": "3.5.33", "@vue/shared": "3.5.33" }, "peerDependencies": { "vue": "3.5.33" } }, "sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw=="], + "@vue/server-renderer": ["@vue/server-renderer@3.5.35", "", { "dependencies": { "@vue/compiler-ssr": "3.5.35", "@vue/shared": "3.5.35" }, "peerDependencies": { "vue": "3.5.35" } }, "sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA=="], - "@vue/shared": ["@vue/shared@3.5.30", "", {}, "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ=="], + "@vue/shared": ["@vue/shared@3.5.35", "", {}, "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA=="], - "@vueuse/core": ["@vueuse/core@14.2.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ=="], + "@vueuse/core": ["@vueuse/core@14.3.0", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.3.0", "@vueuse/shared": "14.3.0" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw=="], - "@vueuse/integrations": ["@vueuse/integrations@14.2.1", "", { "dependencies": { "@vueuse/core": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA=="], + "@vueuse/integrations": ["@vueuse/integrations@14.3.0", "", { "dependencies": { "@vueuse/core": "14.3.0", "@vueuse/shared": "14.3.0" }, "peerDependencies": { "async-validator": "^4", "axios": "^1", "change-case": "^5", "drauu": "^0.4", "focus-trap": "^7 || ^8", "fuse.js": "^7", "idb-keyval": "^6", "jwt-decode": "^4", "nprogress": "^0.2", "qrcode": "^1.5", "sortablejs": "^1", "universal-cookie": "^7 || ^8", "vue": "^3.5.0" }, "optionalPeers": ["async-validator", "axios", "change-case", "drauu", "focus-trap", "fuse.js", "idb-keyval", "jwt-decode", "nprogress", "qrcode", "sortablejs", "universal-cookie"] }, "sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA=="], - "@vueuse/metadata": ["@vueuse/metadata@14.2.1", "", {}, "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw=="], + "@vueuse/metadata": ["@vueuse/metadata@14.3.0", "", {}, "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw=="], - "@vueuse/nuxt": ["@vueuse/nuxt@14.2.1", "", { "dependencies": { "@nuxt/kit": "^4.3.0", "@vueuse/core": "14.2.1", "@vueuse/metadata": "14.2.1", "local-pkg": "^1.1.2" }, "peerDependencies": { "nuxt": "^3.0.0 || ^4.0.0-0", "vue": "^3.5.0" } }, "sha512-DHgFMUpyH98M1YM9pbnRjFXMAMKEsHntJeOp8rOXs8QN2cvJBzEZ+TTWIBSPESNFOEwM02RA6BDsaTL35OK4Mw=="], + "@vueuse/nuxt": ["@vueuse/nuxt@14.3.0", "", { "dependencies": { "@nuxt/kit": "^4.4.4", "@vueuse/core": "14.3.0", "@vueuse/metadata": "14.3.0", "local-pkg": "^1.1.2" }, "peerDependencies": { "nuxt": "^3.0.0 || ^4.0.0-0", "vue": "^3.5.0" } }, "sha512-Uxaz/DsNa3i7vHTSjZin5R17R5pt+MtpAifsfqhV1qiBZti1wYv+/S3xysCMHuuiWyLIbbignKxIsgG9ul5kEA=="], - "@vueuse/shared": ["@vueuse/shared@14.2.1", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw=="], + "@vueuse/shared": ["@vueuse/shared@14.3.0", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg=="], "@xterm/addon-fit": ["@xterm/addon-fit@0.11.0", "", {}, "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g=="], @@ -857,11 +861,11 @@ "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], - "alien-signals": ["alien-signals@3.1.2", "", {}, "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw=="], + "alien-signals": ["alien-signals@3.2.1", "", {}, "sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g=="], - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="], @@ -877,17 +881,17 @@ "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], - "assjs": ["assjs@0.1.6", "", {}, "sha512-sHdLRIsZsXEdURGKlyJf+AbgoHhhOELh8Wl6K6TL/au9p4b4EQed62OPKayWFeFIj8W7I9OzvYtHV/+/MwDvkg=="], + "assjs": ["assjs@0.1.7", "", {}, "sha512-UOPgAfUloeiImBYO4PzqM7qn5CUVYqxldJDOQYAOZsoxxpH+9mwy26KK3zv6eg1oqT00zQniL+ylvT47mfz7ZQ=="], "ast-kit": ["ast-kit@2.2.0", "", { "dependencies": { "@babel/parser": "^7.28.5", "pathe": "^2.0.3" } }, "sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw=="], - "ast-walker-scope": ["ast-walker-scope@0.8.3", "", { "dependencies": { "@babel/parser": "^7.28.4", "ast-kit": "^2.1.3" } }, "sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg=="], + "ast-walker-scope": ["ast-walker-scope@0.9.0", "", { "dependencies": { "@babel/parser": "^7.29.2", "@babel/types": "^7.29.0", "ast-kit": "^2.2.0" } }, "sha512-IJdzo2vLiElBxKzwS36VsCue/62d6IdWjnPB2v3nuPKeWGynp6FF/CYoLa5i/3jXH/z97ZDdsXz6abpgM6w07A=="], "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], "async-sema": ["async-sema@3.1.1", "", {}, "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg=="], - "autoprefixer": ["autoprefixer@10.4.27", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001774", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA=="], + "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="], "b4a": ["b4a@1.7.4", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-u20zJLDaSWpxaZ+zaAkEIB2dZZ1o+DF4T/MRbmsvGp9nletHOyiai19OzX1fF8xUBYsO1bPXxODvcd0978pnug=="], @@ -919,7 +923,7 @@ "builtin-modules": ["builtin-modules@5.0.0", "", {}, "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg=="], - "bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], @@ -931,7 +935,7 @@ "caniuse-api": ["caniuse-api@3.0.0", "", { "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", "lodash.memoize": "^4.1.2", "lodash.uniq": "^4.5.0" } }, "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw=="], - "caniuse-lite": ["caniuse-lite@1.0.30001781", "", {}, "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001793", "", {}, "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA=="], "change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="], @@ -941,13 +945,11 @@ "ci-info": ["ci-info@4.4.0", "", {}, "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg=="], - "citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], + "citty": ["citty@0.2.2", "", {}, "sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w=="], "clean-regexp": ["clean-regexp@1.0.0", "", { "dependencies": { "escape-string-regexp": "^1.0.5" } }, "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw=="], - "clipboardy": ["clipboardy@4.0.0", "", { "dependencies": { "execa": "^8.0.1", "is-wsl": "^3.1.0", "is64bit": "^2.0.0" } }, "sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w=="], - - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], "cluster-key-slot": ["cluster-key-slot@1.1.2", "", {}, "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA=="], @@ -955,8 +957,6 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], - "colortranslator": ["colortranslator@5.0.0", "", {}, "sha512-Z3UPUKasUVDFCDYAjP2fmlVRf1jFHJv1izAmPjiOa0OCIw1W7iC8PZ2GsoDa8uZv+mKyWopxxStT9q05+27h7w=="], "commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], @@ -975,7 +975,7 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "cookie-es": ["cookie-es@2.0.0", "", {}, "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg=="], + "cookie-es": ["cookie-es@3.1.1", "", {}, "sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg=="], "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], @@ -987,7 +987,7 @@ "crc32-stream": ["crc32-stream@6.0.0", "", { "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^4.0.0" } }, "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g=="], - "croner": ["croner@9.1.0", "", {}, "sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g=="], + "croner": ["croner@10.0.1", "", {}, "sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g=="], "cronstrue": ["cronstrue@3.14.0", "", { "bin": { "cronstrue": "bin/cli.js" } }, "sha512-XnW4vuK/jPJjmTyDWiej1Zq36Od7ITwxaV2O1pzHZuyMVvdy7NAvyvIBzybt+idqSpfqYuoDG7uf/ocGtJVWxA=="], @@ -995,8 +995,6 @@ "crossws": ["crossws@0.3.5", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA=="], - "css-declaration-sorter": ["css-declaration-sorter@7.3.1", "", { "peerDependencies": { "postcss": "^8.0.9" } }, "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA=="], - "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], "css-tree": ["css-tree@3.1.0", "", { "dependencies": { "mdn-data": "2.12.2", "source-map-js": "^1.0.1" } }, "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w=="], @@ -1005,11 +1003,11 @@ "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], - "cssnano": ["cssnano@7.1.3", "", { "dependencies": { "cssnano-preset-default": "^7.0.11", "lilconfig": "^3.1.3" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-mLFHQAzyapMVFLiJIn7Ef4C2UCEvtlTlbyILR6B5ZsUAV3D/Pa761R5uC1YPhyBkRd3eqaDm2ncaNrD7R4mTRg=="], + "cssnano": ["cssnano@8.0.1", "", { "dependencies": { "cssnano-preset-default": "^8.0.1", "lilconfig": "^3.1.3" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-oSiOnPQNNYjusTUlYJiE6xvFQG4don3N0QavaoV1BxIsC1zjvxOwikXlR7lG1EVmZNDDaJkHbQx1VRB8kaoMHA=="], - "cssnano-preset-default": ["cssnano-preset-default@7.0.11", "", { "dependencies": { "browserslist": "^4.28.1", "css-declaration-sorter": "^7.2.0", "cssnano-utils": "^5.0.1", "postcss-calc": "^10.1.1", "postcss-colormin": "^7.0.6", "postcss-convert-values": "^7.0.9", "postcss-discard-comments": "^7.0.6", "postcss-discard-duplicates": "^7.0.2", "postcss-discard-empty": "^7.0.1", "postcss-discard-overridden": "^7.0.1", "postcss-merge-longhand": "^7.0.5", "postcss-merge-rules": "^7.0.8", "postcss-minify-font-values": "^7.0.1", "postcss-minify-gradients": "^7.0.1", "postcss-minify-params": "^7.0.6", "postcss-minify-selectors": "^7.0.6", "postcss-normalize-charset": "^7.0.1", "postcss-normalize-display-values": "^7.0.1", "postcss-normalize-positions": "^7.0.1", "postcss-normalize-repeat-style": "^7.0.1", "postcss-normalize-string": "^7.0.1", "postcss-normalize-timing-functions": "^7.0.1", "postcss-normalize-unicode": "^7.0.6", "postcss-normalize-url": "^7.0.1", "postcss-normalize-whitespace": "^7.0.1", "postcss-ordered-values": "^7.0.2", "postcss-reduce-initial": "^7.0.6", "postcss-reduce-transforms": "^7.0.1", "postcss-svgo": "^7.1.1", "postcss-unique-selectors": "^7.0.5" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-waWlAMuCakP7//UCY+JPrQS1z0OSLeOXk2sKWJximKWGupVxre50bzPlvpbUwZIDylhf/ptf0Pk+Yf7C+hoa3g=="], + "cssnano-preset-default": ["cssnano-preset-default@8.0.1", "", { "dependencies": { "browserslist": "^4.28.2", "cssnano-utils": "^6.0.0", "postcss-calc": "^10.1.1", "postcss-colormin": "^8.0.0", "postcss-convert-values": "^8.0.0", "postcss-discard-comments": "^8.0.0", "postcss-discard-duplicates": "^8.0.0", "postcss-discard-empty": "^8.0.0", "postcss-discard-overridden": "^8.0.0", "postcss-merge-longhand": "^8.0.0", "postcss-merge-rules": "^8.0.0", "postcss-minify-font-values": "^8.0.0", "postcss-minify-gradients": "^8.0.0", "postcss-minify-params": "^8.0.0", "postcss-minify-selectors": "^8.0.1", "postcss-normalize-charset": "^8.0.0", "postcss-normalize-display-values": "^8.0.0", "postcss-normalize-positions": "^8.0.0", "postcss-normalize-repeat-style": "^8.0.0", "postcss-normalize-string": "^8.0.0", "postcss-normalize-timing-functions": "^8.0.0", "postcss-normalize-unicode": "^8.0.0", "postcss-normalize-url": "^8.0.0", "postcss-normalize-whitespace": "^8.0.0", "postcss-ordered-values": "^8.0.0", "postcss-reduce-initial": "^8.0.0", "postcss-reduce-transforms": "^8.0.0", "postcss-svgo": "^8.0.0", "postcss-unique-selectors": "^8.0.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-OTdKeYMlvQ8KBgyej5ysktnWJoeyo7rGrVnm+bdpIHGvxhbTGPsOkB+7T1EdTuX00dGlQQb2UEbSPB1OpMXULw=="], - "cssnano-utils": ["cssnano-utils@5.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg=="], + "cssnano-utils": ["cssnano-utils@6.0.0", "", { "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-ztS9W/+uaDn+bkYmDhs+GdMveHJ3CL8IPNHpRqDUQXv5GJOTQAJjV1XUOInr9esLXSabQV1pLRZlJpyUwEqDyQ=="], "csso": ["csso@5.0.5", "", { "dependencies": { "css-tree": "~2.2.0" } }, "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ=="], @@ -1039,7 +1037,7 @@ "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - "devalue": ["devalue@5.6.4", "", {}, "sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA=="], + "devalue": ["devalue@5.8.1", "", {}, "sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw=="], "diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="], @@ -1081,11 +1079,11 @@ "embla-carousel-wheel-gestures": ["embla-carousel-wheel-gestures@8.1.0", "", { "dependencies": { "wheel-gestures": "^2.2.5" }, "peerDependencies": { "embla-carousel": "^8.0.0 || ~8.0.0-rc03" } }, "sha512-J68jkYrxbWDmXOm2n2YHl+uMEXzkGSKjWmjaEgL9xVvPb3HqVmg6rJSKfI3sqIDVvm7mkeTy87wtG/5263XqHQ=="], - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], + "enhanced-resolve": ["enhanced-resolve@5.22.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-6QEuw3zoX1SJQc7b87aBXke/no+mG2bTBgw29gWMQonLmpEkWoCAVkl+M49e48AZlWzxiDzDZzYdp6kobcyLww=="], "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], @@ -1103,7 +1101,7 @@ "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], - "eslint": ["eslint@10.2.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.5.5", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q=="], + "eslint": ["eslint@10.4.1", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.6.0", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.2", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-AyIKhnOBuOAdueD7RB3xB+YeAWScb9jHsJBgH2Hcde8InP5JYhqrRR6iTMHyTEwgENK54Cp44e4v8BwNhsuHuw=="], "eslint-config-flat-gitignore": ["eslint-config-flat-gitignore@2.2.1", "", { "dependencies": { "@eslint/compat": "^2.0.2" }, "peerDependencies": { "eslint": "^9.5.0 || ^10.0.0" } }, "sha512-wA5EqN0era7/7Gt5Botlsfin/UNY0etJSEeBgbUlFLFrBi47rAN//+39fI7fpYcl8RENutlFtvp/zRa/M/pZNg=="], @@ -1169,6 +1167,12 @@ "fast-npm-meta": ["fast-npm-meta@1.4.2", "", { "bin": { "fast-npm-meta": "dist/cli.mjs" } }, "sha512-XXyd9d3ie/JeIIjm6WeKalvapGGFI4ShAjPJM78vgUFYzoEsuNSjvvVTuht0XZcwbVdOnEEGzhxwguRbxkIcDg=="], + "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], + + "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], + + "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], @@ -1213,13 +1217,15 @@ "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], + "get-port-please": ["get-port-please@3.2.0", "", {}, "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A=="], "get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], "get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="], - "giget": ["giget@3.1.2", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-T2qUpKBHeUTwHcIhydgnJzhL0Hj785ms+JkxaaWQH9SDM/llXeewnOkfJcFShAHjWI+26hOChwUfCoupaXLm8g=="], + "giget": ["giget@3.2.0", "", { "bin": { "giget": "dist/cli.mjs" } }, "sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A=="], "github-slugger": ["github-slugger@2.0.0", "", {}, "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw=="], @@ -1231,7 +1237,7 @@ "globals": ["globals@17.3.0", "", {}, "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw=="], - "globby": ["globby@16.1.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" } }, "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ=="], + "globby": ["globby@16.2.0", "", { "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "fast-glob": "^3.3.3", "ignore": "^7.0.5", "is-path-inside": "^4.0.0", "slash": "^5.1.0", "unicorn-magic": "^0.4.0" } }, "sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q=="], "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], @@ -1255,7 +1261,7 @@ "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - "httpxy": ["httpxy@0.1.7", "", {}, "sha512-pXNx8gnANKAndgga5ahefxc++tJvNL87CXoRwxn1cJE2ZkWEojF3tNfQIEhZX/vfpt+wzeAzpUI4qkediX1MLQ=="], + "httpxy": ["httpxy@0.5.3", "", {}, "sha512-SMS9V6Sn7VWaS11lYhoAr0ceoaiolTWf4jYdJn0NJhCdKMu9R2H9Fh0LBDWBHQF6HRLI1PmaePYsjanSpE5PEw=="], "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], @@ -1265,6 +1271,8 @@ "image-meta": ["image-meta@0.2.2", "", {}, "sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA=="], + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + "impound": ["impound@1.1.5", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.31", "es-module-lexer": "^2.0.0", "pathe": "^2.0.3", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1" } }, "sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA=="], "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], @@ -1283,7 +1291,7 @@ "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], - "is-docker": ["is-docker@2.2.1", "", { "bin": { "is-docker": "cli.js" } }, "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="], + "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], @@ -1291,6 +1299,8 @@ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + "is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="], + "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], "is-installed-globally": ["is-installed-globally@1.0.0", "", { "dependencies": { "global-directory": "^4.0.1", "is-path-inside": "^4.0.0" } }, "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ=="], @@ -1309,8 +1319,6 @@ "is-wsl": ["is-wsl@3.1.1", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw=="], - "is64bit": ["is64bit@2.0.0", "", { "dependencies": { "system-architecture": "^0.1.0" } }, "sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw=="], - "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], @@ -1319,7 +1327,7 @@ "jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="], - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], "js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], @@ -1381,9 +1389,9 @@ "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], - "linkifyjs": ["linkifyjs@4.3.2", "", {}, "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA=="], + "linkifyjs": ["linkifyjs@4.3.3", "", {}, "sha512-P8aEP5U/D1/IlTY2OeYsErdwh9bGuLE30NcXtKEjgdHcahveQoQwM2yZNsioQHsWFz0P7KKudisbrzCgR0sDHg=="], - "listhen": ["listhen@1.9.0", "", { "dependencies": { "@parcel/watcher": "^2.4.1", "@parcel/watcher-wasm": "^2.4.1", "citty": "^0.1.6", "clipboardy": "^4.0.0", "consola": "^3.2.3", "crossws": ">=0.2.0 <0.4.0", "defu": "^6.1.4", "get-port-please": "^3.1.2", "h3": "^1.12.0", "http-shutdown": "^1.2.2", "jiti": "^2.1.2", "mlly": "^1.7.1", "node-forge": "^1.3.1", "pathe": "^1.1.2", "std-env": "^3.7.0", "ufo": "^1.5.4", "untun": "^0.1.3", "uqr": "^0.1.2" }, "bin": { "listen": "bin/listhen.mjs", "listhen": "bin/listhen.mjs" } }, "sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg=="], + "listhen": ["listhen@1.10.0", "", { "dependencies": { "@parcel/watcher": "^2.5.6", "@parcel/watcher-wasm": "^2.5.6", "citty": "^0.2.2", "consola": "^3.4.2", "crossws": ">=0.2.0 <0.5.0", "defu": "^6.1.7", "get-port-please": "^3.2.0", "h3": "^1.15.11", "http-shutdown": "^1.2.2", "jiti": "^2.6.1", "mlly": "^1.8.2", "node-forge": "^1.4.0", "pathe": "^2.0.3", "std-env": "^4.1.0", "tinyclip": "^0.1.12", "ufo": "^1.6.4", "untun": "^0.1.3", "uqr": "^0.1.3" }, "bin": { "listen": "bin/listhen.mjs", "listhen": "bin/listhen.mjs" } }, "sha512-kfz4C0OrC6IpaVMtYDJtf6PFjurxe9NBBoDAh/o2p587INryFOO4DQ9OetbCdDrWFt1m1CJKvYrzkGsuPHw8nQ=="], "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], @@ -1411,7 +1419,7 @@ "magicast": ["magicast@0.5.2", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "source-map-js": "^1.2.1" } }, "sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ=="], - "marked": ["marked@18.0.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-NsmlUYBS/Zg57rgDWMYdnre6OTj4e+qq/JS2ot3KrYLSoHLw+sDu0Nm1ZGpRgYAq6c+b1ekaY5NzVchMCQnzcg=="], + "marked": ["marked@18.0.4", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-c/BTaKzg0G6ezQx97DAkYU7k0HM6ys0FqYeKBL6hlBByZwy+ycA1+f0vDdjMHKKeEjdgkx0GOv9Il6D+85cOqA=="], "marked-alert": ["marked-alert@2.1.2", "", { "peerDependencies": { "marked": ">=7.0.0" } }, "sha512-EFNRZ08d8L/iEIPLTlQMDjvwIsj03gxWCczYTht6DCiHJIZhMk4NK5gtPY9UqAYb09eV5VGT+jD4lp396E0I+w=="], @@ -1461,7 +1469,7 @@ "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], "nanotar": ["nanotar@0.3.0", "", {}, "sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg=="], @@ -1469,7 +1477,7 @@ "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="], - "nitropack": ["nitropack@2.13.1", "", { "dependencies": { "@cloudflare/kv-asset-handler": "^0.4.2", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^0.4.4", "@vercel/nft": "^1.2.0", "archiver": "^7.0.1", "c12": "^3.3.3", "chokidar": "^5.0.0", "citty": "^0.1.6", "compatx": "^0.2.0", "confbox": "^0.2.2", "consola": "^3.4.2", "cookie-es": "^2.0.0", "croner": "^9.1.0", "crossws": "^0.3.5", "db0": "^0.3.4", "defu": "^6.1.4", "destr": "^2.0.5", "dot-prop": "^10.1.0", "esbuild": "^0.27.2", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "exsolve": "^1.0.8", "globby": "^16.1.0", "gzip-size": "^7.0.0", "h3": "^1.15.5", "hookable": "^5.5.3", "httpxy": "^0.1.7", "ioredis": "^5.9.1", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.3.0", "listhen": "^1.9.0", "magic-string": "^0.30.21", "magicast": "^0.5.1", "mime": "^4.1.0", "mlly": "^1.8.0", "node-fetch-native": "^1.6.7", "node-mock-http": "^1.0.4", "ofetch": "^1.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.0.0", "pkg-types": "^2.3.0", "pretty-bytes": "^7.1.0", "radix3": "^1.1.2", "rollup": "^4.55.1", "rollup-plugin-visualizer": "^6.0.5", "scule": "^1.3.0", "semver": "^7.7.3", "serve-placeholder": "^2.0.2", "serve-static": "^2.2.1", "source-map": "^0.7.6", "std-env": "^3.10.0", "ufo": "^1.6.3", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.5.0", "unenv": "^2.0.0-rc.24", "unimport": "^5.6.0", "unplugin-utils": "^0.3.1", "unstorage": "^1.17.4", "untyped": "^2.0.0", "unwasm": "^0.5.3", "youch": "^4.1.0-beta.13", "youch-core": "^0.3.3" }, "peerDependencies": { "xml2js": "^0.6.2" }, "optionalPeers": ["xml2js"], "bin": { "nitro": "dist/cli/index.mjs", "nitropack": "dist/cli/index.mjs" } }, "sha512-2dDj89C4wC2uzG7guF3CnyG+zwkZosPEp7FFBGHB3AJo11AywOolWhyQJFHDzve8COvGxJaqscye9wW2IrUsNw=="], + "nitropack": ["nitropack@2.13.4", "", { "dependencies": { "@cloudflare/kv-asset-handler": "^0.4.2", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.2", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^1.0.0", "@vercel/nft": "^1.5.0", "archiver": "^7.0.1", "c12": "^3.3.4", "chokidar": "^5.0.0", "citty": "^0.2.2", "compatx": "^0.2.0", "confbox": "^0.2.4", "consola": "^3.4.2", "cookie-es": "^2.0.1", "croner": "^10.0.1", "crossws": "^0.3.5", "db0": "^0.3.4", "defu": "^6.1.7", "destr": "^2.0.5", "dot-prop": "^10.1.0", "esbuild": "^0.28.0", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "exsolve": "^1.0.8", "globby": "^16.2.0", "gzip-size": "^7.0.0", "h3": "^1.15.11", "hookable": "^5.5.3", "httpxy": "^0.5.1", "ioredis": "^5.10.1", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.3.0", "listhen": "^1.9.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mime": "^4.1.0", "mlly": "^1.8.2", "node-fetch-native": "^1.6.7", "node-mock-http": "^1.0.4", "ofetch": "^1.5.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.1", "pretty-bytes": "^7.1.0", "radix3": "^1.1.2", "rollup": "^4.60.2", "rollup-plugin-visualizer": "^7.0.1", "scule": "^1.3.0", "semver": "^7.7.4", "serve-placeholder": "^2.0.2", "serve-static": "^2.2.1", "source-map": "^0.7.6", "std-env": "^4.1.0", "ufo": "^1.6.4", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.5.0", "unenv": "2.0.0-rc.24", "unimport": "^6.2.0", "unplugin-utils": "^0.3.1", "unstorage": "^1.17.5", "untyped": "^2.0.0", "unwasm": "^0.5.3", "youch": "^4.1.1", "youch-core": "^0.3.3" }, "peerDependencies": { "xml2js": "^0.6.2" }, "optionalPeers": ["xml2js"], "bin": { "nitro": "dist/cli/index.mjs", "nitropack": "dist/cli/index.mjs" } }, "sha512-tX7bT6zxNeMwkc6hxHiZeUoTOjVrcjoh1Z3cmxOlodIqjl4HISgqfGOmkWSayky3Nv9Z5+KQH52F8nmXJY5AAA=="], "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], @@ -1477,7 +1485,7 @@ "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], - "node-forge": ["node-forge@1.3.3", "", {}, "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg=="], + "node-forge": ["node-forge@1.4.0", "", {}, "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ=="], "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], @@ -1493,9 +1501,9 @@ "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], - "nuxt": ["nuxt@4.4.2", "", { "dependencies": { "@dxup/nuxt": "^0.4.0", "@nuxt/cli": "^3.34.0", "@nuxt/devtools": "^3.2.3", "@nuxt/kit": "4.4.2", "@nuxt/nitro-server": "4.4.2", "@nuxt/schema": "4.4.2", "@nuxt/telemetry": "^2.7.0", "@nuxt/vite-builder": "4.4.2", "@unhead/vue": "^2.1.12", "@vue/shared": "^3.5.30", "c12": "^3.3.3", "chokidar": "^5.0.0", "compatx": "^0.2.0", "consola": "^3.4.2", "cookie-es": "^2.0.0", "defu": "^6.1.4", "devalue": "^5.6.3", "errx": "^0.1.0", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "hookable": "^6.0.1", "ignore": "^7.0.5", "impound": "^1.1.5", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "mlly": "^1.8.1", "nanotar": "^0.3.0", "nypm": "^0.6.5", "ofetch": "^1.5.1", "ohash": "^2.0.11", "on-change": "^6.0.2", "oxc-minify": "^0.117.0", "oxc-parser": "^0.117.0", "oxc-transform": "^0.117.0", "oxc-walker": "^0.7.0", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "picomatch": "^4.0.3", "pkg-types": "^2.3.0", "rou3": "^0.8.1", "scule": "^1.3.0", "semver": "^7.7.4", "std-env": "^4.0.0", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.5.0", "unimport": "^6.0.1", "unplugin": "^3.0.0", "unrouting": "^0.1.5", "untyped": "^2.0.0", "vue": "^3.5.30", "vue-router": "^5.0.3" }, "peerDependencies": { "@parcel/watcher": "^2.1.0", "@types/node": ">=18.12.0" }, "optionalPeers": ["@parcel/watcher", "@types/node"], "bin": { "nuxi": "bin/nuxt.mjs", "nuxt": "bin/nuxt.mjs" } }, "sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q=="], + "nuxt": ["nuxt@4.4.6", "", { "dependencies": { "@dxup/nuxt": "^0.4.1", "@nuxt/cli": "^3.35.2", "@nuxt/devtools": "^3.2.4", "@nuxt/kit": "4.4.6", "@nuxt/nitro-server": "4.4.6", "@nuxt/schema": "4.4.6", "@nuxt/telemetry": "^2.8.0", "@nuxt/vite-builder": "4.4.6", "@unhead/vue": "^2.1.15", "@vue/shared": "^3.5.34", "chokidar": "^5.0.0", "compatx": "^0.2.0", "consola": "^3.4.2", "cookie-es": "^3.1.1", "defu": "^6.1.7", "devalue": "^5.8.1", "errx": "^0.1.0", "escape-string-regexp": "^5.0.0", "exsolve": "^1.0.8", "hookable": "^6.1.1", "ignore": "^7.0.5", "impound": "^1.1.5", "jiti": "^2.7.0", "klona": "^2.0.6", "knitwork": "^1.3.0", "magic-string": "^0.30.21", "mlly": "^1.8.2", "nanotar": "^0.3.0", "nypm": "^0.6.6", "ofetch": "^1.5.1", "ohash": "^2.0.11", "on-change": "^6.0.2", "oxc-minify": "^0.131.0", "oxc-parser": "^0.131.0", "oxc-transform": "^0.131.0", "oxc-walker": "^1.0.0", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "picomatch": "^4.0.4", "pkg-types": "^2.3.1", "rou3": "^0.8.1", "scule": "^1.3.0", "semver": "^7.8.0", "std-env": "^4.1.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "ultrahtml": "^1.6.0", "uncrypto": "^0.1.3", "unctx": "^2.5.0", "unimport": "^6.3.0", "unplugin": "^3.0.0", "unrouting": "^0.1.7", "untyped": "^2.0.0", "vue": "^3.5.34", "vue-router": "^5.0.7" }, "peerDependencies": { "@parcel/watcher": "^2.1.0", "@types/node": ">=18.12.0" }, "optionalPeers": ["@parcel/watcher", "@types/node"], "bin": { "nuxi": "bin/nuxt.mjs", "nuxt": "bin/nuxt.mjs" } }, "sha512-QAApJpAx3yGf3pYudALkInuBfv0WkHCiol6ntTvh/lwKwYrcU/MRI1nLNGt0QNyUCgBWdOQukd3z67VJ2xGd0Q=="], - "nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + "nypm": ["nypm@0.6.6", "", { "dependencies": { "citty": "^0.2.2", "pathe": "^2.0.3", "tinyexec": "^1.1.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q=="], "object-deep-merge": ["object-deep-merge@2.0.0", "", {}, "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg=="], @@ -1517,13 +1525,13 @@ "orderedmap": ["orderedmap@2.1.1", "", {}, "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g=="], - "oxc-minify": ["oxc-minify@0.117.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm-eabi": "0.117.0", "@oxc-minify/binding-android-arm64": "0.117.0", "@oxc-minify/binding-darwin-arm64": "0.117.0", "@oxc-minify/binding-darwin-x64": "0.117.0", "@oxc-minify/binding-freebsd-x64": "0.117.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.117.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.117.0", "@oxc-minify/binding-linux-arm64-gnu": "0.117.0", "@oxc-minify/binding-linux-arm64-musl": "0.117.0", "@oxc-minify/binding-linux-ppc64-gnu": "0.117.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.117.0", "@oxc-minify/binding-linux-riscv64-musl": "0.117.0", "@oxc-minify/binding-linux-s390x-gnu": "0.117.0", "@oxc-minify/binding-linux-x64-gnu": "0.117.0", "@oxc-minify/binding-linux-x64-musl": "0.117.0", "@oxc-minify/binding-openharmony-arm64": "0.117.0", "@oxc-minify/binding-wasm32-wasi": "0.117.0", "@oxc-minify/binding-win32-arm64-msvc": "0.117.0", "@oxc-minify/binding-win32-ia32-msvc": "0.117.0", "@oxc-minify/binding-win32-x64-msvc": "0.117.0" } }, "sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw=="], + "oxc-minify": ["oxc-minify@0.131.0", "", { "optionalDependencies": { "@oxc-minify/binding-android-arm-eabi": "0.131.0", "@oxc-minify/binding-android-arm64": "0.131.0", "@oxc-minify/binding-darwin-arm64": "0.131.0", "@oxc-minify/binding-darwin-x64": "0.131.0", "@oxc-minify/binding-freebsd-x64": "0.131.0", "@oxc-minify/binding-linux-arm-gnueabihf": "0.131.0", "@oxc-minify/binding-linux-arm-musleabihf": "0.131.0", "@oxc-minify/binding-linux-arm64-gnu": "0.131.0", "@oxc-minify/binding-linux-arm64-musl": "0.131.0", "@oxc-minify/binding-linux-ppc64-gnu": "0.131.0", "@oxc-minify/binding-linux-riscv64-gnu": "0.131.0", "@oxc-minify/binding-linux-riscv64-musl": "0.131.0", "@oxc-minify/binding-linux-s390x-gnu": "0.131.0", "@oxc-minify/binding-linux-x64-gnu": "0.131.0", "@oxc-minify/binding-linux-x64-musl": "0.131.0", "@oxc-minify/binding-openharmony-arm64": "0.131.0", "@oxc-minify/binding-wasm32-wasi": "0.131.0", "@oxc-minify/binding-win32-arm64-msvc": "0.131.0", "@oxc-minify/binding-win32-ia32-msvc": "0.131.0", "@oxc-minify/binding-win32-x64-msvc": "0.131.0" } }, "sha512-Ch0sBbrqZpeNZUMhVDbU2yrTWTVrUT/MkXb9E2DAc+hbhxbbO8D/XklUtfPP86/iqrkvl178+YQvh5u8Of1mUg=="], - "oxc-parser": ["oxc-parser@0.117.0", "", { "dependencies": { "@oxc-project/types": "^0.117.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm-eabi": "0.117.0", "@oxc-parser/binding-android-arm64": "0.117.0", "@oxc-parser/binding-darwin-arm64": "0.117.0", "@oxc-parser/binding-darwin-x64": "0.117.0", "@oxc-parser/binding-freebsd-x64": "0.117.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.117.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.117.0", "@oxc-parser/binding-linux-arm64-gnu": "0.117.0", "@oxc-parser/binding-linux-arm64-musl": "0.117.0", "@oxc-parser/binding-linux-ppc64-gnu": "0.117.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.117.0", "@oxc-parser/binding-linux-riscv64-musl": "0.117.0", "@oxc-parser/binding-linux-s390x-gnu": "0.117.0", "@oxc-parser/binding-linux-x64-gnu": "0.117.0", "@oxc-parser/binding-linux-x64-musl": "0.117.0", "@oxc-parser/binding-openharmony-arm64": "0.117.0", "@oxc-parser/binding-wasm32-wasi": "0.117.0", "@oxc-parser/binding-win32-arm64-msvc": "0.117.0", "@oxc-parser/binding-win32-ia32-msvc": "0.117.0", "@oxc-parser/binding-win32-x64-msvc": "0.117.0" } }, "sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ=="], + "oxc-parser": ["oxc-parser@0.131.0", "", { "dependencies": { "@oxc-project/types": "^0.131.0" }, "optionalDependencies": { "@oxc-parser/binding-android-arm-eabi": "0.131.0", "@oxc-parser/binding-android-arm64": "0.131.0", "@oxc-parser/binding-darwin-arm64": "0.131.0", "@oxc-parser/binding-darwin-x64": "0.131.0", "@oxc-parser/binding-freebsd-x64": "0.131.0", "@oxc-parser/binding-linux-arm-gnueabihf": "0.131.0", "@oxc-parser/binding-linux-arm-musleabihf": "0.131.0", "@oxc-parser/binding-linux-arm64-gnu": "0.131.0", "@oxc-parser/binding-linux-arm64-musl": "0.131.0", "@oxc-parser/binding-linux-ppc64-gnu": "0.131.0", "@oxc-parser/binding-linux-riscv64-gnu": "0.131.0", "@oxc-parser/binding-linux-riscv64-musl": "0.131.0", "@oxc-parser/binding-linux-s390x-gnu": "0.131.0", "@oxc-parser/binding-linux-x64-gnu": "0.131.0", "@oxc-parser/binding-linux-x64-musl": "0.131.0", "@oxc-parser/binding-openharmony-arm64": "0.131.0", "@oxc-parser/binding-wasm32-wasi": "0.131.0", "@oxc-parser/binding-win32-arm64-msvc": "0.131.0", "@oxc-parser/binding-win32-ia32-msvc": "0.131.0", "@oxc-parser/binding-win32-x64-msvc": "0.131.0" } }, "sha512-SJ3/7ZPbgie8dr5Z9BI/M51zZbpXba+hRSG0MDzVwMW5CRQg2fjYE0jHGlLX4eeiibGgC/mzoDFKSDHwVZEHRQ=="], - "oxc-transform": ["oxc-transform@0.117.0", "", { "optionalDependencies": { "@oxc-transform/binding-android-arm-eabi": "0.117.0", "@oxc-transform/binding-android-arm64": "0.117.0", "@oxc-transform/binding-darwin-arm64": "0.117.0", "@oxc-transform/binding-darwin-x64": "0.117.0", "@oxc-transform/binding-freebsd-x64": "0.117.0", "@oxc-transform/binding-linux-arm-gnueabihf": "0.117.0", "@oxc-transform/binding-linux-arm-musleabihf": "0.117.0", "@oxc-transform/binding-linux-arm64-gnu": "0.117.0", "@oxc-transform/binding-linux-arm64-musl": "0.117.0", "@oxc-transform/binding-linux-ppc64-gnu": "0.117.0", "@oxc-transform/binding-linux-riscv64-gnu": "0.117.0", "@oxc-transform/binding-linux-riscv64-musl": "0.117.0", "@oxc-transform/binding-linux-s390x-gnu": "0.117.0", "@oxc-transform/binding-linux-x64-gnu": "0.117.0", "@oxc-transform/binding-linux-x64-musl": "0.117.0", "@oxc-transform/binding-openharmony-arm64": "0.117.0", "@oxc-transform/binding-wasm32-wasi": "0.117.0", "@oxc-transform/binding-win32-arm64-msvc": "0.117.0", "@oxc-transform/binding-win32-ia32-msvc": "0.117.0", "@oxc-transform/binding-win32-x64-msvc": "0.117.0" } }, "sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw=="], + "oxc-transform": ["oxc-transform@0.131.0", "", { "optionalDependencies": { "@oxc-transform/binding-android-arm-eabi": "0.131.0", "@oxc-transform/binding-android-arm64": "0.131.0", "@oxc-transform/binding-darwin-arm64": "0.131.0", "@oxc-transform/binding-darwin-x64": "0.131.0", "@oxc-transform/binding-freebsd-x64": "0.131.0", "@oxc-transform/binding-linux-arm-gnueabihf": "0.131.0", "@oxc-transform/binding-linux-arm-musleabihf": "0.131.0", "@oxc-transform/binding-linux-arm64-gnu": "0.131.0", "@oxc-transform/binding-linux-arm64-musl": "0.131.0", "@oxc-transform/binding-linux-ppc64-gnu": "0.131.0", "@oxc-transform/binding-linux-riscv64-gnu": "0.131.0", "@oxc-transform/binding-linux-riscv64-musl": "0.131.0", "@oxc-transform/binding-linux-s390x-gnu": "0.131.0", "@oxc-transform/binding-linux-x64-gnu": "0.131.0", "@oxc-transform/binding-linux-x64-musl": "0.131.0", "@oxc-transform/binding-openharmony-arm64": "0.131.0", "@oxc-transform/binding-wasm32-wasi": "0.131.0", "@oxc-transform/binding-win32-arm64-msvc": "0.131.0", "@oxc-transform/binding-win32-ia32-msvc": "0.131.0", "@oxc-transform/binding-win32-x64-msvc": "0.131.0" } }, "sha512-ml0/elXPNnDnuHo3VHmEMN2fnybmKx7YL+0E+gMQ0fuHRZHXYJzF6YJ01KsCWg6FXY6pbZcjm7DC3xwGHnB/BA=="], - "oxc-walker": ["oxc-walker@0.7.0", "", { "dependencies": { "magic-regexp": "^0.10.0" }, "peerDependencies": { "oxc-parser": ">=0.98.0" } }, "sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A=="], + "oxc-walker": ["oxc-walker@1.0.0", "", { "dependencies": { "magic-regexp": "^0.11.0" }, "peerDependencies": { "oxc-parser": ">=0.98.0", "rolldown": ">=1.0.0" }, "optionalPeers": ["oxc-parser", "rolldown"] }, "sha512-eMsHflAGfOskpWxtp9xP/f5b96XLEU8ifTd2gOOCkdux9HMxKGy5S1ru0Gh1B3aPu+YbfmWUUVkcb7MrZz3XyQ=="], "oxfmt": ["oxfmt@0.47.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.47.0", "@oxfmt/binding-android-arm64": "0.47.0", "@oxfmt/binding-darwin-arm64": "0.47.0", "@oxfmt/binding-darwin-x64": "0.47.0", "@oxfmt/binding-freebsd-x64": "0.47.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.47.0", "@oxfmt/binding-linux-arm-musleabihf": "0.47.0", "@oxfmt/binding-linux-arm64-gnu": "0.47.0", "@oxfmt/binding-linux-arm64-musl": "0.47.0", "@oxfmt/binding-linux-ppc64-gnu": "0.47.0", "@oxfmt/binding-linux-riscv64-gnu": "0.47.0", "@oxfmt/binding-linux-riscv64-musl": "0.47.0", "@oxfmt/binding-linux-s390x-gnu": "0.47.0", "@oxfmt/binding-linux-x64-gnu": "0.47.0", "@oxfmt/binding-linux-x64-musl": "0.47.0", "@oxfmt/binding-openharmony-arm64": "0.47.0", "@oxfmt/binding-win32-arm64-msvc": "0.47.0", "@oxfmt/binding-win32-ia32-msvc": "0.47.0", "@oxfmt/binding-win32-x64-msvc": "0.47.0" }, "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-OFbkbzxKCpooQEnRmpTDnuwTX8KHXzZTQ4Df/hz85fpS67Pl+lxPEFvUtin56HIIS0B1k4X8oIzTXRZPufA2CA=="], @@ -1557,74 +1565,76 @@ "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], "pinia": ["pinia@3.0.4", "", { "dependencies": { "@vue/devtools-api": "^7.7.7" }, "peerDependencies": { "typescript": ">=4.5.0", "vue": "^3.5.11" }, "optionalPeers": ["typescript"] }, "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw=="], - "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "pkg-types": ["pkg-types@2.3.1", "", { "dependencies": { "confbox": "^0.2.4", "exsolve": "^1.0.8", "pathe": "^2.0.3" } }, "sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg=="], "pluralize": ["pluralize@8.0.0", "", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], - "postcss": ["postcss@8.5.12", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA=="], + "postcss": ["postcss@8.5.15", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A=="], "postcss-calc": ["postcss-calc@10.1.1", "", { "dependencies": { "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.38" } }, "sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw=="], - "postcss-colormin": ["postcss-colormin@7.0.6", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-api": "^3.0.0", "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-oXM2mdx6IBTRm39797QguYzVEWzbdlFiMNfq88fCCN1Wepw3CYmJ/1/Ifa/KjWo+j5ZURDl2NTldLJIw51IeNQ=="], + "postcss-colormin": ["postcss-colormin@8.0.0", "", { "dependencies": { "@colordx/core": "^5.4.3", "browserslist": "^4.28.2", "caniuse-api": "^3.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-KKwMmsSgsmdYXqrjQeqL3tnuIFtctiR1GEMHdjNpDpz/TCRkkkok2mMcreK2zVV3l7POWOmAkR2xYHUpRUK1DA=="], - "postcss-convert-values": ["postcss-convert-values@7.0.9", "", { "dependencies": { "browserslist": "^4.28.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg=="], + "postcss-convert-values": ["postcss-convert-values@8.0.0", "", { "dependencies": { "browserslist": "^4.28.2", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-Ohtj3rNZWawTRePv5NCHTy8VJSdJ/G/uKuxcxJreOMichuqcT6uEl2TAnopVeJCJ/c13jaSqg7m63yFLM5zBsA=="], - "postcss-discard-comments": ["postcss-discard-comments@7.0.6", "", { "dependencies": { "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw=="], + "postcss-discard-comments": ["postcss-discard-comments@8.0.0", "", { "dependencies": { "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-zGpvVLj2sbagEp+BTVETvAfkZdGVA6rALNujDK/WTIjdf1/rQOxOG8BBzkI8UQgnw8SkL6xffAfbtGMHFypadw=="], - "postcss-discard-duplicates": ["postcss-discard-duplicates@7.0.2", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w=="], + "postcss-discard-duplicates": ["postcss-discard-duplicates@8.0.0", "", { "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-zjRyYmNGI3PTipKBBtCgExlmZXQn49KvKoaiNnR2g+iXxeNk7GY5Js2ULtZXPrCYeqjPagrzKIBNcBocvXCR7g=="], - "postcss-discard-empty": ["postcss-discard-empty@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg=="], + "postcss-discard-empty": ["postcss-discard-empty@8.0.0", "", { "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-kxPJg6EqahbBvm+l7hpYYCtpsv8dlz7Tv6wJXUXZaeuY0WGS61DxfGdZR4uVB/Cx+yi3iOHQVSqpSHKMFaBg6Q=="], - "postcss-discard-overridden": ["postcss-discard-overridden@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg=="], + "postcss-discard-overridden": ["postcss-discard-overridden@8.0.0", "", { "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-sW2OWH3l9p0FmBSVr228uztFseqroZxwgD7SGF0Ks0dRPDttSo3P8FK5ZBLtWBH2A5+chpB0J2fB/T8heKHLBw=="], - "postcss-merge-longhand": ["postcss-merge-longhand@7.0.5", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^7.0.5" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw=="], + "postcss-merge-longhand": ["postcss-merge-longhand@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^8.0.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-YDmAmQ8H+ljfomVpSXvr9NA0GP01fraQJqjWBYoMVGg6rOT+PJLwPyeVo2ekn4WB4ZVSH5ddtK3DTRxbz6CFzg=="], - "postcss-merge-rules": ["postcss-merge-rules@7.0.8", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-api": "^3.0.0", "cssnano-utils": "^5.0.1", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA=="], + "postcss-merge-rules": ["postcss-merge-rules@8.0.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-api": "^3.0.0", "cssnano-utils": "^6.0.0", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-bgstL5mpi41dDpnYGDUcI3M814NWkCMcIWpwDqEHXkHg3BT7b4XRAfNEuwJncZOVn/67kVKvWzhfv/7xyrp2uQ=="], - "postcss-minify-font-values": ["postcss-minify-font-values@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ=="], + "postcss-minify-font-values": ["postcss-minify-font-values@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-EnOHQEnSt6oH5NrL1DMFAQuwB2IOimFXTCzc9bKfUeH1jREbqIF5MAK4gQJQOC4mPUwJt4sWifAmNZ1qLu6j3Q=="], - "postcss-minify-gradients": ["postcss-minify-gradients@7.0.1", "", { "dependencies": { "colord": "^2.9.3", "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A=="], + "postcss-minify-gradients": ["postcss-minify-gradients@8.0.0", "", { "dependencies": { "@colordx/core": "^5.4.3", "cssnano-utils": "^6.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-43iAnYIGk0ZjNx5X/rkIcHi6dhmu/vEjY0kqfUfxPuJRO+V7jx8uKIdcnL0dpfNoC5J9TSh3EtzLWbq0gpqnWA=="], - "postcss-minify-params": ["postcss-minify-params@7.0.6", "", { "dependencies": { "browserslist": "^4.28.1", "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ=="], + "postcss-minify-params": ["postcss-minify-params@8.0.0", "", { "dependencies": { "browserslist": "^4.28.2", "cssnano-utils": "^6.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-z7w4QO7G55l4vMUK1Lmx03GW7iyRLgf2V5Dz/7ioSPLnXRjeD+b7m0XfAXUGrbBYYrJ6bXPk+3LoX5u4JfAcSg=="], - "postcss-minify-selectors": ["postcss-minify-selectors@7.0.6", "", { "dependencies": { "cssesc": "^3.0.0", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A=="], + "postcss-minify-selectors": ["postcss-minify-selectors@8.0.1", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-api": "^3.0.0", "cssesc": "^3.0.0", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-c31D46811kTkQDxV1KTTow79axX6gj/01AY5G7cGZg3s31KvAwP13jEFXGAzQbJ7NvOFV1pRqEia6nrAdHU7qg=="], - "postcss-normalize-charset": ["postcss-normalize-charset@7.0.1", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ=="], + "postcss-normalize-charset": ["postcss-normalize-charset@8.0.0", "", { "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-s88FUNDSUD8m0wBYvTQQcubVts6zhXwBU8zCD4vkRKiecd0v8cOjHVIF9r/i+5xzS/WG3f98qq4XsOM0JqvfLA=="], - "postcss-normalize-display-values": ["postcss-normalize-display-values@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ=="], + "postcss-normalize-display-values": ["postcss-normalize-display-values@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-gG2nBxD27fiw6Luinb1QYKdM/Co5GornRJgSD+JTwNH4PGKxImP0qyruDDav49aHUPLY3qrL3qN3LvybO7IzxQ=="], - "postcss-normalize-positions": ["postcss-normalize-positions@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ=="], + "postcss-normalize-positions": ["postcss-normalize-positions@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-t/wGqpehS20Ke7kc4QAsWpH+AJjUdMK/V5qV2RhrXkj8hO/fT1t1MJ8NL7sedWYk7ZqC7eISEJQonW5j0tU1MQ=="], - "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ=="], + "postcss-normalize-repeat-style": ["postcss-normalize-repeat-style@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-3ebOmGdCYKrBYyGKc1xhj0unEnW7beZpVU7JohVeGl7mTxR+7T6egpaawTWAVsB0pEIhcsbJVOjPKCJSoRO6Zg=="], - "postcss-normalize-string": ["postcss-normalize-string@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ=="], + "postcss-normalize-string": ["postcss-normalize-string@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-TvWCGZ/e04Tv31uJvOUtbexkfgUnqmQ3M2P5DkAaVzvOj+BvTkG2QjpA5Y71SL1SPxJcj4M23fNh+RDVCmG8kA=="], - "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg=="], + "postcss-normalize-timing-functions": ["postcss-normalize-timing-functions@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-uEfaXst5Xgqxv7geYUuz6vs9mn88K2NPY2RoIzM3BMmSjsdTSeppV9x2qIgrxsisdbSqF6IVhzI2occcte3hTA=="], - "postcss-normalize-unicode": ["postcss-normalize-unicode@7.0.6", "", { "dependencies": { "browserslist": "^4.28.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ=="], + "postcss-normalize-unicode": ["postcss-normalize-unicode@8.0.0", "", { "dependencies": { "browserslist": "^4.28.2", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-+WYngZaChEeTHZmWhmKtnJ4gTzWdINEaFcgWBnu6WdVu8Ftim8OBTcw768DuCC/3Aax9bZ9WkwrLGHym2Lzf+A=="], - "postcss-normalize-url": ["postcss-normalize-url@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ=="], + "postcss-normalize-url": ["postcss-normalize-url@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-4Mz9hZHn/QIB+YtFqTXrDmE2193GYxGb3F8uMfLvMicaEXCCUlDIJ658gFFJbqEGl9FYzwPtRiuNgbwlO9kkBg=="], - "postcss-normalize-whitespace": ["postcss-normalize-whitespace@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA=="], + "postcss-normalize-whitespace": ["postcss-normalize-whitespace@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-V1f8tYnwIP5tscOXQFTKK8Y5EJ+R2GMpFJ6FjzwoKoQnhbqQy3IeSrDjJJb8JjVos8ut6Osi80Zybpayv/XjIQ=="], - "postcss-ordered-values": ["postcss-ordered-values@7.0.2", "", { "dependencies": { "cssnano-utils": "^5.0.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw=="], + "postcss-ordered-values": ["postcss-ordered-values@8.0.0", "", { "dependencies": { "cssnano-utils": "^6.0.0", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-Dg9+itb6lmD0bxqhQyHCtXAwYRh0wUrx6Mp4/BNXgkLoJmdYMmWi+V+Pypw79Q6iQhxA8KFMHqLBITQJV2gKMA=="], - "postcss-reduce-initial": ["postcss-reduce-initial@7.0.6", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg=="], + "postcss-reduce-initial": ["postcss-reduce-initial@8.0.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-api": "^3.0.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-DChcE9d528AKrlpCTHjhsAiOsWCk4H9ApHPS1QqRT3praObWTiWyn6W1UddGpc46K9LQnHwUu4YwaPUukGtXVA=="], - "postcss-reduce-transforms": ["postcss-reduce-transforms@7.0.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g=="], + "postcss-reduce-transforms": ["postcss-reduce-transforms@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-cLZT0som7vvumQT9XQCnSKOSnRinNQZd1Hm+J723Ney13E8CIydDhw6JwzsjPtgnYThTqn9Q45906gz6wxaAsw=="], "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], - "postcss-svgo": ["postcss-svgo@7.1.1", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^4.0.1" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg=="], + "postcss-svgo": ["postcss-svgo@8.0.0", "", { "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^4.0.1" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-Q2fMSYEiNE1ioDc/3sxvI24NdgA/MJno2XLNpOxgv8aCcJbym8mZY10/lDY5+AWCIc3Aiqzy2Wcp9/zaIXBZgQ=="], - "postcss-unique-selectors": ["postcss-unique-selectors@7.0.5", "", { "dependencies": { "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg=="], + "postcss-unique-selectors": ["postcss-unique-selectors@8.0.0", "", { "dependencies": { "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-iObuolUX+ITJfMU2QQFQdh31JgSjNLPNjVs6YGAqBHvOvAWXMMNget6donQl83aQaeS32i5XeKZURUW/WBxIUw=="], "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + "powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="], + "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], "pretty-bytes": ["pretty-bytes@7.1.0", "", {}, "sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw=="], @@ -1633,6 +1643,8 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], + "prosemirror-changeset": ["prosemirror-changeset@2.4.0", "", { "dependencies": { "prosemirror-transform": "^1.0.0" } }, "sha512-LvqH2v7Q2SF6yxatuPP2e8vSUKS/L+xAU7dPDC4RMyHMhZoGDfBC74mYuyYF4gLqOEG758wajtyhNnsTkuhvng=="], "prosemirror-commands": ["prosemirror-commands@1.7.1", "", { "dependencies": { "prosemirror-model": "^1.0.0", "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.10.2" } }, "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w=="], @@ -1643,6 +1655,8 @@ "prosemirror-history": ["prosemirror-history@1.5.0", "", { "dependencies": { "prosemirror-state": "^1.2.2", "prosemirror-transform": "^1.0.0", "prosemirror-view": "^1.31.0", "rope-sequence": "^1.3.0" } }, "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg=="], + "prosemirror-inputrules": ["prosemirror-inputrules@1.5.1", "", { "dependencies": { "prosemirror-state": "^1.0.0", "prosemirror-transform": "^1.0.0" } }, "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw=="], + "prosemirror-keymap": ["prosemirror-keymap@1.2.3", "", { "dependencies": { "prosemirror-state": "^1.0.0", "w3c-keyname": "^2.2.0" } }, "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw=="], "prosemirror-model": ["prosemirror-model@1.25.4", "", { "dependencies": { "orderedmap": "^2.0.0" } }, "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA=="], @@ -1665,8 +1679,6 @@ "radix3": ["radix3@1.1.2", "", {}, "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="], - "randombytes": ["randombytes@2.1.0", "", { "dependencies": { "safe-buffer": "^5.1.0" } }, "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ=="], - "range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="], "rc9": ["rc9@3.0.0", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.5" } }, "sha512-MGOue0VqscKWQ104udASX/3GYDcKyPI4j4F8gu/jHHzglpmy9a/anZK3PNe8ug6aZFl+9GxLtdhe3kVZuMaQbA=="], @@ -1689,9 +1701,7 @@ "regjsparser": ["regjsparser@0.13.0", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q=="], - "reka-ui": ["reka-ui@2.9.6", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^14.1.0", "@vueuse/shared": "^14.1.0", "aria-hidden": "^1.2.4", "defu": "^6.1.5", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.4.0" } }, "sha512-K6bL457owpvWONc7hsjFxo3HDC9s6IzhRqShW0w9JSKelPGfRbkHD558UQTn/NH1cvrXVHygKyC7fExFmRketg=="], - - "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "reka-ui": ["reka-ui@2.9.8", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^14.1.0", "@vueuse/shared": "^14.1.0", "aria-hidden": "^1.2.4", "defu": "^6.1.5", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.4.0" } }, "sha512-7dxaBJ6nQ0zOQZXPV45219tTEgZPstmihBLS9ABPhSiPiJ8SiF0sacfZHFaBptS0v9N4tzsevq+8MNBpE4p5JQ=="], "reserved-identifiers": ["reserved-identifiers@1.2.0", "", {}, "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw=="], @@ -1701,13 +1711,15 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], "rollup": ["rollup@4.57.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.1", "@rollup/rollup-android-arm64": "4.57.1", "@rollup/rollup-darwin-arm64": "4.57.1", "@rollup/rollup-darwin-x64": "4.57.1", "@rollup/rollup-freebsd-arm64": "4.57.1", "@rollup/rollup-freebsd-x64": "4.57.1", "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", "@rollup/rollup-linux-arm-musleabihf": "4.57.1", "@rollup/rollup-linux-arm64-gnu": "4.57.1", "@rollup/rollup-linux-arm64-musl": "4.57.1", "@rollup/rollup-linux-loong64-gnu": "4.57.1", "@rollup/rollup-linux-loong64-musl": "4.57.1", "@rollup/rollup-linux-ppc64-gnu": "4.57.1", "@rollup/rollup-linux-ppc64-musl": "4.57.1", "@rollup/rollup-linux-riscv64-gnu": "4.57.1", "@rollup/rollup-linux-riscv64-musl": "4.57.1", "@rollup/rollup-linux-s390x-gnu": "4.57.1", "@rollup/rollup-linux-x64-gnu": "4.57.1", "@rollup/rollup-linux-x64-musl": "4.57.1", "@rollup/rollup-openbsd-x64": "4.57.1", "@rollup/rollup-openharmony-arm64": "4.57.1", "@rollup/rollup-win32-arm64-msvc": "4.57.1", "@rollup/rollup-win32-ia32-msvc": "4.57.1", "@rollup/rollup-win32-x64-gnu": "4.57.1", "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A=="], - "rollup-plugin-visualizer": ["rollup-plugin-visualizer@6.0.5", "", { "dependencies": { "open": "^8.0.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^17.5.1" }, "peerDependencies": { "rolldown": "1.x || ^1.0.0-beta", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg=="], + "rollup-plugin-visualizer": ["rollup-plugin-visualizer@7.0.1", "", { "dependencies": { "open": "^11.0.0", "picomatch": "^4.0.2", "source-map": "^0.7.4", "yargs": "^18.0.0" }, "peerDependencies": { "rolldown": "1.x || ^1.0.0-beta || ^1.0.0-rc", "rollup": "2.x || 3.x || 4.x" }, "optionalPeers": ["rolldown", "rollup"], "bin": { "rollup-plugin-visualizer": "dist/bin/cli.js" } }, "sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg=="], "rope-sequence": ["rope-sequence@1.3.4", "", {}, "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ=="], @@ -1729,9 +1741,9 @@ "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], - "serialize-javascript": ["serialize-javascript@6.0.2", "", { "dependencies": { "randombytes": "^2.1.0" } }, "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g=="], + "serialize-javascript": ["serialize-javascript@7.0.5", "", {}, "sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw=="], - "seroval": ["seroval@1.5.1", "", {}, "sha512-OwrZRZAfhHww0WEnKHDY8OM0U/Qs8OTfIDWhUD4BLpNJUfXK4cGmjiagGze086m+mhI+V2nD0gfbHEnJjb9STA=="], + "seroval": ["seroval@1.5.4", "", {}, "sha512-46uFvgrXTVxZcUorgSSRZ4y+ieqLLQRMlG4bnCZKW3qI6BZm7Rg4ntMW4p1mILEEBZWrFlcpp0AyIIlM6jD9iw=="], "serve-placeholder": ["serve-placeholder@2.0.2", "", { "dependencies": { "defu": "^6.1.4" } }, "sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ=="], @@ -1773,7 +1785,7 @@ "speakingurl": ["speakingurl@14.0.1", "", {}, "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ=="], - "srvx": ["srvx@0.11.12", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-AQfrGqntqVPXgP03pvBDN1KyevHC+KmYVqb8vVf4N+aomQqdhaZxjvoVp+AOm4u6x+GgNQY3MVzAUIn+TqwkOA=="], + "srvx": ["srvx@0.11.16", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-bp07zRuycfTY43IjAvvTFnmnJi8ikW0VFiHwOhhYcVW/L4xQ1XY4PAd4Nuum1rsA17C39zL7x+CDhrn5AL32Rw=="], "stable-hash-x": ["stable-hash-x@0.2.0", "", {}, "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ=="], @@ -1781,17 +1793,17 @@ "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], - "std-env": ["std-env@4.0.0", "", {}, "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ=="], + "std-env": ["std-env@4.1.0", "", {}, "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ=="], "streamx": ["streamx@2.23.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], - "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + "strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], @@ -1803,7 +1815,7 @@ "structured-clone-es": ["structured-clone-es@2.0.0", "", {}, "sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q=="], - "stylehacks": ["stylehacks@7.0.7", "", { "dependencies": { "browserslist": "^4.27.0", "postcss-selector-parser": "^7.1.0" }, "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g=="], + "stylehacks": ["stylehacks@8.0.0", "", { "dependencies": { "browserslist": "^4.28.2", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.5.14" } }, "sha512-sWyjaJvBqHoVKYPbQ8JRvrGSPaYWtWrJsU+fGVtwKB1GE1rRPu3rC7T6UCuXLoL00Dwb+tsHe2T904r8Vnsx8w=="], "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], @@ -1813,17 +1825,15 @@ "svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="], - "system-architecture": ["system-architecture@0.1.0", "", {}, "sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA=="], - "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], - "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="], + "tailwind-merge": ["tailwind-merge@3.6.0", "", {}, "sha512-uxL7qAVQriqRQPAyK3pj66VqskWqoZ37PW94jwOTwNfq/z9oyu1V+eqrZqtR2+fCiXdYOZe/Modt8GtvqNzu+w=="], "tailwind-variants": ["tailwind-variants@3.2.2", "", { "peerDependencies": { "tailwind-merge": ">=3.0.0", "tailwindcss": "*" }, "optionalPeers": ["tailwind-merge"] }, "sha512-Mi4kHeMTLvKlM98XPnK+7HoBPmf4gygdFmqQPaDivc3DpYS6aIY6KiG/PgThrGvii5YZJqRsPz0aPyhoFzmZgg=="], - "tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="], + "tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], - "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], "tar": ["tar@7.5.9", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg=="], @@ -1867,7 +1877,7 @@ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], "ultrahtml": ["ultrahtml@1.6.0", "", {}, "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw=="], @@ -1879,7 +1889,7 @@ "unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], - "unhead": ["unhead@2.1.13", "", { "dependencies": { "hookable": "^6.0.1" } }, "sha512-jO9M1sI6b2h/1KpIu4Jeu+ptumLmUKboRRLxys5pYHFeT+lqTzfNHbYUX9bxVDhC1FBszAGuWcUVlmvIPsah8Q=="], + "unhead": ["unhead@2.1.15", "", { "dependencies": { "hookable": "^6.0.1" } }, "sha512-MCt5T90mCWyr3Z6pUCdM9lVRXoMoVBlL7z7U4CYVIiaDiuzad/UCfLuMqz5MeNmpZUgoBCQnrucJimU7EZR+XA=="], "unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="], @@ -1893,7 +1903,7 @@ "unplugin-utils": ["unplugin-utils@0.3.1", "", { "dependencies": { "pathe": "^2.0.3", "picomatch": "^4.0.3" } }, "sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog=="], - "unplugin-vue-components": ["unplugin-vue-components@32.0.0", "", { "dependencies": { "chokidar": "^5.0.0", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.2", "obug": "^2.1.1", "picomatch": "^4.0.3", "tinyglobby": "^0.2.15", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1" }, "peerDependencies": { "@nuxt/kit": "^3.2.2 || ^4.0.0", "vue": "^3.0.0" }, "optionalPeers": ["@nuxt/kit"] }, "sha512-uLdccgS7mf3pv1bCCP20y/hm+u1eOjAmygVkh+Oa70MPkzgl1eQv1L0CwdHNM3gscO8/GDMGIET98Ja47CBbZg=="], + "unplugin-vue-components": ["unplugin-vue-components@32.1.0", "", { "dependencies": { "chokidar": "^5.0.0", "local-pkg": "^1.2.0", "magic-string": "^0.30.21", "mlly": "^1.8.2", "obug": "^2.1.1", "picomatch": "^4.0.4", "tinyglobby": "^0.2.16", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1" }, "peerDependencies": { "@nuxt/kit": "^3.2.2 || ^4.0.0", "vue": "^3.0.0" }, "optionalPeers": ["@nuxt/kit"] }, "sha512-YiUkSxuRjab18XFOrX5VsIxXzccrfmHVGsGeJgSgklb829DQmCy9E4vvDUE4tuvZZdxyFJZX0Oc4TPnnxiiMyg=="], "unrouting": ["unrouting@0.1.7", "", { "dependencies": { "escape-string-regexp": "^5.0.0", "ufo": "^1.6.3" } }, "sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ=="], @@ -1909,7 +1919,7 @@ "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], - "uqr": ["uqr@0.1.2", "", {}, "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="], + "uqr": ["uqr@0.1.3", "", {}, "sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA=="], "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], @@ -1925,7 +1935,7 @@ "vite-node": ["vite-node@5.3.0", "", { "dependencies": { "cac": "^6.7.14", "es-module-lexer": "^2.0.0", "obug": "^2.1.1", "pathe": "^2.0.3", "vite": "^7.3.1" }, "bin": { "vite-node": "dist/cli.mjs" } }, "sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ=="], - "vite-plugin-checker": ["vite-plugin-checker@0.12.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "chokidar": "^4.0.3", "npm-run-path": "^6.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.3", "tiny-invariant": "^1.3.3", "tinyglobby": "^0.2.15", "vscode-uri": "^3.1.0" }, "peerDependencies": { "@biomejs/biome": ">=1.7", "eslint": ">=9.39.1", "meow": "^13.2.0", "optionator": "^0.9.4", "oxlint": ">=1", "stylelint": ">=16", "typescript": "*", "vite": ">=5.4.21", "vls": "*", "vti": "*", "vue-tsc": "~2.2.10 || ^3.0.0" }, "optionalPeers": ["@biomejs/biome", "eslint", "meow", "optionator", "oxlint", "stylelint", "typescript", "vls", "vti", "vue-tsc"] }, "sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg=="], + "vite-plugin-checker": ["vite-plugin-checker@0.13.0", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "chokidar": "^4.0.3", "npm-run-path": "^6.0.0", "picocolors": "^1.1.1", "picomatch": "^4.0.4", "proper-lockfile": "^4.1.2", "tiny-invariant": "^1.3.3", "tinyglobby": "^0.2.15", "vscode-uri": "^3.1.0" }, "peerDependencies": { "@biomejs/biome": ">=1.7", "eslint": ">=9.39.4", "meow": "^13.2.0 || ^14.0.0", "optionator": "^0.9.4", "oxlint": ">=1", "stylelint": ">=16.26.1", "typescript": "*", "vite": ">=5.4.21", "vls": "*", "vti": "*", "vue-tsc": "~2.2.10 || ^3.0.0" }, "optionalPeers": ["@biomejs/biome", "eslint", "meow", "optionator", "oxlint", "stylelint", "typescript", "vls", "vti", "vue-tsc"] }, "sha512-14EkOZmfinVZNxRmg2uCNDwtqGc/33lU/UEJansHgu27+ad+r6mMBf1Xtnq57jGZWiO/xzwtiEKPYsganw7ZFQ=="], "vite-plugin-inspect": ["vite-plugin-inspect@11.3.3", "", { "dependencies": { "ansis": "^4.1.0", "debug": "^4.4.1", "error-stack-parser-es": "^1.0.5", "ohash": "^2.0.11", "open": "^10.2.0", "perfect-debounce": "^2.0.0", "sirv": "^3.0.1", "unplugin-utils": "^0.3.0", "vite-dev-rpc": "^1.1.0" }, "peerDependencies": { "vite": "^6.0.0 || ^7.0.0-0" } }, "sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA=="], @@ -1933,11 +1943,11 @@ "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], - "vue": ["vue@3.5.33", "", { "dependencies": { "@vue/compiler-dom": "3.5.33", "@vue/compiler-sfc": "3.5.33", "@vue/runtime-dom": "3.5.33", "@vue/server-renderer": "3.5.33", "@vue/shared": "3.5.33" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ=="], + "vue": ["vue@3.5.35", "", { "dependencies": { "@vue/compiler-dom": "3.5.35", "@vue/compiler-sfc": "3.5.35", "@vue/runtime-dom": "3.5.35", "@vue/server-renderer": "3.5.35", "@vue/shared": "3.5.35" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q=="], "vue-bundle-renderer": ["vue-bundle-renderer@2.2.0", "", { "dependencies": { "ufo": "^1.6.1" } }, "sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg=="], - "vue-component-type-helpers": ["vue-component-type-helpers@3.2.7", "", {}, "sha512-+gPp5YGmhfsj1IN+xUo7y0fb4clfnOiiUA39y07yW1VzCRjzVgwLbtmdWlghh7mXrPsEaYc7rrIir/HT6C8vYQ=="], + "vue-component-type-helpers": ["vue-component-type-helpers@3.3.3", "", {}, "sha512-x4nsFpy5Pe8fqPzp/5vkTPeTTDBpAx4WVtV47Ejt0+2FQrq4pRRsJs7JmYRqMFzTu/LW+pCWEjQ3YVCkPV7f9g=="], "vue-demi": ["vue-demi@0.14.10", "", { "peerDependencies": { "@vue/composition-api": "^1.0.0-rc.1", "vue": "^3.0.0-0 || ^2.6.0" }, "optionalPeers": ["@vue/composition-api"], "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" } }, "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg=="], @@ -1945,9 +1955,9 @@ "vue-eslint-parser": ["vue-eslint-parser@10.4.0", "", { "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0 || ^9.0.0", "eslint-visitor-keys": "^4.2.0 || ^5.0.0", "espree": "^10.3.0 || ^11.0.0", "esquery": "^1.6.0", "semver": "^7.6.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, "sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg=="], - "vue-router": ["vue-router@5.0.6", "", { "dependencies": { "@babel/generator": "^7.28.6", "@vue-macros/common": "^3.1.1", "@vue/devtools-api": "^8.0.6", "ast-walker-scope": "^0.8.3", "chokidar": "^5.0.0", "json5": "^2.2.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.0", "muggle-string": "^0.4.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "scule": "^1.3.0", "tinyglobby": "^0.2.15", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1", "yaml": "^2.8.2" }, "peerDependencies": { "@pinia/colada": ">=0.21.2", "@vue/compiler-sfc": "^3.5.17", "pinia": "^3.0.4", "vue": "^3.5.0" }, "optionalPeers": ["@pinia/colada", "@vue/compiler-sfc", "pinia"] }, "sha512-9+kmUTGbKMyW9Asoy98IXXYIzrTMT7JDAdpDDeEkorHvybpUvBI2wsrSM5jFOXrFydpzRFJ9vAh+80DN2PGu9w=="], + "vue-router": ["vue-router@5.1.0", "", { "dependencies": { "@babel/generator": "^8.0.0-rc.4", "@vue-macros/common": "^3.1.1", "@vue/devtools-api": "^8.1.2", "ast-walker-scope": "^0.9.0", "chokidar": "^5.0.0", "json5": "^2.2.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.2", "muggle-string": "^0.4.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "scule": "^1.3.0", "tinyglobby": "^0.2.16", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1", "yaml": "^2.9.0" }, "peerDependencies": { "@pinia/colada": ">=0.21.2", "@vue/compiler-sfc": "^3.5.34", "pinia": "^3.0.4", "vite": "^7.0.0 || ^8.0.0", "vue": "^3.5.34" }, "optionalPeers": ["@pinia/colada", "@vue/compiler-sfc", "pinia", "vite"] }, "sha512-HAbiLzLEHQwxPgvsbOJDAwtavszEgLwri6XfyrsPECIFez8+59xc9LofWVdc/HEaSRT822lJ8H9Ns38VVond5g=="], - "vue-tsc": ["vue-tsc@3.2.7", "", { "dependencies": { "@volar/typescript": "2.4.28", "@vue/language-core": "3.2.7" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "bin/vue-tsc.js" } }, "sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ=="], + "vue-tsc": ["vue-tsc@3.3.3", "", { "dependencies": { "@volar/typescript": "2.4.28", "@vue/language-core": "3.3.3" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "bin/vue-tsc.js" } }, "sha512-SWUEG7YRUeDJHT7Xsuhf02elYX2gxPzzAII7OxDAh4KNOr4QHQ0Lls0YfnaO5GNd560CwVa2HTfdqmA5MqvRqQ=="], "vuedraggable": ["vuedraggable@4.1.0", "", { "dependencies": { "sortablejs": "1.14.0" }, "peerDependencies": { "vue": "^3.0.1" } }, "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww=="], @@ -1965,7 +1975,7 @@ "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="], - "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], @@ -1979,19 +1989,19 @@ "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], - "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], + "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], - "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + "yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], "yjs": ["yjs@13.6.30", "", { "dependencies": { "lib0": "^0.2.99" } }, "sha512-vv/9h42eCMC81ZHDFswuu/MKzkl/vyq1BhaNGfHyOonwlG4CJbQF4oiBBJPvfdeCt/PlVDWh7Nov9D34YY09uQ=="], "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], - "youch": ["youch@4.1.0", "", { "dependencies": { "@poppinss/colors": "^4.1.6", "@poppinss/dumper": "^0.7.0", "@speed-highlight/core": "^1.2.14", "cookie-es": "^2.0.0", "youch-core": "^0.3.3" } }, "sha512-cYekNh2tUoU+voS11X0D0UQntVCSO6LQ1h10VriQGmfbpf0mnGTruwZICts23UUNiZCXm8H8hQBtRrdsbhuNNg=="], + "youch": ["youch@4.1.1", "", { "dependencies": { "@poppinss/colors": "^4.1.6", "@poppinss/dumper": "^0.7.0", "@speed-highlight/core": "^1.2.14", "cookie-es": "^3.0.1", "youch-core": "^0.3.3" } }, "sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA=="], "youch-core": ["youch-core@0.3.3", "", { "dependencies": { "@poppinss/exception": "^1.2.2", "error-stack-parser-es": "^1.0.5" } }, "sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA=="], @@ -1999,11 +2009,17 @@ "@babel/code-frame/js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + "@babel/core/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + "@babel/core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@babel/core/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/generator/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@babel/generator/@babel/parser": ["@babel/parser@8.0.0-rc.6", "", { "dependencies": { "@babel/types": "^8.0.0-rc.6" }, "bin": "./bin/babel-parser.js" }, "sha512-rOS8IpdO7mQELkTPlCsTgPejO0bFuZdEDCGQJouYbYf9e1FLTym7Fei2pEjq8q7MWbX0ravcd7QQYKs1TxOuog=="], + + "@babel/helper-annotate-as-pure/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -2011,11 +2027,31 @@ "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@babel/helper-member-expression-to-functions/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/helper-module-imports/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/helper-optimise-call-expression/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/helper-skip-transparent-expression-wrappers/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/helpers/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/parser/@babel/types": ["@babel/types@7.29.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA=="], + "@babel/template/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@babel/template/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/traverse/@babel/generator": ["@babel/generator@7.29.1", "", { "dependencies": { "@babel/parser": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw=="], + "@babel/traverse/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], - "@dxup/nuxt/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@babel/traverse/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@8.0.0-rc.6", "", {}, "sha512-nVJ+1JcCgntv8d78rRo++o2wuODT0Irknx2BF8Np4Ft2CRgjLqIs4qzSZ8b66yGbBdMWGmZBO9WEZv1hhNiSpg=="], + + "@dxup/nuxt/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], "@es-joy/jsdoccomment/@typescript-eslint/types": ["@typescript-eslint/types@8.56.0", "", {}, "sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ=="], @@ -2027,18 +2063,22 @@ "@eslint/config-inspector/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "@nuxt/cli/@clack/prompts": ["@clack/prompts@1.1.0", "", { "dependencies": { "@clack/core": "1.1.0", "sisteransi": "^1.0.5" } }, "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g=="], + "@nuxt/cli/@clack/prompts": ["@clack/prompts@1.5.0", "", { "dependencies": { "@clack/core": "1.4.0", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-wKh+wTjmrUoUdkZg8KpJO5X+p9PWV+KE9mePseq9UYWkukgTKsGS47RRL2HstwVcvDQH+PenrPJWII8+MfiiyA=="], - "@nuxt/cli/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "@nuxt/cli/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], - "@nuxt/cli/fuse.js": ["fuse.js@7.1.0", "", {}, "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ=="], + "@nuxt/cli/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - "@nuxt/cli/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "@nuxt/cli/tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], "@nuxt/devtools/@nuxt/devtools-kit": ["@nuxt/devtools-kit@3.2.4", "", { "dependencies": { "@nuxt/kit": "^4.4.2", "execa": "^8.0.1" }, "peerDependencies": { "vite": ">=6.0" } }, "sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ=="], "@nuxt/devtools/hookable": ["hookable@6.1.0", "", {}, "sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw=="], + "@nuxt/devtools/nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + + "@nuxt/devtools/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "@nuxt/devtools/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "@nuxt/devtools/which": ["which@6.0.1", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg=="], @@ -2047,6 +2087,8 @@ "@nuxt/devtools-wizard/@clack/prompts": ["@clack/prompts@1.1.0", "", { "dependencies": { "@clack/core": "1.1.0", "sisteransi": "^1.0.5" } }, "sha512-pkqbPGtohJAvm4Dphs2M8xE29ggupihHdy1x84HNojZuMtFsHiUlRvqD24tM2+XmI+61LlfNceM3Wr7U5QES5g=="], + "@nuxt/devtools-wizard/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "@nuxt/eslint/find-up": ["find-up@8.0.0", "", { "dependencies": { "locate-path": "^8.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww=="], "@nuxt/eslint-config/@typescript-eslint/parser": ["@typescript-eslint/parser@8.57.1", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.57.1", "@typescript-eslint/types": "8.57.1", "@typescript-eslint/typescript-estree": "8.57.1", "@typescript-eslint/visitor-keys": "8.57.1", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw=="], @@ -2061,39 +2103,45 @@ "@nuxt/fonts/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@nuxt/fonts/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "@nuxt/icon/@nuxt/devtools-kit": ["@nuxt/devtools-kit@3.2.4", "", { "dependencies": { "@nuxt/kit": "^4.4.2", "execa": "^8.0.1" }, "peerDependencies": { "vite": ">=6.0" } }, "sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ=="], - "@nuxt/icon/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "@nuxt/icon/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], - "@nuxt/icon/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@nuxt/icon/local-pkg": ["local-pkg@1.2.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q=="], "@nuxt/kit/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@nuxt/kit/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "@nuxt/kit/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "@nuxt/kit/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "@nuxt/nitro-server/@unhead/vue": ["@unhead/vue@2.1.12", "", { "dependencies": { "hookable": "^6.0.1", "unhead": "2.1.12" }, "peerDependencies": { "vue": ">=3.5.18" } }, "sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g=="], + "@nuxt/kit/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - "@nuxt/nitro-server/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "@nuxt/nitro-server/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], "@nuxt/nitro-server/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "@nuxt/nitro-server/h3": ["h3@1.15.10", "", { "dependencies": { "cookie-es": "^1.2.2", "crossws": "^0.3.5", "defu": "^6.1.4", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-YzJeWSkDZxAhvmp8dexjRK5hxziRO7I9m0N53WhvYL5NiWfkUkzssVzY9jvGu0HBoLFW6+duYmNSn6MaZBCCtg=="], - - "@nuxt/nitro-server/vue": ["vue@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/compiler-sfc": "3.5.30", "@vue/runtime-dom": "3.5.30", "@vue/server-renderer": "3.5.30", "@vue/shared": "3.5.30" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg=="], + "@nuxt/nitro-server/h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], - "@nuxt/schema/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "@nuxt/nitro-server/unstorage": ["unstorage@1.17.5", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.10", "lru-cache": "^11.2.7", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg=="], "@nuxt/telemetry/ofetch": ["ofetch@2.0.0-alpha.3", "", {}, "sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA=="], - "@nuxt/telemetry/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "@nuxt/telemetry/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], - "@nuxt/vite-builder/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "@nuxt/ui/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], + + "@nuxt/vite-builder/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], "@nuxt/vite-builder/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], - "@nuxt/vite-builder/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "@nuxt/vite-builder/vite": ["vite@7.3.3", "", { "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", "rollup": "^4.43.0", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA=="], "@nuxtjs/color-mode/@nuxt/kit": ["@nuxt/kit@3.21.2", "", { "dependencies": { "c12": "^3.3.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "knitwork": "^1.3.0", "mlly": "^1.8.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^3.0.0", "scule": "^1.3.0", "semver": "^7.7.4", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-Bd6m6mrDrqpBEbX+g0rc66/ALd1sxlgdx5nfK9MAYO0yKLTOSK7McSYz1KcOYn3LQFCXOWfvXwaqih/b+REI1g=="], @@ -2101,8 +2149,12 @@ "@nuxtjs/color-mode/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "@parcel/watcher/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@parcel/watcher-wasm/napi-wasm": ["napi-wasm@1.1.3", "", { "bundled": true }, "sha512-h/4nMGsHjZDCYmQVNODIrYACVJ+I9KItbG+0si6W/jSjdA9JbWDoU4LLeMXVcEQGHjttI2tuXqDrbGF7qkUHHg=="], + "@parcel/watcher-wasm/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@pinia/nuxt/@nuxt/kit": ["@nuxt/kit@4.3.1", "", { "dependencies": { "c12": "^3.3.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^3.0.0", "scule": "^1.3.0", "semver": "^7.7.4", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA=="], "@rollup/plugin-commonjs/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], @@ -2111,19 +2163,23 @@ "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "@rollup/pluginutils/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@stylistic/eslint-plugin/@typescript-eslint/types": ["@typescript-eslint/types@8.57.1", "", {}, "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ=="], "@stylistic/eslint-plugin/eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="], "@stylistic/eslint-plugin/espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + "@stylistic/eslint-plugin/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" }, "bundled": true }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], @@ -2145,6 +2201,8 @@ "@typescript-eslint/type-utils/ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "@typescript-eslint/typescript-estree/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + "@typescript-eslint/utils/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.57.1", "", { "dependencies": { "@typescript-eslint/types": "8.57.1", "@typescript-eslint/visitor-keys": "8.57.1" } }, "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg=="], "@typescript-eslint/utils/@typescript-eslint/types": ["@typescript-eslint/types@8.57.1", "", {}, "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ=="], @@ -2153,51 +2211,29 @@ "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], - "@vercel/nft/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - "@vercel/nft/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@vitejs/plugin-vue-jsx/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.4", "", {}, "sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ=="], - "@vue-macros/common/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/compiler-core": "3.5.28", "@vue/compiler-dom": "3.5.28", "@vue/compiler-ssr": "3.5.28", "@vue/shared": "3.5.28", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g=="], + "@vue/babel-plugin-jsx/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@vue/babel-plugin-jsx/@vue/shared": ["@vue/shared@3.5.28", "", {}, "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ=="], "@vue/babel-plugin-resolve-type/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], "@vue/babel-plugin-resolve-type/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/compiler-core": "3.5.28", "@vue/compiler-dom": "3.5.28", "@vue/compiler-ssr": "3.5.28", "@vue/shared": "3.5.28", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g=="], - "@vue/compiler-core/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - "@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@vue/compiler-dom/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - - "@vue/compiler-sfc/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - "@vue/compiler-sfc/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@vue/compiler-ssr/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - "@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@7.7.9", "", { "dependencies": { "@vue/devtools-shared": "^7.7.9", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA=="], "@vue/devtools-kit/birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], "@vue/devtools-kit/hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], - "@vue/language-core/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - - "@vue/language-core/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], - - "@vue/reactivity/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - - "@vue/runtime-core/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - - "@vue/runtime-dom/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - - "@vue/server-renderer/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], - - "@vueuse/nuxt/@nuxt/kit": ["@nuxt/kit@4.3.1", "", { "dependencies": { "c12": "^3.3.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "mlly": "^1.8.0", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^3.0.0", "scule": "^1.3.0", "semver": "^7.7.4", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-UjBFt72dnpc+83BV3OIbCT0YHLevJtgJCHpxMX0YRKWLDhhbcDdUse87GtsQBrjvOzK7WUNUYLDS/hQLYev5rA=="], + "@vueuse/nuxt/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -2207,7 +2243,11 @@ "ast-kit/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], - "ast-walker-scope/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "ast-walker-scope/@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + + "ast-walker-scope/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "autoprefixer/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "browserslist/caniuse-lite": ["caniuse-lite@1.0.30001770", "", {}, "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw=="], @@ -2215,6 +2255,10 @@ "c12/giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + "c12/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "c12/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "c12/rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], "caniuse-api/caniuse-lite": ["caniuse-lite@1.0.30001770", "", {}, "sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw=="], @@ -2223,6 +2267,8 @@ "compress-commons/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], + "cssnano-preset-default/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], @@ -2237,10 +2283,16 @@ "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "fontaine/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "fontaine/unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], "fontless/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "fontless/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "fontless/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "glob/minimatch": ["minimatch@10.2.0", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w=="], "globby/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], @@ -2251,83 +2303,109 @@ "h3/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - "is-inside-container/is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], + "h3/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], - "listhen/citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], - - "listhen/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - - "listhen/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], - - "listhen/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], - - "listhen/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "listhen/h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], "local-pkg/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "local-pkg/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "magic-regexp/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "magic-regexp/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "magic-regexp/unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], "magicast/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "magicast/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], - "nitropack/citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + "mlly/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - "nitropack/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "nitropack/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + + "nitropack/cookie-es": ["cookie-es@2.0.1", "", {}, "sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA=="], + + "nitropack/esbuild": ["esbuild@0.28.0", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.28.0", "@esbuild/android-arm": "0.28.0", "@esbuild/android-arm64": "0.28.0", "@esbuild/android-x64": "0.28.0", "@esbuild/darwin-arm64": "0.28.0", "@esbuild/darwin-x64": "0.28.0", "@esbuild/freebsd-arm64": "0.28.0", "@esbuild/freebsd-x64": "0.28.0", "@esbuild/linux-arm": "0.28.0", "@esbuild/linux-arm64": "0.28.0", "@esbuild/linux-ia32": "0.28.0", "@esbuild/linux-loong64": "0.28.0", "@esbuild/linux-mips64el": "0.28.0", "@esbuild/linux-ppc64": "0.28.0", "@esbuild/linux-riscv64": "0.28.0", "@esbuild/linux-s390x": "0.28.0", "@esbuild/linux-x64": "0.28.0", "@esbuild/netbsd-arm64": "0.28.0", "@esbuild/netbsd-x64": "0.28.0", "@esbuild/openbsd-arm64": "0.28.0", "@esbuild/openbsd-x64": "0.28.0", "@esbuild/openharmony-arm64": "0.28.0", "@esbuild/sunos-x64": "0.28.0", "@esbuild/win32-arm64": "0.28.0", "@esbuild/win32-ia32": "0.28.0", "@esbuild/win32-x64": "0.28.0" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw=="], "nitropack/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "nitropack/h3": ["h3@1.15.11", "", { "dependencies": { "cookie-es": "^1.2.3", "crossws": "^0.3.5", "defu": "^6.1.6", "destr": "^2.0.5", "iron-webcrypto": "^1.2.1", "node-mock-http": "^1.0.4", "radix3": "^1.1.2", "ufo": "^1.6.3", "uncrypto": "^0.1.3" } }, "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg=="], + "nitropack/hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], - "nitropack/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "nitropack/ioredis": ["ioredis@5.11.0", "", { "dependencies": { "@ioredis/commands": "1.10.0", "cluster-key-slot": "1.1.1", "debug": "4.4.3", "denque": "2.1.0", "redis-errors": "1.2.0", "redis-parser": "3.0.0", "standard-as-callback": "2.1.0" } }, "sha512-EZBErytyVovD8f6pDfG3Kb37N6Y3lmDA9NNj+4+IP13CzzHGeX+OyeRM2Um13khRzoBSzzL+5lVnCX8V2RLeMg=="], - "nitropack/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], + "nitropack/rollup": ["rollup@4.61.0", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.61.0", "@rollup/rollup-android-arm64": "4.61.0", "@rollup/rollup-darwin-arm64": "4.61.0", "@rollup/rollup-darwin-x64": "4.61.0", "@rollup/rollup-freebsd-arm64": "4.61.0", "@rollup/rollup-freebsd-x64": "4.61.0", "@rollup/rollup-linux-arm-gnueabihf": "4.61.0", "@rollup/rollup-linux-arm-musleabihf": "4.61.0", "@rollup/rollup-linux-arm64-gnu": "4.61.0", "@rollup/rollup-linux-arm64-musl": "4.61.0", "@rollup/rollup-linux-loong64-gnu": "4.61.0", "@rollup/rollup-linux-loong64-musl": "4.61.0", "@rollup/rollup-linux-ppc64-gnu": "4.61.0", "@rollup/rollup-linux-ppc64-musl": "4.61.0", "@rollup/rollup-linux-riscv64-gnu": "4.61.0", "@rollup/rollup-linux-riscv64-musl": "4.61.0", "@rollup/rollup-linux-s390x-gnu": "4.61.0", "@rollup/rollup-linux-x64-gnu": "4.61.0", "@rollup/rollup-linux-x64-musl": "4.61.0", "@rollup/rollup-openbsd-x64": "4.61.0", "@rollup/rollup-openharmony-arm64": "4.61.0", "@rollup/rollup-win32-arm64-msvc": "4.61.0", "@rollup/rollup-win32-ia32-msvc": "4.61.0", "@rollup/rollup-win32-x64-gnu": "4.61.0", "@rollup/rollup-win32-x64-msvc": "4.61.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g=="], - "nitropack/youch": ["youch@4.1.0-beta.14", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@poppinss/dumper": "^0.6.5", "@speed-highlight/core": "^1.2.9", "cookie-es": "^2.0.0", "youch-core": "^0.3.3" } }, "sha512-VqcHA/HqOxaBMjBQCYz1h8jYdAAeLm6cVLmefijJjMY4aovOfKkqMry7amNX3JiN4hXArb7ZVYBNpjEVkV3r/A=="], + "nitropack/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + "nitropack/unimport": ["unimport@6.3.0", "", { "dependencies": { "acorn": "^8.16.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.2", "pathe": "^2.0.3", "picomatch": "^4.0.4", "pkg-types": "^2.3.1", "scule": "^1.3.0", "strip-literal": "^3.1.0", "tinyglobby": "^0.2.16", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1" }, "peerDependencies": { "oxc-parser": "*", "rolldown": "^1.0.0" }, "optionalPeers": ["oxc-parser", "rolldown"] }, "sha512-M+Dxk5W9WRd+8j56W9tp8lGW/dmMc7g5zj7BWQnEjKQhryBstqsi1V0izb0zHwSkEN8cSYV7K75/bykairV2tA=="], - "nuxt/@unhead/vue": ["@unhead/vue@2.1.12", "", { "dependencies": { "hookable": "^6.0.1", "unhead": "2.1.12" }, "peerDependencies": { "vue": ">=3.5.18" } }, "sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g=="], + "nitropack/unstorage": ["unstorage@1.17.5", "", { "dependencies": { "anymatch": "^3.1.3", "chokidar": "^5.0.0", "destr": "^2.0.5", "h3": "^1.15.10", "lru-cache": "^11.2.7", "node-fetch-native": "^1.6.7", "ofetch": "^1.5.1", "ufo": "^1.6.3" }, "peerDependencies": { "@azure/app-configuration": "^1.8.0", "@azure/cosmos": "^4.2.0", "@azure/data-tables": "^13.3.0", "@azure/identity": "^4.6.0", "@azure/keyvault-secrets": "^4.9.0", "@azure/storage-blob": "^12.26.0", "@capacitor/preferences": "^6 || ^7 || ^8", "@deno/kv": ">=0.9.0", "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0", "@planetscale/database": "^1.19.0", "@upstash/redis": "^1.34.3", "@vercel/blob": ">=0.27.1", "@vercel/functions": "^2.2.12 || ^3.0.0", "@vercel/kv": "^1 || ^2 || ^3", "aws4fetch": "^1.0.20", "db0": ">=0.2.1", "idb-keyval": "^6.2.1", "ioredis": "^5.4.2", "uploadthing": "^7.4.4" }, "optionalPeers": ["@azure/app-configuration", "@azure/cosmos", "@azure/data-tables", "@azure/identity", "@azure/keyvault-secrets", "@azure/storage-blob", "@capacitor/preferences", "@deno/kv", "@netlify/blobs", "@planetscale/database", "@upstash/redis", "@vercel/blob", "@vercel/functions", "@vercel/kv", "aws4fetch", "db0", "idb-keyval", "ioredis", "uploadthing"] }, "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg=="], - "nuxt/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], - "nuxt/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "nuxt/@nuxt/kit": ["@nuxt/kit@4.4.6", "", { "dependencies": { "c12": "^3.3.4", "consola": "^3.4.2", "defu": "^6.1.7", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.7.0", "klona": "^2.0.6", "mlly": "^1.8.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.1", "rc9": "^3.0.1", "scule": "^1.3.0", "semver": "^7.8.0", "tinyglobby": "^0.2.16", "ufo": "^1.6.4", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-AzsqBJeG7b3whIciyzkz4nBossEotM314KzKAptc8kH07ORBIR8Qh3QYKepo2YZwtxiDP2Y9aqzAztwpSEDHtw=="], - "nuxt/hookable": ["hookable@6.0.1", "", {}, "sha512-uKGyY8BuzN/a5gvzvA+3FVWo0+wUjgtfSdnmjtrOVwQCZPHpHDH2WRO3VZSOeluYrHoDCiXFffZXs8Dj1ULWtw=="], + "nuxt/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], "nuxt/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "nuxt/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "nuxt/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + + "nuxt/unimport": ["unimport@6.3.0", "", { "dependencies": { "acorn": "^8.16.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.2", "pathe": "^2.0.3", "picomatch": "^4.0.4", "pkg-types": "^2.3.1", "scule": "^1.3.0", "strip-literal": "^3.1.0", "tinyglobby": "^0.2.16", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1" }, "peerDependencies": { "oxc-parser": "*", "rolldown": "^1.0.0" }, "optionalPeers": ["oxc-parser", "rolldown"] }, "sha512-M+Dxk5W9WRd+8j56W9tp8lGW/dmMc7g5zj7BWQnEjKQhryBstqsi1V0izb0zHwSkEN8cSYV7K75/bykairV2tA=="], + + "nypm/tinyexec": ["tinyexec@1.2.4", "", {}, "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg=="], + + "ofetch/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "oxc-walker/magic-regexp": ["magic-regexp@0.11.0", "", { "dependencies": { "magic-string": "^0.30.21", "regexp-tree": "^0.1.27", "type-level-regexp": "~0.1.17", "unplugin": "^3.0.0" } }, "sha512-LG77Z/gVnwz7oaDpD4heX6ryl+lcr4l1B2gnP4MMvt2pGhGC1Dfj7dl1pXpP4ih+VQFLuAadeKVa+lARAzfW+Q=="], + + "postcss-colormin/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + + "postcss-convert-values/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + + "postcss-merge-rules/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "nuxt/unimport": ["unimport@6.0.2", "", { "dependencies": { "acorn": "^8.16.0", "escape-string-regexp": "^5.0.0", "estree-walker": "^3.0.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "pkg-types": "^2.3.0", "scule": "^1.3.0", "strip-literal": "^3.1.0", "tinyglobby": "^0.2.15", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1" } }, "sha512-ZSOkrDw380w+KIPniY3smyXh2h7H9v2MNr9zejDuh239o5sdea44DRAYrv+rfUi2QGT186P2h0GPGKvy8avQ5g=="], + "postcss-minify-params/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "nuxt/vue": ["vue@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/compiler-sfc": "3.5.30", "@vue/runtime-dom": "3.5.30", "@vue/server-renderer": "3.5.30", "@vue/shared": "3.5.30" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg=="], + "postcss-minify-selectors/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "nuxt/vue-router": ["vue-router@5.0.4", "", { "dependencies": { "@babel/generator": "^7.28.6", "@vue-macros/common": "^3.1.1", "@vue/devtools-api": "^8.0.6", "ast-walker-scope": "^0.8.3", "chokidar": "^5.0.0", "json5": "^2.2.3", "local-pkg": "^1.1.2", "magic-string": "^0.30.21", "mlly": "^1.8.0", "muggle-string": "^0.4.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "scule": "^1.3.0", "tinyglobby": "^0.2.15", "unplugin": "^3.0.0", "unplugin-utils": "^0.3.1", "yaml": "^2.8.2" }, "peerDependencies": { "@pinia/colada": ">=0.21.2", "@vue/compiler-sfc": "^3.5.17", "pinia": "^3.0.4", "vue": "^3.5.0" }, "optionalPeers": ["@pinia/colada", "@vue/compiler-sfc", "pinia"] }, "sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg=="], + "postcss-normalize-unicode/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + + "postcss-reduce-initial/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], + + "proper-lockfile/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], "rc9/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], - "rollup-plugin-visualizer/open": ["open@8.4.2", "", { "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" } }, "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ=="], + "rollup-plugin-visualizer/open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="], "serve-placeholder/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], - "svgo/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], - "tar/yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], + "string-width-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], - "terser/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "strip-ansi-cjs/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "stylehacks/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], - "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + "svgo/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="], + + "terser/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "unctx/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], @@ -2339,16 +2417,30 @@ "unimport/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "unimport/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "unimport/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "unimport/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], "unimport/unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], + "unplugin/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "unplugin-auto-import/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "unplugin-auto-import/unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], - "unplugin-vue-components/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "unplugin-utils/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "unplugin-vue-components/local-pkg": ["local-pkg@1.2.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q=="], "unrouting/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "unrouting/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "unstorage/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "untun/citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], "untun/pathe": ["pathe@1.1.2", "", {}, "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="], @@ -2357,14 +2449,20 @@ "untyped/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "untyped/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "unwasm/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "unwasm/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "vaul-vue/@vueuse/core": ["@vueuse/core@10.11.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.20", "@vueuse/metadata": "10.11.1", "@vueuse/shared": "10.11.1", "vue-demi": ">=0.14.8" } }, "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww=="], "vaul-vue/reka-ui": ["reka-ui@2.9.2", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^14.1.0", "@vueuse/shared": "^14.1.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.4.0" } }, "sha512-/t4e6y1hcG+uDuRfpg6tbMz3uUEvRzNco6NeYTufoJeUghy5Iosxos5YL/p+ieAsid84sdMX9OrgDqpEuCJhBw=="], "vaul-vue/vue": ["vue@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/compiler-sfc": "3.5.30", "@vue/runtime-dom": "3.5.30", "@vue/server-renderer": "3.5.30", "@vue/shared": "3.5.30" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg=="], + "vite/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "vite/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], "vite/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], @@ -2375,9 +2473,7 @@ "vite-plugin-checker/npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="], - "vite-plugin-checker/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - - "vue/@vue/shared": ["@vue/shared@3.5.33", "", {}, "sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ=="], + "vue-bundle-renderer/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], "vue-eslint-parser/eslint-scope": ["eslint-scope@9.1.0", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ=="], @@ -2385,24 +2481,74 @@ "vue-eslint-parser/espree": ["espree@11.1.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw=="], - "vue-router/@vue/devtools-api": ["@vue/devtools-api@8.0.6", "", { "dependencies": { "@vue/devtools-kit": "^8.0.6" } }, "sha512-+lGBI+WTvJmnU2FZqHhEB8J1DXcvNlDeEalz77iYgOdY1jTj1ipSBaKj3sRhYcy+kqA8v/BSuvOz1XJucfQmUA=="], + "vue-router/@vue/devtools-api": ["@vue/devtools-api@8.1.2", "", { "dependencies": { "@vue/devtools-kit": "^8.1.2" } }, "sha512-vA0O112YqyDuNA1s7Yb2gCgToQ/OxOWiFDO5ThLCcDy0ldHnSd1dUTaSYhOldbqoNgumE4dxtGAoAaSUKUD1Zg=="], + + "wrap-ansi-cjs/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "wrap-ansi-cjs/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "@babel/core/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-annotate-as-pure/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "@babel/helper-member-expression-to-functions/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-module-imports/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-optimise-call-expression/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-skip-transparent-expression-wrappers/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "vue-router/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@babel/helpers/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.29.7", "", {}, "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw=="], + + "@babel/parser/@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.29.7", "", {}, "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg=="], + + "@babel/template/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/traverse/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@dxup/nuxt/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + + "@dxup/nuxt/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@dxup/nuxt/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + + "@dxup/nuxt/@nuxt/kit/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], "@eslint/config-inspector/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], - "@nuxt/cli/@clack/prompts/@clack/core": ["@clack/core@1.1.0", "", { "dependencies": { "sisteransi": "^1.0.5" } }, "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA=="], + "@eslint/config-inspector/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@nuxt/cli/@clack/prompts/@clack/core": ["@clack/core@1.4.0", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-7Wctjq6f7c1CPz8sPpkwUnz8yRgVANkpNupb81q432FjcJg4l+Sw7XANdNSdWfAKq0IHI0JTcUeK5dxs/HrGPw=="], + + "@nuxt/cli/c12/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], "@nuxt/devtools-kit/@nuxt/kit/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "@nuxt/devtools-kit/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@nuxt/devtools-kit/@nuxt/kit/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "@nuxt/devtools-kit/@nuxt/kit/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "@nuxt/devtools-kit/@nuxt/kit/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "@nuxt/devtools-kit/@nuxt/kit/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@nuxt/devtools-kit/@nuxt/kit/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "@nuxt/devtools-wizard/@clack/prompts/@clack/core": ["@clack/core@1.1.0", "", { "dependencies": { "sisteransi": "^1.0.5" } }, "sha512-SVcm4Dqm2ukn64/8Gub2wnlA5nS2iWJyCkdNHcvNHPIeBTGojpdJ+9cZKwLfmqy7irD4N5qLteSilJlE0WLAtA=="], + "@nuxt/devtools/nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], + + "@nuxt/devtools/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@nuxt/devtools/which/isexe": ["isexe@4.0.0", "", {}, "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw=="], "@nuxt/eslint-config/@typescript-eslint/parser/@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.57.1", "", { "dependencies": { "@typescript-eslint/types": "8.57.1", "@typescript-eslint/visitor-keys": "8.57.1" } }, "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg=="], @@ -2417,30 +2563,66 @@ "@nuxt/fonts/h3/cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], - "@nuxt/nitro-server/@unhead/vue/hookable": ["hookable@6.1.0", "", {}, "sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw=="], + "@nuxt/fonts/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit": ["@nuxt/kit@4.4.2", "", { "dependencies": { "c12": "^3.3.3", "consola": "^3.4.2", "defu": "^6.1.4", "destr": "^2.0.5", "errx": "^0.1.0", "exsolve": "^1.0.8", "ignore": "^7.0.5", "jiti": "^2.6.1", "klona": "^2.0.6", "mlly": "^1.8.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "rc9": "^3.0.0", "scule": "^1.3.0", "semver": "^7.7.4", "tinyglobby": "^0.2.15", "ufo": "^1.6.3", "unctx": "^2.5.0", "untyped": "^2.0.0" } }, "sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog=="], + + "@nuxt/icon/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + + "@nuxt/icon/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@nuxt/icon/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], - "@nuxt/nitro-server/@unhead/vue/unhead": ["unhead@2.1.12", "", { "dependencies": { "hookable": "^6.0.1" } }, "sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA=="], + "@nuxt/icon/@nuxt/kit/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], - "@nuxt/nitro-server/h3/cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], + "@nuxt/icon/local-pkg/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "@nuxt/nitro-server/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.30", "", { "dependencies": { "@vue/compiler-core": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g=="], + "@nuxt/kit/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "@nuxt/nitro-server/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/compiler-core": "3.5.30", "@vue/compiler-dom": "3.5.30", "@vue/compiler-ssr": "3.5.30", "@vue/shared": "3.5.30", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.8", "source-map-js": "^1.2.1" } }, "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A=="], + "@nuxt/nitro-server/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], - "@nuxt/nitro-server/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.30", "", { "dependencies": { "@vue/reactivity": "3.5.30", "@vue/runtime-core": "3.5.30", "@vue/shared": "3.5.30", "csstype": "^3.2.3" } }, "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw=="], + "@nuxt/nitro-server/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "@nuxt/nitro-server/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.30", "", { "dependencies": { "@vue/compiler-ssr": "3.5.30", "@vue/shared": "3.5.30" }, "peerDependencies": { "vue": "3.5.30" } }, "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ=="], + "@nuxt/nitro-server/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + + "@nuxt/nitro-server/@nuxt/kit/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + + "@nuxt/nitro-server/h3/cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], + + "@nuxt/nitro-server/unstorage/lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], + + "@nuxt/ui/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + + "@nuxt/ui/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@nuxt/ui/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + + "@nuxt/ui/@nuxt/kit/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + + "@nuxt/vite-builder/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + + "@nuxt/vite-builder/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + + "@nuxt/vite-builder/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + + "@nuxt/vite-builder/@nuxt/kit/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], + + "@nuxt/vite-builder/vite/rollup": ["rollup@4.61.0", "", { "dependencies": { "@types/estree": "1.0.9" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.61.0", "@rollup/rollup-android-arm64": "4.61.0", "@rollup/rollup-darwin-arm64": "4.61.0", "@rollup/rollup-darwin-x64": "4.61.0", "@rollup/rollup-freebsd-arm64": "4.61.0", "@rollup/rollup-freebsd-x64": "4.61.0", "@rollup/rollup-linux-arm-gnueabihf": "4.61.0", "@rollup/rollup-linux-arm-musleabihf": "4.61.0", "@rollup/rollup-linux-arm64-gnu": "4.61.0", "@rollup/rollup-linux-arm64-musl": "4.61.0", "@rollup/rollup-linux-loong64-gnu": "4.61.0", "@rollup/rollup-linux-loong64-musl": "4.61.0", "@rollup/rollup-linux-ppc64-gnu": "4.61.0", "@rollup/rollup-linux-ppc64-musl": "4.61.0", "@rollup/rollup-linux-riscv64-gnu": "4.61.0", "@rollup/rollup-linux-riscv64-musl": "4.61.0", "@rollup/rollup-linux-s390x-gnu": "4.61.0", "@rollup/rollup-linux-x64-gnu": "4.61.0", "@rollup/rollup-linux-x64-musl": "4.61.0", "@rollup/rollup-openbsd-x64": "4.61.0", "@rollup/rollup-openharmony-arm64": "4.61.0", "@rollup/rollup-win32-arm64-msvc": "4.61.0", "@rollup/rollup-win32-ia32-msvc": "4.61.0", "@rollup/rollup-win32-x64-gnu": "4.61.0", "@rollup/rollup-win32-x64-msvc": "4.61.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g=="], "@nuxtjs/color-mode/@nuxt/kit/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "@nuxtjs/color-mode/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@nuxtjs/color-mode/@nuxt/kit/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "@nuxtjs/color-mode/@nuxt/kit/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], "@nuxtjs/color-mode/@nuxt/kit/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], "@nuxtjs/color-mode/@nuxt/kit/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@nuxtjs/color-mode/@nuxt/kit/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "@nuxtjs/color-mode/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], "@nuxtjs/color-mode/pkg-types/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], @@ -2451,10 +2633,16 @@ "@pinia/nuxt/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@pinia/nuxt/@nuxt/kit/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + "@pinia/nuxt/@nuxt/kit/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "@pinia/nuxt/@nuxt/kit/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "@pinia/nuxt/@nuxt/kit/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@pinia/nuxt/@nuxt/kit/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "@stylistic/eslint-plugin/espree/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "@typescript-eslint/eslint-plugin/@typescript-eslint/scope-manager/@typescript-eslint/types": ["@typescript-eslint/types@8.57.1", "", {}, "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ=="], @@ -2481,6 +2669,10 @@ "@typescript-eslint/utils/@typescript-eslint/typescript-estree/ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="], + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core": ["@emnapi/core@1.8.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg=="], + + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], + "@vue-macros/common/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], "@vue-macros/common/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.28", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ=="], @@ -2495,6 +2687,10 @@ "@vue-macros/common/@vue/compiler-sfc/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + "@vue/babel-plugin-jsx/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@vue/babel-plugin-resolve-type/@babel/parser/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + "@vue/babel-plugin-resolve-type/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.28", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.28", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ=="], "@vue/babel-plugin-resolve-type/@vue/compiler-sfc/@vue/compiler-dom": ["@vue/compiler-dom@3.5.28", "", { "dependencies": { "@vue/compiler-core": "3.5.28", "@vue/shared": "3.5.28" } }, "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA=="], @@ -2515,13 +2711,13 @@ "@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], - "@vueuse/nuxt/@nuxt/kit/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "@vueuse/nuxt/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], "@vueuse/nuxt/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "@vueuse/nuxt/@nuxt/kit/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "@vueuse/nuxt/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], - "@vueuse/nuxt/@nuxt/kit/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "@vueuse/nuxt/@nuxt/kit/semver": ["semver@7.8.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg=="], "archiver-utils/glob/jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], @@ -2529,74 +2725,252 @@ "archiver-utils/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + "ast-kit/@babel/parser/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "ast-walker-scope/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "autoprefixer/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "autoprefixer/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "autoprefixer/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], + "c12/giget/citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + "c12/giget/nypm": ["nypm@0.6.5", "", { "dependencies": { "citty": "^0.2.0", "pathe": "^2.0.3", "tinyexec": "^1.0.2" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ=="], + + "cssnano-preset-default/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "cssnano-preset-default/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "cssnano-preset-default/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], + "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], "eslint-flat-config-utils/@eslint/config-helpers/@eslint/core": ["@eslint/core@1.1.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw=="], "fontaine/unplugin/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "fontaine/unplugin/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], - "listhen/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - - "listhen/mlly/pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - - "listhen/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "listhen/h3/cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], "local-pkg/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "local-pkg/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "local-pkg/mlly/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "magic-regexp/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "magic-regexp/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], "magic-regexp/unplugin/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "magic-regexp/unplugin/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "magicast/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], "mlly/pkg-types/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], - "nitropack/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "nitropack/c12/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + + "nitropack/esbuild/@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.28.0", "", { "os": "aix", "cpu": "ppc64" }, "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA=="], + + "nitropack/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.28.0", "", { "os": "android", "cpu": "arm" }, "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ=="], + + "nitropack/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.28.0", "", { "os": "android", "cpu": "arm64" }, "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw=="], + + "nitropack/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.28.0", "", { "os": "android", "cpu": "x64" }, "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA=="], + + "nitropack/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.28.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q=="], + + "nitropack/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.28.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ=="], + + "nitropack/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.28.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q=="], + + "nitropack/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.28.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw=="], + + "nitropack/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.28.0", "", { "os": "linux", "cpu": "arm" }, "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw=="], + + "nitropack/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.28.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A=="], + + "nitropack/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.28.0", "", { "os": "linux", "cpu": "ia32" }, "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ=="], + + "nitropack/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg=="], + + "nitropack/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w=="], + + "nitropack/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.28.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg=="], + + "nitropack/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.28.0", "", { "os": "linux", "cpu": "none" }, "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ=="], + + "nitropack/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.28.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q=="], + + "nitropack/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.28.0", "", { "os": "linux", "cpu": "x64" }, "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ=="], + + "nitropack/esbuild/@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw=="], + + "nitropack/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.28.0", "", { "os": "none", "cpu": "x64" }, "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw=="], + + "nitropack/esbuild/@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.28.0", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g=="], + + "nitropack/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.28.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA=="], + + "nitropack/esbuild/@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.28.0", "", { "os": "none", "cpu": "arm64" }, "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w=="], + + "nitropack/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.28.0", "", { "os": "sunos", "cpu": "x64" }, "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw=="], + + "nitropack/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.28.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA=="], + + "nitropack/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.28.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA=="], + + "nitropack/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.28.0", "", { "os": "win32", "cpu": "x64" }, "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw=="], + + "nitropack/h3/cookie-es": ["cookie-es@1.2.3", "", {}, "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw=="], + + "nitropack/ioredis/@ioredis/commands": ["@ioredis/commands@1.10.0", "", {}, "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q=="], + + "nitropack/ioredis/cluster-key-slot": ["cluster-key-slot@1.1.1", "", {}, "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw=="], + + "nitropack/rollup/@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.61.0", "", { "os": "android", "cpu": "arm" }, "sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ=="], + + "nitropack/rollup/@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.61.0", "", { "os": "android", "cpu": "arm64" }, "sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg=="], + + "nitropack/rollup/@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.61.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w=="], + + "nitropack/rollup/@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.61.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg=="], + + "nitropack/rollup/@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.61.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw=="], + + "nitropack/rollup/@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.61.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q=="], + + "nitropack/rollup/@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.61.0", "", { "os": "linux", "cpu": "arm" }, "sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g=="], + + "nitropack/rollup/@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.61.0", "", { "os": "linux", "cpu": "arm" }, "sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw=="], + + "nitropack/rollup/@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.61.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q=="], + + "nitropack/rollup/@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.61.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw=="], + + "nitropack/rollup/@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA=="], + + "nitropack/rollup/@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g=="], + + "nitropack/rollup/@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.61.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA=="], + + "nitropack/rollup/@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.61.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw=="], + + "nitropack/rollup/@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg=="], + + "nitropack/rollup/@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw=="], + + "nitropack/rollup/@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.61.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA=="], + + "nitropack/rollup/@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.61.0", "", { "os": "linux", "cpu": "x64" }, "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA=="], + + "nitropack/rollup/@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.61.0", "", { "os": "linux", "cpu": "x64" }, "sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw=="], + + "nitropack/rollup/@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.61.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg=="], + + "nitropack/rollup/@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.61.0", "", { "os": "none", "cpu": "arm64" }, "sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w=="], + + "nitropack/rollup/@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.61.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg=="], + + "nitropack/rollup/@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.61.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg=="], + + "nitropack/rollup/@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.61.0", "", { "os": "win32", "cpu": "x64" }, "sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ=="], + + "nitropack/rollup/@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.61.0", "", { "os": "win32", "cpu": "x64" }, "sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw=="], + + "nitropack/rollup/@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], + + "nitropack/unimport/local-pkg": ["local-pkg@1.2.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q=="], + + "nitropack/unstorage/lru-cache": ["lru-cache@11.5.1", "", {}, "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A=="], + + "nuxt/@nuxt/kit/c12": ["c12@3.3.4", "", { "dependencies": { "chokidar": "^5.0.0", "confbox": "^0.2.4", "defu": "^6.1.6", "dotenv": "^17.3.1", "exsolve": "^1.0.8", "giget": "^3.2.0", "jiti": "^2.6.1", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^2.1.0", "pkg-types": "^2.3.0", "rc9": "^3.0.1" }, "peerDependencies": { "magicast": "*" }, "optionalPeers": ["magicast"] }, "sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA=="], + + "nuxt/@nuxt/kit/rc9": ["rc9@3.0.1", "", { "dependencies": { "defu": "^6.1.6", "destr": "^2.0.5" } }, "sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ=="], + + "nuxt/unimport/local-pkg": ["local-pkg@1.2.1", "", { "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.3.0", "quansync": "^0.2.11" } }, "sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q=="], - "nitropack/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "postcss-colormin/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], - "nitropack/youch/@poppinss/dumper": ["@poppinss/dumper@0.6.5", "", { "dependencies": { "@poppinss/colors": "^4.1.5", "@sindresorhus/is": "^7.0.2", "supports-color": "^10.0.0" } }, "sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw=="], + "postcss-colormin/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], - "nuxt/@unhead/vue/hookable": ["hookable@6.1.0", "", {}, "sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw=="], + "postcss-colormin/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], - "nuxt/@unhead/vue/unhead": ["unhead@2.1.12", "", { "dependencies": { "hookable": "^6.0.1" } }, "sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA=="], + "postcss-convert-values/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], - "nuxt/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.30", "", { "dependencies": { "@vue/compiler-core": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g=="], + "postcss-convert-values/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], - "nuxt/vue/@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/compiler-core": "3.5.30", "@vue/compiler-dom": "3.5.30", "@vue/compiler-ssr": "3.5.30", "@vue/shared": "3.5.30", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.8", "source-map-js": "^1.2.1" } }, "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A=="], + "postcss-convert-values/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], - "nuxt/vue/@vue/runtime-dom": ["@vue/runtime-dom@3.5.30", "", { "dependencies": { "@vue/reactivity": "3.5.30", "@vue/runtime-core": "3.5.30", "@vue/shared": "3.5.30", "csstype": "^3.2.3" } }, "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw=="], + "postcss-merge-rules/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], - "nuxt/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.30", "", { "dependencies": { "@vue/compiler-ssr": "3.5.30", "@vue/shared": "3.5.30" }, "peerDependencies": { "vue": "3.5.30" } }, "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ=="], + "postcss-merge-rules/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], - "nuxt/vue-router/@vue/devtools-api": ["@vue/devtools-api@8.0.6", "", { "dependencies": { "@vue/devtools-kit": "^8.0.6" } }, "sha512-+lGBI+WTvJmnU2FZqHhEB8J1DXcvNlDeEalz77iYgOdY1jTj1ipSBaKj3sRhYcy+kqA8v/BSuvOz1XJucfQmUA=="], + "postcss-merge-rules/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], - "nuxt/vue-router/mlly": ["mlly@1.8.0", "", { "dependencies": { "acorn": "^8.15.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.1" } }, "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g=="], + "postcss-minify-params/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "postcss-minify-params/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "postcss-minify-params/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], + + "postcss-minify-selectors/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "postcss-minify-selectors/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "postcss-minify-selectors/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], + + "postcss-normalize-unicode/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "postcss-normalize-unicode/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "postcss-normalize-unicode/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], + + "postcss-reduce-initial/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "postcss-reduce-initial/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "postcss-reduce-initial/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], "readdir-glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "rollup-plugin-visualizer/open/define-lazy-prop": ["define-lazy-prop@2.0.0", "", {}, "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og=="], + "rollup-plugin-visualizer/open/wsl-utils": ["wsl-utils@0.3.1", "", { "dependencies": { "is-wsl": "^3.1.0", "powershell-utils": "^0.1.0" } }, "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg=="], + + "string-width-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "stylehacks/browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.33", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-bA6+tcSLpz2tIEdDXZPpPTIuxBcC4+w6SieaYyfigIa4h8GlFxbA17v22Vx3JUtuZQj9SgOsnbK+aTBzyDyEuw=="], + + "stylehacks/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.364", "", {}, "sha512-G/dYE3+AYhyHwzTwg8UbnXf7zqMERYh7l2jJ3QujhFsH8agSYwtnGAR2aZ7f0AakIKJXd5En/Hre4igIUrdlYw=="], + + "stylehacks/browserslist/node-releases": ["node-releases@2.0.46", "", {}, "sha512-GYVXHE2KnrzAfsAjl4uP++evGFCrAU1jta4ubEjIG7YWt/64Gqv66a30yKwWczVjA6j3bM4nBwH7Pk1JmDHaxQ=="], - "rollup-plugin-visualizer/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "unctx/unplugin/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], "unimport/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "unimport/mlly/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "unplugin-auto-import/unplugin/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "unplugin-vue-components/local-pkg/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + "unwasm/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "unwasm/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "unwasm/mlly/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "vaul-vue/@vueuse/core/@types/web-bluetooth": ["@types/web-bluetooth@0.0.20", "", {}, "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="], "vaul-vue/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@10.11.1", "", {}, "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw=="], @@ -2611,6 +2985,8 @@ "vaul-vue/reka-ui/@vueuse/core": ["@vueuse/core@14.2.1", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "14.2.1", "@vueuse/shared": "14.2.1" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ=="], + "vaul-vue/reka-ui/@vueuse/shared": ["@vueuse/shared@14.2.1", "", { "peerDependencies": { "vue": "^3.5.0" } }, "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw=="], + "vaul-vue/reka-ui/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], "vaul-vue/vue/@vue/compiler-dom": ["@vue/compiler-dom@3.5.30", "", { "dependencies": { "@vue/compiler-core": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g=="], @@ -2621,18 +2997,28 @@ "vaul-vue/vue/@vue/server-renderer": ["@vue/server-renderer@3.5.30", "", { "dependencies": { "@vue/compiler-ssr": "3.5.30", "@vue/shared": "3.5.30" }, "peerDependencies": { "vue": "3.5.30" } }, "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ=="], + "vaul-vue/vue/@vue/shared": ["@vue/shared@3.5.30", "", {}, "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ=="], + "vite-plugin-checker/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], "vite-plugin-checker/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + "vite/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "vue-eslint-parser/espree/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - "vue-router/@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@8.0.6", "", { "dependencies": { "@vue/devtools-shared": "^8.0.6", "birpc": "^2.6.1", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^2.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw=="], + "vue-router/@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@8.1.2", "", { "dependencies": { "@vue/devtools-shared": "^8.1.2", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "sha512-f75/upc+GCyjXErpgPGz4582ujS0L/adAltGy+tqXMGUJpgAcfGr6CxnnhpZY8BHuMYt6KpbF8uaFrrQG66rGQ=="], + + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "wrap-ansi-cjs/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "@nuxt/devtools-kit/@nuxt/kit/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "@nuxt/devtools-kit/@nuxt/kit/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "@nuxt/devtools-kit/@nuxt/kit/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "@nuxt/eslint-config/@typescript-eslint/parser/@typescript-eslint/typescript-estree/@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.57.1", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.57.1", "@typescript-eslint/types": "^8.57.1", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg=="], "@nuxt/eslint-config/@typescript-eslint/parser/@typescript-eslint/typescript-estree/@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.57.1", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg=="], @@ -2643,73 +3029,115 @@ "@nuxt/eslint/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], - "@nuxt/nitro-server/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.30", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], - "@nuxt/nitro-server/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "@nuxt/nitro-server/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.30", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - "@nuxt/nitro-server/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "@nuxt/nitro-server/vue/@vue/compiler-sfc/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], - "@nuxt/nitro-server/vue/@vue/compiler-sfc/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], - "@nuxt/nitro-server/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.30", "", { "dependencies": { "@vue/shared": "3.5.30" } }, "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.61.0", "", { "os": "android", "cpu": "arm" }, "sha512-dnxczajOqt0gesZlN5pGQ1s1imQVrsmCw5G2Ci4oM+0WvNz3pyRnlWrT7McoZIb8VlFwCawdmbWRmxRn7HI+VQ=="], - "@nuxt/nitro-server/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.30", "", { "dependencies": { "@vue/reactivity": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.61.0", "", { "os": "android", "cpu": "arm64" }, "sha512-Bp3JpGP00Vu3f238ivRrjf7z3xSzVPXqCmaJYA9t2c+c8vKYvOzmXF7LkkeUalTEGd6cZcSWe+PFIP3Vy48fRg=="], - "@nuxt/nitro-server/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.61.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zaYIpr670mUmmZ1tVzUFplbQbG7h3Gugx3L5FoqhsC2m/YnLlR1a7zVLmXNPy+iY1tFPEbNG+HHBXZGyId0G5w=="], - "@nuxtjs/color-mode/pkg-types/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.61.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-+P49fvkv2dSoeevUW+lgZ/I2JHSsJCK1Lyjj7Cu6E4UHG4tS9XIefzIjo5qhgELjAclnen1rLzK2PMKJdo+Dyg=="], - "@pinia/nuxt/@nuxt/kit/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.61.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-l3FAAOyKJXH2ea6KNFN+MMgC/rnE94YGLXs2ehYqDcCoHt1DpvgWX75BhUJxN38XojP7Ul+4H8PRn7EdyqSDrw=="], - "@pinia/nuxt/@nuxt/kit/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.61.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-VokPN3TSctKj65cyCNPaUh4vMFA8awxOot/0sp+4J7ZlNRKQEhXhawqPwajoi8H5ZFt61i0ugZJuTKXBjGJ17Q=="], - "@vueuse/nuxt/@nuxt/kit/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.61.0", "", { "os": "linux", "cpu": "arm" }, "sha512-DxH0P3wxm+Yzs/p3zrk9dw1rURu8p0Nv5+MRK/L7OtnLNg5rLZraSBFZ8iUXOd9f2BlhJyEpIZUH/emjq4UJ4g=="], - "@vueuse/nuxt/@nuxt/kit/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.61.0", "", { "os": "linux", "cpu": "arm" }, "sha512-T6ZvMNe84kAz6TBWHC7hGAoEtzP1LWYw/AqayGWEF6uISt3Abk/st06LqRD9THd7Xz3NxzurUpzAuEAUbZf+nw=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.61.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-q/4hzvQkDs8b4jIBab1pnLiiM0ayTZsN2amBFPDzuyZxjEd4wDwx0UJFYM3cOZzSf5Kw8fnWSprJzIBMkcR44Q=="], - "archiver-utils/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.61.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-vvYWX3akdEAY6km+9wAqFDnk6pQsbJKVnj7xawcvs/+fdlYBGp+U+Qq/lLfpIxYIZvZLHMAKD9HLdacSx/r3dw=="], - "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-DePa5cqOxDP/Zp0VOXpeWaGew5iIv5DXp9NYbzkX5PFQyWVX9184WCTh3hvr/7lhXo8ZVlbFLkz8+o/q1dU6gA=="], - "listhen/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-LV8aWMB8UChglMCEzs7RkN0GsH29RJaLLqwm9fCIjlqwxQTiWAqNcc7wjBkH31hV0PU/yVxGYvrYsgfea2qw6g=="], - "local-pkg/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.61.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-QoNSnwQtaeNu5grdBbsL0tt1uyl5EnS8DA8Mr3nluMXbhdQNyhN+G4tBax7VCdxLKj8YJ0/4OO9Ho84jMnJtKA=="], - "magic-regexp/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.61.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-/zZp5MKapIIApE8trN8qLGNSiRN9TUoaUZ1cmVu4XnVdd5LQLOXTtyi+vtfUbNnT3iyjzpPqYeKXmvJ+gJGYWw=="], - "mlly/pkg-types/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-RbrzcD3aJ1k3UbtMRRBNwojdVVyXjuVAFTfn/xPa6EEl6GE9Sm/akPgFTb9aAC9pMKGJ6CtWxaGrqWcabH+ySg=="], + + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.61.0", "", { "os": "linux", "cpu": "none" }, "sha512-ZF+onDsBso8PJf1XaG9lB+O9RnBpKGnY6OrzC4CSHrtC1jb6jWLTKK4bRqdoCXHd22gyr2hiYmEAm8Wns/BOCw=="], + + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.61.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-Atk0aSIk5Zx2Wuh9dgRQgLP0Koc8hOeYpbWryMXyk8G8/HmPkwPPkMqIIDhrXHHYqfUzSJA/I7IWSBv8xSmRBA=="], + + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.61.0", "", { "os": "linux", "cpu": "x64" }, "sha512-0uMOcf3eZ5K+K4cYHkdxShFMPlPXCOdfDFEFn9dNYAEEd2cVvmOfH7zFgRVoDgmtQ1m9k5q7qfrHzyMAubKYUA=="], + + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.61.0", "", { "os": "linux", "cpu": "x64" }, "sha512-mvFtE4A/t/7hRJ7X8Ozmu8FsIkAUat2nzl12pgU337BRmq87AQUJztwHz2Zv5/tjo9/C95E66CK03SI/ToEDJw=="], + + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.61.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-z9b9+aTxvt8n2rNltMPvyaUfB8NJ+CVyOrGK/MdIKHx7B+lXmZpm/XbRsU7Rpf3fRqJ2uS6mBJiJveCtq8LHDg=="], - "nitropack/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.61.0", "", { "os": "none", "cpu": "arm64" }, "sha512-jXaXFqKMehsOc+g8R6oo33RRC6w07G9jDBxAE5eAKX7mOcCbZloYIPNhfG9Wl+P9O9IWHFO4OJgPi1Ml2qkt7w=="], - "nuxt/vue-router/@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@8.0.6", "", { "dependencies": { "@vue/devtools-shared": "^8.0.6", "birpc": "^2.6.1", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^2.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-9zXZPTJW72OteDXeSa5RVML3zWDCRcO5t77aJqSs228mdopYj5AiTpihozbsfFJ0IodfNs7pSgOGO3qfCuxDtw=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.61.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-OXNWVFocS2IA4+QplhTZZ2a+8hPZR7T8KuozsNmJKK8y7cp83StHvGksfHzPG3wczWTczyWHVQuqeiTUbjiyBg=="], - "nuxt/vue-router/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.61.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-AlAbNtBO637LxSldqV43z0FfXoGfl2TW1DgAg/bs7aQswFbDewz2SJm3BUhiGfbOVtW571xbc9p+REdxhyN/Eg=="], - "nuxt/vue-router/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.61.0", "", { "os": "win32", "cpu": "x64" }, "sha512-QRSrQXyJ1M4tjNXdR0/G/IgV6lzfQQJYBjlWIEYkY2Xs86DRl/iEpQ4blMDjJxSl7n19eDKKXMg0AmuBVYy8pQ=="], - "nuxt/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.30", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw=="], + "@nuxt/vite-builder/vite/rollup/@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.61.0", "", { "os": "win32", "cpu": "x64" }, "sha512-tkuFxhvKO/HlGd0VsINF6vHSYH8AF8W0TcNxKDK6JZmrehngFj78pToc8iemtnvwilDjs2G/qSzYFhe9U8q+fw=="], - "nuxt/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@nuxt/vite-builder/vite/rollup/@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], - "nuxt/vue/@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.30", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw=="], + "@nuxtjs/color-mode/@nuxt/kit/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "nuxt/vue/@vue/compiler-sfc/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA=="], + "@nuxtjs/color-mode/pkg-types/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "@nuxtjs/color-mode/pkg-types/mlly/ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "@pinia/nuxt/@nuxt/kit/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "@pinia/nuxt/@nuxt/kit/mlly/pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "@pinia/nuxt/@nuxt/kit/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@typescript-eslint/type-utils/@typescript-eslint/typescript-estree/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@typescript-eslint/utils/@typescript-eslint/typescript-estree/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "@unrs/resolver-binding-wasm32-wasi/@napi-rs/wasm-runtime/@emnapi/core/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.1.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ=="], + + "@vue-macros/common/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "@vue-macros/common/@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "@vue/babel-plugin-resolve-type/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@vue/babel-plugin-resolve-type/@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "archiver-utils/glob/jackspeak/@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "archiver-utils/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "archiver-utils/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "ast-kit/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "nuxt/vue/@vue/compiler-sfc/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "c12/giget/nypm/citty": ["citty@0.2.1", "", {}, "sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg=="], - "nuxt/vue/@vue/compiler-sfc/postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "local-pkg/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "magic-regexp/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - "nuxt/vue/@vue/runtime-dom/@vue/reactivity": ["@vue/reactivity@3.5.30", "", { "dependencies": { "@vue/shared": "3.5.30" } }, "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q=="], + "mlly/pkg-types/mlly/acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], - "nuxt/vue/@vue/runtime-dom/@vue/runtime-core": ["@vue/runtime-core@3.5.30", "", { "dependencies": { "@vue/reactivity": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg=="], + "nitropack/unimport/local-pkg/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "nuxt/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA=="], + "nuxt/unimport/local-pkg/pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], "readdir-glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], @@ -2719,6 +3147,8 @@ "vaul-vue/reka-ui/@tanstack/vue-virtual/@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.23", "", {}, "sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg=="], + "vaul-vue/reka-ui/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@14.2.1", "", {}, "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw=="], + "vaul-vue/vue/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.30", "", { "dependencies": { "@babel/parser": "^7.29.0", "@vue/shared": "3.5.30", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw=="], "vaul-vue/vue/@vue/compiler-sfc/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], @@ -2737,7 +3167,7 @@ "vaul-vue/vue/@vue/server-renderer/@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.30", "", { "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/shared": "3.5.30" } }, "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA=="], - "vue-router/@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@8.0.6", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg=="], + "vue-router/@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@8.1.2", "", {}, "sha512-X9RyVFYAdkBe4IUf5v48TxBF/6QPmF8CmWrDAjXzfUHrgQ/HGfTC1A6TqgXqZ03ye66l3AD51BAGD69IvKM9sw=="], "vue-router/@vue/devtools-api/@vue/devtools-kit/birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], @@ -2745,46 +3175,38 @@ "@nuxt/devtools-kit/@nuxt/kit/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - "@nuxt/eslint/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], + "@nuxt/eslint-config/@typescript-eslint/parser/@typescript-eslint/typescript-estree/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - "@nuxt/nitro-server/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], + "@nuxt/eslint/find-up/locate-path/p-locate/p-limit": ["p-limit@4.0.0", "", { "dependencies": { "yocto-queue": "^1.0.0" } }, "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ=="], - "@nuxt/nitro-server/vue/@vue/compiler-dom/@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "@nuxt/icon/@nuxt/devtools-kit/@nuxt/kit/tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], "@pinia/nuxt/@nuxt/kit/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - "@vueuse/nuxt/@nuxt/kit/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + "@vue-macros/common/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], "archiver-utils/glob/jackspeak/@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], "archiver-utils/glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], - "nuxt/vue-router/@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@8.0.6", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-Pp1JylTqlgMJvxW6MGyfTF8vGvlBSCAvMFaDCYa82Mgw7TT5eE5kkHgDvmOGHWeJE4zIDfCpCxHapsK2LtIAJg=="], - - "nuxt/vue-router/@vue/devtools-api/@vue/devtools-kit/birpc": ["birpc@2.9.0", "", {}, "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw=="], - - "nuxt/vue-router/@vue/devtools-api/@vue/devtools-kit/hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], - - "nuxt/vue-router/mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - - "nuxt/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], - - "nuxt/vue/@vue/compiler-dom/@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "vaul-vue/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser": ["@babel/parser@7.29.0", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww=="], "vaul-vue/vue/@vue/compiler-dom/@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], + "vaul-vue/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "vaul-vue/vue/@vue/compiler-sfc/postcss/nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "@nuxt/eslint/find-up/locate-path/p-locate/p-limit/yocto-queue": ["yocto-queue@1.2.2", "", {}, "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ=="], "archiver-utils/glob/jackspeak/@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "vaul-vue/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], + + "vaul-vue/vue/@vue/compiler-sfc/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], - "archiver-utils/glob/jackspeak/@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "vaul-vue/vue/@vue/compiler-dom/@vue/compiler-core/@babel/parser/@babel/types/@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], } } diff --git a/frontend/package.json b/frontend/package.json index b30667a0..428e4a47 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,30 +21,30 @@ "prepare:test": "nuxt prepare --envName=development" }, "dependencies": { - "@iconify-json/lucide": "^1.2.104", + "@iconify-json/lucide": "^1.2.111", "@microsoft/fetch-event-source": "^2.0.1", "@noble/hashes": "^2.2.0", "@nuxt/eslint": "^1.15.2", "@nuxt/eslint-config": "^1.15.2", - "@nuxt/ui": "^4.7.1", + "@nuxt/ui": "^4.8.1", "@pinia/nuxt": "^0.11.3", - "@vueuse/core": "^14.2.1", - "@vueuse/nuxt": "^14.2.1", + "@vueuse/core": "^14.3.0", + "@vueuse/nuxt": "^14.3.0", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", - "assjs": "^0.1.6", + "assjs": "^0.1.7", "cronstrue": "^3.14.0", "hls.js": "^1.6.16", - "marked": "^18.0.2", + "marked": "^18.0.4", "marked-alert": "^2.1.2", "marked-base-url": "^1.1.9", "marked-gfm-heading-id": "^4.1.4", "moment": "^2.30.1", - "nuxt": "^4.4.2", + "nuxt": "^4.4.6", "pinia": "^3.0.4", - "tailwindcss": "^4.2.4", - "vue": "^3.5.33", - "vue-router": "^5.0.6", + "tailwindcss": "^4.3.0", + "vue": "^3.5.35", + "vue-router": "^5.1.0", "vuedraggable": "^4.1.0" }, "overrides": { @@ -55,14 +55,14 @@ "@parcel/watcher" ], "devDependencies": { - "@types/bun": "^1.3.13", + "@types/bun": "^1.3.14", "@types/node": "25.6.0", - "@typescript-eslint/parser": "^8.59.1", - "eslint": "^10.2.1", + "@typescript-eslint/parser": "^8.60.0", + "eslint": "^10.4.1", "oxfmt": "^0.47.0", "typescript": "^6.0.3", "vue-eslint-parser": "^10.4.0", - "vue-tsc": "^3.2.7" + "vue-tsc": "^3.3.3" }, "eslintIgnore": [ ".gitignore" diff --git a/mago.toml b/mago.toml index 46c3017a..585d94c4 100644 --- a/mago.toml +++ b/mago.toml @@ -2,7 +2,7 @@ php-version = "8.4.0" [source] workspace = "." -paths = ["src/", "test/"] +paths = ["src/", "tests/"] includes = ["vendor"] excludes = [] diff --git a/tests/API/Backend/UpdateTest.php b/tests/API/Backend/UpdateTest.php index 381bf568..0591e630 100644 --- a/tests/API/Backend/UpdateTest.php +++ b/tests/API/Backend/UpdateTest.php @@ -27,46 +27,53 @@ protected function setUp(): void $this->initTempApp(); Config::save('supported.fake', FakeBackendClient::class); - file_put_contents((string) Config::get('backends_file'), Yaml::dump([ - 'backend1' => [ - 'type' => 'fake', - 'url' => 'http://backend1.example.invalid', - 'token' => 'token1', - 'user' => 'user-1', - 'uuid' => 'uuid-1', - 'webhook' => [], - 'options' => [ - 'IMPORT_METADATA_ONLY' => true, - 'use_old_progress_endpoint' => true, - 'keep' => 'value1', - ], - 'import' => [ - 'enabled' => true, - ], - 'export' => [ - 'enabled' => true, - ], - ], - 'backend2' => [ - 'type' => 'fake', - 'url' => 'http://backend2.example.invalid', - 'token' => 'token2', - 'user' => 'user-2', - 'uuid' => 'uuid-2', - 'webhook' => [], - 'options' => [ - 'IMPORT_METADATA_ONLY' => true, - 'use_old_progress_endpoint' => true, - 'keep' => 'value2', - ], - 'import' => [ - 'enabled' => true, - ], - 'export' => [ - 'enabled' => true, + file_put_contents( + (string) Config::get('backends_file'), + Yaml::dump( + [ + 'backend1' => [ + 'type' => 'fake', + 'url' => 'http://backend1.example.invalid', + 'token' => 'token1', + 'user' => 'user-1', + 'uuid' => 'uuid-1', + 'webhook' => [], + 'options' => [ + 'IMPORT_METADATA_ONLY' => true, + 'use_old_progress_endpoint' => true, + 'keep' => 'value1', + ], + 'import' => [ + 'enabled' => true, + ], + 'export' => [ + 'enabled' => true, + ], + ], + 'backend2' => [ + 'type' => 'fake', + 'url' => 'http://backend2.example.invalid', + 'token' => 'token2', + 'user' => 'user-2', + 'uuid' => 'uuid-2', + 'webhook' => [], + 'options' => [ + 'IMPORT_METADATA_ONLY' => true, + 'use_old_progress_endpoint' => true, + 'keep' => 'value2', + ], + 'import' => [ + 'enabled' => true, + ], + 'export' => [ + 'enabled' => true, + ], + ], ], - ], - ], 8, 2)); + 8, + 2, + ), + ); } public function test_update_strips_deprecated_keys(): void @@ -148,22 +155,29 @@ public function test_accepts_recovered_token(): void { Config::save('supported.fake', TokenAwareBackendClient::class); - file_put_contents((string) Config::get('backends_file'), Yaml::dump([ - 'backend1' => [ - 'type' => 'fake', - 'url' => 'http://backend1.example.invalid', - 'token' => 'bad-token', - 'user' => 'user-1', - 'uuid' => 'uuid-1', - 'options' => [], - 'import' => [ - 'enabled' => true, - ], - 'export' => [ - 'enabled' => true, + file_put_contents( + (string) Config::get('backends_file'), + Yaml::dump( + [ + 'backend1' => [ + 'type' => 'fake', + 'url' => 'http://backend1.example.invalid', + 'token' => 'bad-token', + 'user' => 'user-1', + 'uuid' => 'uuid-1', + 'options' => [], + 'import' => [ + 'enabled' => true, + ], + 'export' => [ + 'enabled' => true, + ], + ], ], - ], - ], 8, 2)); + 8, + 2, + ), + ); $handler = new Update($this->createStub(iImport::class), new Logger('test')); diff --git a/tests/API/Identities/IndexTest.php b/tests/API/Identities/IndexTest.php index d03a4b7f..e9cbf18d 100644 --- a/tests/API/Identities/IndexTest.php +++ b/tests/API/Identities/IndexTest.php @@ -44,7 +44,7 @@ public function test_add_runs_migrations(): void self::assertFileExists($configFile); self::assertFileExists($dbFile); - $tables = (new PDO('sqlite:' . $dbFile)) + $tables = new PDO('sqlite:' . $dbFile) ->query("SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name") ->fetchAll(PDO::FETCH_COLUMN); diff --git a/tests/API/Logs/IndexTest.php b/tests/API/Logs/IndexTest.php index 5b9ff5bb..191cf865 100644 --- a/tests/API/Logs/IndexTest.php +++ b/tests/API/Logs/IndexTest.php @@ -22,7 +22,7 @@ public function test_formatLog_no_whitelist(): void $this->assertSame( "NOTICE: Processing 'main@emby_main' - '#123: IppSec' item.", $parsed['text'], - 'Log formatter should strip the timestamp prefix from the display text.' + 'Log formatter should strip the timestamp prefix from the display text.', ); } @@ -30,7 +30,11 @@ public function test_formatLog_stringifies(): void { $parsed = Index::formatLog(['message' => 'boom', 'code' => 1]); - $this->assertSame('{"message":"boom","code":1}', $parsed['text'], 'Non-string log payloads should be stringified for API consumers.'); + $this->assertSame( + '{"message":"boom","code":1}', + $parsed['text'], + 'Non-string log payloads should be stringified for API consumers.', + ); $this->assertNull($parsed['date'], 'Stringified payloads should not invent timestamps.'); $this->assertNull($parsed['item_id'], 'Stringified payloads should not invent item ids.'); $this->assertNull($parsed['user'], 'Stringified payloads should not invent users.'); diff --git a/tests/API/Player/StreamTest.php b/tests/API/Player/StreamTest.php index 0e455c53..b5cd9c0c 100644 --- a/tests/API/Player/StreamTest.php +++ b/tests/API/Player/StreamTest.php @@ -6,8 +6,8 @@ use App\API\Player\Stream; use App\API\System\Sign; -use App\Libs\Enums\Http\Status; use App\Libs\Emitter; +use App\Libs\Enums\Http\Status; use App\Libs\TestCase; use Nyholm\Psr7\ServerRequest; use Nyholm\Psr7\Uri; @@ -31,13 +31,13 @@ public function test_stream_range(): void 'version' => get_app_version(), ], cache: $cache); - $request = (new ServerRequest('GET', new Uri('http://localhost/v1/api/player/stream/' . $token))) + $request = new ServerRequest('GET', new Uri('http://localhost/v1/api/player/stream/' . $token)) ->withHeader('Range', 'bytes=1-3'); $response = (new Stream($cache))($request, $token); $out = ''; - (new Emitter()) + new Emitter() ->withHeaderFunc(static fn() => null) ->withHeadersSentFunc(static fn() => false) ->withBodyFunc(static function (string $data) use (&$out): void { @@ -67,7 +67,7 @@ public function test_stream_bad_range(): void 'version' => get_app_version(), ], cache: $cache); - $request = (new ServerRequest('GET', new Uri('http://localhost/v1/api/player/stream/' . $token))) + $request = new ServerRequest('GET', new Uri('http://localhost/v1/api/player/stream/' . $token)) ->withHeader('Range', 'bytes=10-20'); $response = (new Stream($cache))($request, $token); diff --git a/tests/API/Player/SubtitleTest.php b/tests/API/Player/SubtitleTest.php index 84a48ce1..5dfcf499 100644 --- a/tests/API/Player/SubtitleTest.php +++ b/tests/API/Player/SubtitleTest.php @@ -30,7 +30,7 @@ public function test_m3u8_ass(): void ]); $request = new ServerRequest('GET', new Uri('http://localhost/v1/api/player/subtitle/' . $token . '/ass.x0.m3u8')); - $response = (new Subtitle($cache, $logger))->m3u8($request, $token, 'ass', 'x', '0'); + $response = new Subtitle($cache, $logger)->m3u8($request, $token, 'ass', 'x', '0'); $this->assertSame(Status::OK, Status::from($response->getStatusCode())); $this->assertStringContainsString('/' . $token . '/x0.ass', (string) $response->getBody()); @@ -48,7 +48,7 @@ public function test_convert_bad_ext(): void ]); $request = new ServerRequest('GET', new Uri('http://localhost/v1/api/player/subtitle/' . $token . '/x0.txt')); - $response = (new Subtitle($cache, $logger))->convert($request, $token, 'x', '0', 'txt'); + $response = new Subtitle($cache, $logger)->convert($request, $token, 'x', '0', 'txt'); $this->assertSame(Status::BAD_REQUEST, Status::from($response->getStatusCode())); } @@ -78,7 +78,7 @@ public function test_m3u8_rejects_foreign_ext(): void ]); $request = new ServerRequest('GET', new Uri('http://localhost/v1/api/player/subtitle/' . $token . '/webvtt.x1.m3u8')); - $response = (new Subtitle($cache, $logger))->m3u8($request, $token, 'webvtt', 'x', '1'); + $response = new Subtitle($cache, $logger)->m3u8($request, $token, 'webvtt', 'x', '1'); $this->assertSame(Status::BAD_REQUEST, Status::from($response->getStatusCode())); } diff --git a/tests/API/System/CommandTest.php b/tests/API/System/CommandTest.php index fcab1417..57e273b6 100644 --- a/tests/API/System/CommandTest.php +++ b/tests/API/System/CommandTest.php @@ -271,5 +271,4 @@ public function test_cancel_run(): void $this->assertSame('Command cancellation requested.', ag($cancelPayload, 'message')); $this->assertFileExists($sessionPath . '/cancel.flag'); } - } diff --git a/tests/API/TasksTest.php b/tests/API/TasksTest.php index afd9bf66..4d5b979a 100644 --- a/tests/API/TasksTest.php +++ b/tests/API/TasksTest.php @@ -6,8 +6,8 @@ use App\API\Tasks; use App\Commands\System\TasksCommand; -use App\Libs\Enums\Http\Status; use App\Libs\Database\PDO\PDOAdapter; +use App\Libs\Enums\Http\Status; use App\Libs\TestCase; use App\Model\Events\EventsRepository; use App\Model\Events\EventStatus; @@ -61,7 +61,10 @@ public function test_prev_run_event(): void $payload = json_decode((string) $response->getBody(), true, flags: JSON_THROW_ON_ERROR); $indexPayload = json_decode((string) $index->getBody(), true, flags: JSON_THROW_ON_ERROR); - $items = array_values(array_filter((array) ag($indexPayload, 'tasks', []), static fn(array $item): bool => 'backup' === ($item['name'] ?? null))); + $items = array_values(array_filter( + (array) ag($indexPayload, 'tasks', []), + static fn(array $item): bool => 'backup' === ($item['name'] ?? null), + )); self::assertSame('2024-01-02T00:10:00+00:00', ag($payload, 'prev_run')); self::assertSame($queuedId, ag($payload, 'prev_run_event_id')); @@ -85,5 +88,4 @@ public function test_prev_run_estimate(): void self::assertNotNull(ag($payload, 'next_run')); self::assertNotSame(ag($payload, 'prev_run'), ag($payload, 'next_run')); } - } diff --git a/tests/Backends/Common/CacheTest.php b/tests/Backends/Common/CacheTest.php index 67caabbc..862ff0f5 100644 --- a/tests/Backends/Common/CacheTest.php +++ b/tests/Backends/Common/CacheTest.php @@ -19,10 +19,10 @@ class CacheTest extends TestCase { - private Cache|null $cache = null; - private PSRCache|null $psrCache = null; + private ?Cache $cache = null; + private ?PSRCache $psrCache = null; - private Logger|null $logger = null; + private ?Logger $logger = null; protected function setUp(): void { @@ -61,14 +61,14 @@ public function test_backend_cache_get(): void $this->assertEquals( $value, $this->cache->get($key), - 'Assert value type is preserved' + 'Assert value type is preserved', ); } $this->assertEquals( 'default_value', $this->cache->get('non_set', 'default_value'), - 'Assert default value is returned when key is not found' + 'Assert default value is returned when key is not found', ); } @@ -77,12 +77,12 @@ public function test_backend_cache_has(): void $this->cache->set('key_name', 'value'); $this->assertTrue( $this->cache->has('key_name'), - 'Assert key exists' + 'Assert key exists', ); $this->assertFalse( $this->cache->has('non_set'), - 'Assert key does not exist' + 'Assert key does not exist', ); } @@ -91,13 +91,13 @@ public function test_backend_cache_set(): void $this->cache->set('foo.bar', 'value'); $this->assertTrue( $this->cache->has('foo.bar'), - 'Assert key exists' + 'Assert key exists', ); $this->assertEquals( 'value', $this->cache->get('foo.bar'), - 'assert returned value is correct' + 'assert returned value is correct', ); } @@ -106,22 +106,22 @@ public function test_backend_cache_remove(): void $this->cache->set('foo.bar', 'value'); $this->assertTrue( $this->cache->has('foo.bar'), - 'Assert key exists' + 'Assert key exists', ); $this->assertTrue( $this->cache->remove('foo.bar'), - 'Assert remove() true is returned when key exists and is removed' + 'Assert remove() true is returned when key exists and is removed', ); $this->assertFalse( $this->cache->remove('foo.taz'), - 'Assert remove() false is returned when key does not exist' + 'Assert remove() false is returned when key does not exist', ); $this->assertFalse( $this->cache->has('foo.bar'), - 'Assert key does not exist' + 'Assert key does not exist', ); } @@ -130,35 +130,35 @@ public function test_backend_cache_total(): void $this->assertCount( 0, $this->cache, - 'Assert cache is empty' + 'Assert cache is empty', ); $this->cache->set('foo.bar', 'value'); $this->assertCount( 1, $this->cache, - 'Assert cache has 1 item' + 'Assert cache has 1 item', ); $this->cache->set('foo.baz', 'value'); $this->assertCount( 1, $this->cache, - 'Assert count still at 1 when adding another item with same parent key' + 'Assert count still at 1 when adding another item with same parent key', ); $this->cache->set('bar', 'value'); $this->assertCount( 2, $this->cache, - 'There should be 2 items in the cache' + 'There should be 2 items in the cache', ); $this->cache->remove('foo.bar'); $this->assertCount( 2, $this->cache, - 'Assert count still at 2 when removing a single item from a parent key' + 'Assert count still at 2 when removing a single item from a parent key', ); $this->cache->remove('foo'); @@ -166,7 +166,7 @@ public function test_backend_cache_total(): void $this->assertCount( 0, $this->cache, - 'Assert cache is empty after removing all items' + 'Assert cache is empty after removing all items', ); } @@ -180,7 +180,7 @@ public function getItem(mixed $key): CacheItem { throw new InvalidArgumentException('foo'); } - } + }, ), ); @@ -189,7 +189,7 @@ public function getItem(mixed $key): CacheItem $this->assertStringContainsString( 'Failed to load cache data for key', $this->handler->getRecords()[0]['message'], - 'Assert exception is caught and logged' + 'Assert exception is caught and logged', ); } @@ -198,9 +198,9 @@ public function test_backend_cache__destruct(): void $c = new Cache( logger: $this->logger, cache: new class($this->logger) extends PSRCache { - public function __construct(private LoggerInterface $logger) - { - } + public function __construct( + private LoggerInterface $logger, + ) {} public function set(string $key, mixed $value, \DateInterval|int|null $ttl = null): bool { @@ -218,7 +218,7 @@ public function set(string $key, mixed $value, \DateInterval|int|null $ttl = nul $this->assertStringContainsString( 'set() called', $this->handler->getRecords()[0]['message'], - 'assert set() is called and exception is caught' + 'assert set() is called and exception is caught', ); } @@ -232,7 +232,7 @@ public function test_backend_cache__destruct_saved(): void $this->assertCount( 1, $this->psrCache->getData(), - 'Assert data is saved into backend.' + 'Assert data is saved into backend.', ); } } diff --git a/tests/Backends/Common/ErrorTest.php b/tests/Backends/Common/ErrorTest.php index c6602a11..9d69dd56 100644 --- a/tests/Backends/Common/ErrorTest.php +++ b/tests/Backends/Common/ErrorTest.php @@ -16,10 +16,10 @@ public function test_backend_error_object(): void 'not' => 'used', 'foo' => 'bar', 'arr' => [ - 'foo' => 'bar' + 'foo' => 'bar', ], - 'obj' => (object)[ - 'foo' => 'bar' + 'obj' => (object) [ + 'foo' => 'bar', ], 'res' => fopen('php://memory', 'r'), ]; @@ -37,36 +37,36 @@ public function test_backend_error_object(): void $this->assertTrue( $error->hasTags(), - 'hasTags() should return true of message contains tags.' + 'hasTags() should return true of message contains tags.', ); $this->assertFalse( $error->hasException(), - 'hasException() should return false if no previous exception is found.' + 'hasException() should return false if no previous exception is found.', ); $this->assertEquals( $message, $error->message, - 'Assert message is returned as it is with no formatting.' + 'Assert message is returned as it is with no formatting.', ); $this->assertEquals( 'Hello World bar! array{"foo":"bar"} [object stdClass] [resource (closed)] {taz}', $error->format(), - 'Assert message is formatted correctly if tags are found.' + 'Assert message is formatted correctly if tags are found.', ); $this->assertEquals( $context, $error->context, - 'Error object should have the same context as the one passed in the constructor.' + 'Error object should have the same context as the one passed in the constructor.', ); $this->assertEquals( Levels::ERROR->value, $error->level(), - 'level() should return the string value of the enum level.' + 'level() should return the string value of the enum level.', ); try { @@ -77,23 +77,23 @@ public function test_backend_error_object(): void $error = new Error('message with no tags', previous: $e); $this->assertFalse( $error->hasTags(), - 'hasTags() should return false if no tags are found.' + 'hasTags() should return false if no tags are found.', ); $this->assertSame( 'message with no tags', $error->format(), - 'format() should return the message as it is if no tags are found.' + 'format() should return the message as it is if no tags are found.', ); $this->assertTrue( $error->hasException(), - 'hasException() should return true if previous exception is set.' + 'hasException() should return true if previous exception is set.', ); $this->assertStringContainsString( 'message with no tags', $error->__toString(), - '__toString() should return the message.' + '__toString() should return the message.', ); } } diff --git a/tests/Backends/Common/ResponseTest.php b/tests/Backends/Common/ResponseTest.php index 6a5c319f..887a8af0 100644 --- a/tests/Backends/Common/ResponseTest.php +++ b/tests/Backends/Common/ResponseTest.php @@ -7,7 +7,6 @@ use App\Backends\Common\Cache; use App\Backends\Common\Error; use App\Libs\ConfigFile; - use App\Libs\Exceptions\Backends\RuntimeException; use App\Libs\Mappers\Import\DirectMapper; use App\Libs\TestCase; @@ -15,7 +14,6 @@ use App\Libs\UserContext; use Monolog\Handler\NullHandler; use Monolog\Logger; - use Symfony\Component\Cache\Adapter\NullAdapter; use Symfony\Component\Cache\Psr16Cache; @@ -40,15 +38,15 @@ public function test_tryResponse(): void file: __DIR__ . '/../../Fixtures/test_servers.yaml', autoSave: false, autoCreate: false, - autoBackup: false + autoBackup: false, ), mapper: new DirectMapper( logger: $logger, db: $db, - cache: $cache->getInterface() + cache: $cache->getInterface(), ), cache: $cache->getInterface(), - db: $db + db: $db, ), trace: false, ); @@ -57,18 +55,18 @@ public function test_tryResponse(): void $this->assertTrue( $response->hasError(), - 'Response object should not have an error if error is null.' + 'Response object should not have an error if error is null.', ); $this->assertNull( $response->response, - 'Response object should have the same response as the one passed in the constructor.' + 'Response object should have the same response as the one passed in the constructor.', ); $this->assertInstanceOf( Error::class, $response->getError(), - 'getError() should return an Error object in all cases even if error is null.' + 'getError() should return an Error object in all cases even if error is null.', ); $response = (fn() => $this->tryResponse($context, fn() => 'i am teapot'))(); @@ -76,8 +74,7 @@ public function test_tryResponse(): void $this->assertSame( 'i am teapot', $response->response, - 'Response object should have the same response as the one passed in the constructor.' + 'Response object should have the same response as the one passed in the constructor.', ); } - } diff --git a/tests/Backends/Emby/EmbyGuidTest.php b/tests/Backends/Emby/EmbyGuidTest.php index 321d421c..501bbff6 100644 --- a/tests/Backends/Emby/EmbyGuidTest.php +++ b/tests/Backends/Emby/EmbyGuidTest.php @@ -24,7 +24,7 @@ class EmbyGuidTest extends TestCase { - protected Logger|null $logger = null; + protected ?Logger $logger = null; private function logged(Level $level, string $message, bool $clear = false): bool { @@ -65,7 +65,7 @@ private function getClass(): EmbyGuid backendId: 's000000000000000000000000000000e', backendToken: 't000000000000000000000000000000e', backendUser: 'u000000000000000000000000000000e', - ) + ), ); } @@ -92,7 +92,7 @@ public function test__construct() $this->getClass(); $this->assertTrue( $this->logged(Level::Error, 'Failed to parse GUIDs file', true), - "Assert message logged when the value type does not match the expected type." + 'Assert message logged when the value type does not match the expected type.', ); } finally { Config::save('guid.file', $oldGuidFile); @@ -104,167 +104,159 @@ public function test_parseGUIDFile() Config::save('guid.file', null); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'version: 2.0'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file version is not supported.", - exception: InvalidArgumentException::class, - exceptionMessage: 'Unsupported file version' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'version: 2.0'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file version is not supported.', + exception: InvalidArgumentException::class, + exceptionMessage: 'Unsupported file version', + ); $this->checkException( closure: fn() => $this->getClass()->parseGUIDFile('not_set.yml'), - reason: "Failed to assert that the GUID file is not found.", + reason: 'Failed to assert that the GUID file is not found.', exception: InvalidArgumentException::class, - exceptionMessage: 'does not exist' + exceptionMessage: 'does not exist', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'fff: {_]'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file is invalid.", - exception: InvalidArgumentException::class, - exceptionMessage: 'Failed to parse GUIDs file' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'fff: {_]'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file is invalid.', + exception: InvalidArgumentException::class, + exceptionMessage: 'Failed to parse GUIDs file', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'invalid'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file is invalid.", - exception: InvalidArgumentException::class, - exceptionMessage: 'is not an array' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'invalid'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file is invalid.', + exception: InvalidArgumentException::class, + exceptionMessage: 'is not an array', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); touch($tmpFile); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Info, 'is empty', true), - "Failed to assert that the GUID file is empty." - ); - + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Info, 'is empty', true), + 'Failed to assert that the GUID file is empty.', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, Yaml::dump(['links' => 'foo'])); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Should throw an exception when there are no GUIDs mapping.", - exception: InvalidArgumentException::class, - exceptionMessage: 'links sub key is not an array' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, Yaml::dump(['links' => 'foo'])); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Should throw an exception when there are no GUIDs mapping.', + exception: InvalidArgumentException::class, + exceptionMessage: 'links sub key is not an array', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->handler->clear(); - $yaml = ['emby' => []]; - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->assertCount(0, $this->handler->getRecords(), "There should be no messages logged for empty list."); - $this->handler->clear(); - - - file_put_contents($tmpFile, Yaml::dump(ag_set($yaml, 'links.0', 'ff'))); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'Value must be an object.', true), - 'Assert links.0 key is an object.' - ); + $this->handler->clear(); + $yaml = ['emby' => []]; + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->assertCount(0, $this->handler->getRecords(), 'There should be no messages logged for empty list.'); + $this->handler->clear(); + file_put_contents($tmpFile, Yaml::dump(ag_set($yaml, 'links.0', 'ff'))); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'Value must be an object.', true), + 'Assert links.0 key is an object.', + ); $this->handler->clear(); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $yaml = ag_set(['links' => [['type' => 'emby']]], 'links.0.map', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map value must be an object.', true), - 'Assert map key is an object.' - ); - - $yaml = ag_set($yaml, 'links.0.map', []); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.from field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set(['links' => [['type' => 'emby']]], 'links.0.map', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map value must be an object.', true), + 'Assert map key is an object.', + ); - $yaml = ag_set($yaml, 'links.0.map.from', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.to field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map', []); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.from field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.to', 'foobar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'field does not starts with', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.from', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.to field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.to', 'guid_foobar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.to field is not a supported', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.to', 'foobar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'field does not starts with', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map', [ - 'from' => 'tsdb', - 'to' => Guid::GUID_IMDB, - ]); + $yaml = ag_set($yaml, 'links.0.map.to', 'guid_foobar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.to field is not a supported', true), + 'Assert to field is a string.', + ); - $this->handler->clear(); + $yaml = ag_set($yaml, 'links.0.map', [ + 'from' => 'tsdb', + 'to' => Guid::GUID_IMDB, + ]); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $class = $this->getClass(); - $class->parseGUIDFile($tmpFile); - $this->assertArrayHasKey( - 'tsdb', - ag($class->getConfig(), 'guidMapper', []), - 'Assert that the GUID mapping has been added.' - ); - $this->handler->clear(); + $this->handler->clear(); - $yaml = ag_set($yaml, 'links.0.map', [ - 'from' => 'imthedb', - 'to' => 'guid_imdb', - ]); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $class = $this->getClass(); + $class->parseGUIDFile($tmpFile); + $this->assertArrayHasKey( + 'tsdb', + ag($class->getConfig(), 'guidMapper', []), + 'Assert that the GUID mapping has been added.', + ); + $this->handler->clear(); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $class = $this->getClass(); - $class->parseGUIDFile($tmpFile); + $yaml = ag_set($yaml, 'links.0.map', [ + 'from' => 'imthedb', + 'to' => 'guid_imdb', + ]); - $this->assertArrayHasKey( - 'imthedb', - ag($class->getConfig(), 'guidMapper', []), - 'Assert that the GUID mapping has been added.' - ); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $class = $this->getClass(); + $class->parseGUIDFile($tmpFile); + $this->assertArrayHasKey( + 'imthedb', + ag($class->getConfig(), 'guidMapper', []), + 'Assert that the GUID mapping has been added.', + ); } public function test_isLocal() { $this->assertFalse( $this->getClass()->isLocal('test://123456/1/1'), - 'Should always return false, as emby does not have local GUIDs.' + 'Should always return false, as emby does not have local GUIDs.', ); } @@ -275,19 +267,25 @@ public function test_has() 'id' => 123, 'type' => EmbyClient::TYPE_EPISODE, 'title' => 'Test title', - 'year' => 2021 - ] + 'year' => 2021, + ], ]; - $this->assertTrue($this->getClass()->has([ - 'imdb' => '123456', - 'tvdb' => '123456', - ], $context), 'Assert that the GUID exists.'); + $this->assertTrue( + $this->getClass()->has([ + 'imdb' => '123456', + 'tvdb' => '123456', + ], $context), + 'Assert that the GUID exists.', + ); - $this->assertFalse($this->getClass()->has([ - ['none' => '123456'], - ['imdb' => ''], - ], $context), 'Assert that the GUID does not exist.'); + $this->assertFalse( + $this->getClass()->has([ + ['none' => '123456'], + ['imdb' => ''], + ], $context), + 'Assert that the GUID does not exist.', + ); } public function test_parse() @@ -301,42 +299,52 @@ public function test_parse() ], ]; - $this->assertEquals([ - Guid::GUID_IMDB => '123456', - Guid::GUID_TMDB => '123456', - Guid::GUID_ANIDB => '123456', - ], + $this->assertEquals( + [ + Guid::GUID_IMDB => '123456', + Guid::GUID_TMDB => '123456', + Guid::GUID_ANIDB => '123456', + ], $this->getClass()->parse([ 'imdb' => '123456', 'tmdb' => '123456', 'anidb' => '123456', ], $context), - 'Assert that the GUID exists.' + 'Assert that the GUID exists.', ); - $this->assertEquals([], $this->getClass()->parse([ - '' => '', - 'none' => '123456', - 'imdb' => '' - ], $context), 'Assert that the GUID does not exist. for invalid GUIDs.'); + $this->assertEquals( + [], + $this->getClass()->parse([ + '' => '', + 'none' => '123456', + 'imdb' => '', + ], $context), + 'Assert that the GUID does not exist. for invalid GUIDs.', + ); } public function test_get() { $context = ['item' => ['id' => 123, 'type' => 'episode', 'title' => 'Test title', 'year' => 2021]]; - $this->assertEquals([], $this->getClass()->get([ - ['imdb' => ''], - ], $context), 'Assert invalid guid return empty array.'); + $this->assertEquals( + [], + $this->getClass()->get([ + ['imdb' => ''], + ], $context), + 'Assert invalid guid return empty array.', + ); - $this->assertEquals([Guid::GUID_IMDB => '1', Guid::GUID_CMDB => 'afa', Guid::GUID_TVDB => '123'], + $this->assertEquals( + [Guid::GUID_IMDB => '1', Guid::GUID_CMDB => 'afa', Guid::GUID_TVDB => '123'], $this->getClass()->get([ 'imdb' => '1', 'cmdb' => 'afa', 'tvdb' => '123', 'none' => '123', ], $context), - 'Assert only the the oldest ID is returned for numeric GUIDs.' + 'Assert only the the oldest ID is returned for numeric GUIDs.', ); } @@ -347,8 +355,8 @@ public function test_get_ignore() 'id' => 123, 'type' => EmbyClient::TYPE_SHOW, 'title' => 'Test title', - 'year' => 2021 - ] + 'year' => 2021, + ], ]; // -- as we cache the ignore list for each user now, @@ -362,20 +370,20 @@ public function test_get_ignore() opts: [ 'reset' => true, 'list' => [ - (string)make_ignore_id('show://imdb:123@test_emby') => 1 - ] - ] + (string) make_ignore_id('show://imdb:123@test_emby') => 1, + ], + ], ); $this->assertEquals( expected: [], actual: $this->getClass()->get(['imdb' => '123'], $context), - message: 'Assert only the the oldest ID is returned for numeric GUIDs.' + message: 'Assert only the the oldest ID is returned for numeric GUIDs.', ); $this->assertTrue( $this->logged(Level::Debug, 'EmbyGuid: Ignoring', true), - 'Assert that a log is raised when the GUID is ignored by user choice.' + 'Assert that a log is raised when the GUID is ignored by user choice.', ); } } diff --git a/tests/Backends/Emby/GetImagesUrlTest.php b/tests/Backends/Emby/GetImagesUrlTest.php index fcb27d0f..c9aece08 100644 --- a/tests/Backends/Emby/GetImagesUrlTest.php +++ b/tests/Backends/Emby/GetImagesUrlTest.php @@ -23,5 +23,4 @@ public function test_builds_emby_image_urls(): void $this->assertStringContainsString('/emby/Items/item-1/Images/Primary/', (string) $response->response['poster']); $this->assertStringContainsString('/emby/Items/item-1/Images/Backdrop/', (string) $response->response['background']); } - } diff --git a/tests/Backends/Emby/InspectRequestTest.php b/tests/Backends/Emby/InspectRequestTest.php index 1f3acb85..1a7ad5b4 100644 --- a/tests/Backends/Emby/InspectRequestTest.php +++ b/tests/Backends/Emby/InspectRequestTest.php @@ -110,5 +110,4 @@ public function test_rejects_invalid_server_version(): void $this->assertFalse($response->isSuccessful()); } - } diff --git a/tests/Backends/Emby/ParseWebhookSuccessTest.php b/tests/Backends/Emby/ParseWebhookSuccessTest.php index bb82846a..b1d56043 100644 --- a/tests/Backends/Emby/ParseWebhookSuccessTest.php +++ b/tests/Backends/Emby/ParseWebhookSuccessTest.php @@ -37,7 +37,11 @@ public function test_parses_movie_webhook_payload(): void ), ), ); - return new GetMetaData($http, $this->createLogger(), new \Symfony\Component\Cache\Psr16Cache(new \Symfony\Component\Cache\Adapter\ArrayAdapter())); + return new GetMetaData( + $http, + $this->createLogger(), + new \Symfony\Component\Cache\Psr16Cache(new \Symfony\Component\Cache\Adapter\ArrayAdapter()), + ); }); $cache = new \Symfony\Component\Cache\Psr16Cache(new \Symfony\Component\Cache\Adapter\ArrayAdapter()); @@ -50,14 +54,14 @@ public function test_parses_movie_webhook_payload(): void backendId: 'backend-1', ); - $request = (new ServerRequest('POST', new Uri('http://mediabrowser.test'))) + $request = new ServerRequest('POST', new Uri('http://mediabrowser.test')) ->withParsedBody($payload['webhook_emby']); $action = new ParseWebhook($this->createLogger()); - $guid = (new EmbyGuid($this->createLogger()))->withContext($context); + $guid = new EmbyGuid($this->createLogger())->withContext($context); $result = $action($context, $guid, $request); - $message = $result->error?->format() ?? ($result->extra['message'] ?? ''); + $message = $result->error?->format() ?? $result->extra['message'] ?? ''; $this->assertTrue($result->isSuccessful(), $message); $this->assertSame('Test Movie', $result->response->title); } diff --git a/tests/Backends/Emby/ParseWebhookTest.php b/tests/Backends/Emby/ParseWebhookTest.php index 8f6d1144..74463434 100644 --- a/tests/Backends/Emby/ParseWebhookTest.php +++ b/tests/Backends/Emby/ParseWebhookTest.php @@ -25,7 +25,7 @@ public function test_rejects_unsupported_type(): void 'Item' => ['Type' => 'Audio', 'Id' => 'item-1'], ]; - $request = (new ServerRequest('POST', new Uri('http://mediabrowser.test')))->withParsedBody($payload); + $request = new ServerRequest('POST', new Uri('http://mediabrowser.test'))->withParsedBody($payload); $context = $this->createContext(EmbyClient::CLIENT_NAME); $logger = new Logger('test', [new NullHandler()]); @@ -43,7 +43,7 @@ public function test_rejects_unsupported_event(): void 'Item' => ['Type' => EmbyClient::TYPE_MOVIE, 'Id' => 'item-1'], ]; - $request = (new ServerRequest('POST', new Uri('http://mediabrowser.test')))->withParsedBody($payload); + $request = new ServerRequest('POST', new Uri('http://mediabrowser.test'))->withParsedBody($payload); $context = $this->createContext(EmbyClient::CLIENT_NAME); $logger = new Logger('test', [new NullHandler()]); @@ -53,5 +53,4 @@ public function test_rejects_unsupported_event(): void $this->assertFalse($response->isSuccessful()); $this->assertSame(200, $response->extra['http_code']); } - } diff --git a/tests/Backends/Jellyfin/GetImagesUrlTest.php b/tests/Backends/Jellyfin/GetImagesUrlTest.php index 62b143a1..308a8e9d 100644 --- a/tests/Backends/Jellyfin/GetImagesUrlTest.php +++ b/tests/Backends/Jellyfin/GetImagesUrlTest.php @@ -23,5 +23,4 @@ public function test_builds_jellyfin_image_urls(): void $this->assertStringContainsString('/Items/item-1/Images/Primary/', (string) $response->response['poster']); $this->assertStringContainsString('/Items/item-1/Images/Backdrop/', (string) $response->response['background']); } - } diff --git a/tests/Backends/Jellyfin/GetUserMissingBackendTest.php b/tests/Backends/Jellyfin/GetUserMissingBackendTest.php index f0917353..93894685 100644 --- a/tests/Backends/Jellyfin/GetUserMissingBackendTest.php +++ b/tests/Backends/Jellyfin/GetUserMissingBackendTest.php @@ -17,7 +17,10 @@ public function test_requires_backend_user(): void $logger = new \Monolog\Logger('test'); $action = new GetUser($http, $logger); - $cache = new \App\Backends\Common\Cache($logger, new \Symfony\Component\Cache\Psr16Cache(new \Symfony\Component\Cache\Adapter\ArrayAdapter())); + $cache = new \App\Backends\Common\Cache( + $logger, + new \Symfony\Component\Cache\Psr16Cache(new \Symfony\Component\Cache\Adapter\ArrayAdapter()), + ); $userContext = $this->createUserContext(JellyfinClient::CLIENT_NAME); $context = new \App\Backends\Common\Context( clientName: JellyfinClient::CLIENT_NAME, diff --git a/tests/Backends/Jellyfin/InspectRequestTest.php b/tests/Backends/Jellyfin/InspectRequestTest.php index b038c58e..6f5849f5 100644 --- a/tests/Backends/Jellyfin/InspectRequestTest.php +++ b/tests/Backends/Jellyfin/InspectRequestTest.php @@ -61,5 +61,4 @@ public function test_rejects_non_jellyfin_ua(): void $this->assertFalse($response->isSuccessful()); } - } diff --git a/tests/Backends/Jellyfin/JellyfinGuidTest.php b/tests/Backends/Jellyfin/JellyfinGuidTest.php index 8f39de6d..6e4766af 100644 --- a/tests/Backends/Jellyfin/JellyfinGuidTest.php +++ b/tests/Backends/Jellyfin/JellyfinGuidTest.php @@ -24,7 +24,7 @@ class JellyfinGuidTest extends TestCase { - protected Logger|null $logger = null; + protected ?Logger $logger = null; private function logged(Level $level, string $message, bool $clear = false): bool { @@ -65,7 +65,7 @@ private function getClass(): JellyfinGuid backendId: 's000000000000000000000000000000j', backendToken: 't000000000000000000000000000000j', backendUser: 'u000000000000000000000000000000j', - ) + ), ); } @@ -92,7 +92,7 @@ public function test__construct() $this->getClass(); $this->assertTrue( $this->logged(Level::Error, 'Failed to parse GUIDs file', true), - "Assert message logged when the value type does not match the expected type." + 'Assert message logged when the value type does not match the expected type.', ); } finally { Config::save('guid.file', $oldGuidFile); @@ -104,165 +104,157 @@ public function test_parseGUIDFile() Config::save('guid.file', null); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'version: 2.0'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file version is not supported.", - exception: InvalidArgumentException::class, - exceptionMessage: 'Unsupported file version' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'version: 2.0'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file version is not supported.', + exception: InvalidArgumentException::class, + exceptionMessage: 'Unsupported file version', + ); $this->checkException( closure: fn() => $this->getClass()->parseGUIDFile('not_set.yml'), - reason: "Failed to assert that the GUID file is not found.", + reason: 'Failed to assert that the GUID file is not found.', exception: InvalidArgumentException::class, - exceptionMessage: 'does not exist' + exceptionMessage: 'does not exist', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'fff: {_]'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file is invalid.", - exception: InvalidArgumentException::class, - exceptionMessage: 'Failed to parse GUIDs file' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'fff: {_]'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file is invalid.', + exception: InvalidArgumentException::class, + exceptionMessage: 'Failed to parse GUIDs file', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'invalid'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file is invalid.", - exception: InvalidArgumentException::class, - exceptionMessage: 'is not an array' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'invalid'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file is invalid.', + exception: InvalidArgumentException::class, + exceptionMessage: 'is not an array', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); touch($tmpFile); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Info, 'is empty', true), - "Failed to assert that the GUID file is empty." - ); - + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Info, 'is empty', true), + 'Failed to assert that the GUID file is empty.', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, Yaml::dump(['links' => 'foo'])); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Should throw an exception when there are no GUIDs mapping.", - exception: InvalidArgumentException::class, - exceptionMessage: 'links sub key is not an array' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, Yaml::dump(['links' => 'foo'])); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Should throw an exception when there are no GUIDs mapping.', + exception: InvalidArgumentException::class, + exceptionMessage: 'links sub key is not an array', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->handler->clear(); - $yaml = ['links' => []]; - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->assertCount(0, $this->handler->getRecords(), "There should be no messages logged for empty list."); - $this->handler->clear(); - - - file_put_contents($tmpFile, Yaml::dump(ag_set($yaml, 'links.0', 'ff'))); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'Value must be an object.', true), - 'Assert replace key is an object.' - ); + $this->handler->clear(); + $yaml = ['links' => []]; + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->assertCount(0, $this->handler->getRecords(), 'There should be no messages logged for empty list.'); + $this->handler->clear(); + file_put_contents($tmpFile, Yaml::dump(ag_set($yaml, 'links.0', 'ff'))); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'Value must be an object.', true), + 'Assert replace key is an object.', + ); $this->handler->clear(); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $yaml = ag_set(['links' => [0 => ['type' => 'jellyfin']]], 'links.0.map', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map value must be an object.', true), - 'Assert map key is an object.' - ); + $yaml = ag_set(['links' => [0 => ['type' => 'jellyfin']]], 'links.0.map', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map value must be an object.', true), + 'Assert map key is an object.', + ); - $yaml = ag_set($yaml, 'links.0.map', []); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.from field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map', []); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.from field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.from', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.to field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.from', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.to field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.to', 'foobar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'field does not starts with', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.to', 'foobar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'field does not starts with', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.to', 'guid_foobar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.to field is not a supported', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.to', 'guid_foobar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.to field is not a supported', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map', [ - 'from' => 'tsdb', - 'to' => Guid::GUID_IMDB, - ]); + $yaml = ag_set($yaml, 'links.0.map', [ + 'from' => 'tsdb', + 'to' => Guid::GUID_IMDB, + ]); - $this->handler->clear(); + $this->handler->clear(); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $class = $this->getClass(); - $class->parseGUIDFile($tmpFile); - $this->assertArrayHasKey( - 'tsdb', - ag($class->getConfig(), 'guidMapper', []), - 'Assert that the GUID mapping has been added.' - ); - $this->handler->clear(); - - $yaml = ag_set($yaml, 'links.0.map', [ - 'from' => 'imthedb', - 'to' => 'guid_imdb', - ]); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $class = $this->getClass(); - $class->parseGUIDFile($tmpFile); - $this->assertArrayHasKey( - 'imthedb', - ag($class->getConfig(), 'guidMapper', []), - 'Assert that the GUID mapping has been added.' - ); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $class = $this->getClass(); + $class->parseGUIDFile($tmpFile); + $this->assertArrayHasKey( + 'tsdb', + ag($class->getConfig(), 'guidMapper', []), + 'Assert that the GUID mapping has been added.', + ); + $this->handler->clear(); + $yaml = ag_set($yaml, 'links.0.map', [ + 'from' => 'imthedb', + 'to' => 'guid_imdb', + ]); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $class = $this->getClass(); + $class->parseGUIDFile($tmpFile); + $this->assertArrayHasKey( + 'imthedb', + ag($class->getConfig(), 'guidMapper', []), + 'Assert that the GUID mapping has been added.', + ); } public function test_isLocal() { $this->assertFalse( $this->getClass()->isLocal('test://123456/1/1'), - 'Should always return false, as Jellyfin does not have local GUIDs.' + 'Should always return false, as Jellyfin does not have local GUIDs.', ); } @@ -273,19 +265,25 @@ public function test_has() 'id' => 123, 'type' => JellyfinClient::TYPE_EPISODE, 'title' => 'Test title', - 'year' => 2021 - ] + 'year' => 2021, + ], ]; - $this->assertTrue($this->getClass()->has([ - 'imdb' => '123456', - 'tvdb' => '123456', - ], $context), 'Assert that the GUID exists.'); + $this->assertTrue( + $this->getClass()->has([ + 'imdb' => '123456', + 'tvdb' => '123456', + ], $context), + 'Assert that the GUID exists.', + ); - $this->assertFalse($this->getClass()->has([ - ['none' => '123456'], - ['imdb' => ''], - ], $context), 'Assert that the GUID does not exist.'); + $this->assertFalse( + $this->getClass()->has([ + ['none' => '123456'], + ['imdb' => ''], + ], $context), + 'Assert that the GUID does not exist.', + ); } public function test_parse() @@ -299,29 +297,34 @@ public function test_parse() ], ]; - $this->assertEquals([ - Guid::GUID_IMDB => '123456', - Guid::GUID_TMDB => '123456', - Guid::GUID_ANIDB => '123456', - ], + $this->assertEquals( + [ + Guid::GUID_IMDB => '123456', + Guid::GUID_TMDB => '123456', + Guid::GUID_ANIDB => '123456', + ], $this->getClass()->parse([ 'imdb' => '123456', 'tmdb' => '123456', 'anidb' => '123456', ], $context), - 'Assert that the GUID exists.' + 'Assert that the GUID exists.', ); - $this->assertEquals([], $this->getClass()->parse([ - '' => '', - 'none' => '123456', - 'imdb' => '' - ], $context), 'Assert that the GUID does not exist. for invalid GUIDs.'); + $this->assertEquals( + [], + $this->getClass()->parse([ + '' => '', + 'none' => '123456', + 'imdb' => '', + ], $context), + 'Assert that the GUID does not exist. for invalid GUIDs.', + ); $this->assertEquals( [Guid::GUID_TVMAZE => '123456'], $this->getClass()->parse(['tv maze' => '123456'], $context), - 'Assert "tv maze" get converted to "tvmaze".' + 'Assert "tv maze" get converted to "tvmaze".', ); } @@ -329,18 +332,23 @@ public function test_get() { $context = ['item' => ['id' => 123, 'type' => 'episode', 'title' => 'Test title', 'year' => 2021]]; - $this->assertEquals([], $this->getClass()->get([ - ['imdb' => ''], - ], $context), 'Assert invalid guid return empty array.'); + $this->assertEquals( + [], + $this->getClass()->get([ + ['imdb' => ''], + ], $context), + 'Assert invalid guid return empty array.', + ); - $this->assertEquals([Guid::GUID_IMDB => '1', Guid::GUID_CMDB => 'afa', Guid::GUID_TVDB => '123'], + $this->assertEquals( + [Guid::GUID_IMDB => '1', Guid::GUID_CMDB => 'afa', Guid::GUID_TVDB => '123'], $this->getClass()->get([ 'imdb' => '1', 'cmdb' => 'afa', 'tvdb' => '123', 'none' => '123', ], $context), - 'Assert only the the oldest ID is returned for numeric GUIDs.' + 'Assert only the the oldest ID is returned for numeric GUIDs.', ); } @@ -351,8 +359,8 @@ public function test_get_ignore() 'id' => 123, 'type' => JellyfinClient::TYPE_SHOW, 'title' => 'Test title', - 'year' => 2021 - ] + 'year' => 2021, + ], ]; // -- as we cache the ignore list for each user now, @@ -366,18 +374,20 @@ public function test_get_ignore() opts: [ 'reset' => true, 'list' => [ - (string)make_ignore_id('show://imdb:123@test_jellyfin') => 1 - ] - ] + (string) make_ignore_id('show://imdb:123@test_jellyfin') => 1, + ], + ], ); - $this->assertEquals([], + $this->assertEquals( + [], $this->getClass()->get(['imdb' => '123'], $context), - 'Assert only the the oldest ID is returned for numeric GUIDs.'); + 'Assert only the the oldest ID is returned for numeric GUIDs.', + ); $this->assertTrue( $this->logged(Level::Debug, 'JellyfinGuid: Ignoring', true), - 'Assert that a log is raised when the GUID is ignored by user choice.' + 'Assert that a log is raised when the GUID is ignored by user choice.', ); } } diff --git a/tests/Backends/Jellyfin/ParseWebhookSuccessTest.php b/tests/Backends/Jellyfin/ParseWebhookSuccessTest.php index 1b9ccb01..7da53833 100644 --- a/tests/Backends/Jellyfin/ParseWebhookSuccessTest.php +++ b/tests/Backends/Jellyfin/ParseWebhookSuccessTest.php @@ -52,14 +52,14 @@ public function test_parses_movie_webhook_payload(): void backendId: 'backend-1', ); - $request = (new ServerRequest('POST', new Uri('http://mediabrowser.test'))) + $request = new ServerRequest('POST', new Uri('http://mediabrowser.test')) ->withParsedBody($payload['webhook_jellyfin']); $action = new ParseWebhook($cache); - $guid = (new JellyfinGuid($this->createLogger()))->withContext($context); + $guid = new JellyfinGuid($this->createLogger())->withContext($context); $result = $action($context, $guid, $request); - $message = $result->error?->format() ?? ($result->extra['message'] ?? ''); + $message = $result->error?->format() ?? $result->extra['message'] ?? ''; $this->assertTrue($result->isSuccessful(), $message); $this->assertSame('Test Movie', $result->response->title); } diff --git a/tests/Backends/Jellyfin/ParseWebhookTest.php b/tests/Backends/Jellyfin/ParseWebhookTest.php index 1586f6a2..4bc61732 100644 --- a/tests/Backends/Jellyfin/ParseWebhookTest.php +++ b/tests/Backends/Jellyfin/ParseWebhookTest.php @@ -28,7 +28,7 @@ public function test_rejects_unsupported_type(): void 'ItemId' => 'item-1', ]; - $request = (new ServerRequest('POST', new Uri('http://mediabrowser.test')))->withParsedBody($payload); + $request = new ServerRequest('POST', new Uri('http://mediabrowser.test'))->withParsedBody($payload); $context = $this->createContext(JellyfinClient::CLIENT_NAME); $logger = new Logger('test', [new NullHandler()]); @@ -47,7 +47,7 @@ public function test_rejects_unsupported_event(): void 'ItemId' => 'item-1', ]; - $request = (new ServerRequest('POST', new Uri('http://mediabrowser.test')))->withParsedBody($payload); + $request = new ServerRequest('POST', new Uri('http://mediabrowser.test'))->withParsedBody($payload); $context = $this->createContext(JellyfinClient::CLIENT_NAME); $logger = new Logger('test', [new NullHandler()]); @@ -57,5 +57,4 @@ public function test_rejects_unsupported_event(): void $this->assertFalse($response->isSuccessful()); $this->assertSame(200, $response->extra['http_code']); } - } diff --git a/tests/Backends/MediaBrowser/BackupFlowTest.php b/tests/Backends/MediaBrowser/BackupFlowTest.php index 24bfc2db..23c2e416 100644 --- a/tests/Backends/MediaBrowser/BackupFlowTest.php +++ b/tests/Backends/MediaBrowser/BackupFlowTest.php @@ -4,13 +4,13 @@ namespace Tests\Backends\MediaBrowser; +use App\Backends\Common\Response; use App\Backends\Emby\Action\Backup as EmbyBackup; use App\Backends\Emby\Action\GetMetaData as EmbyGetMetaData; use App\Backends\Emby\EmbyGuid; use App\Backends\Jellyfin\Action\Backup as JellyfinBackup; use App\Backends\Jellyfin\Action\GetMetaData as JellyfinGetMetaData; use App\Backends\Jellyfin\JellyfinGuid; -use App\Backends\Common\Response; use App\Libs\Container; use App\Libs\Stream; use ReflectionMethod; @@ -27,7 +27,7 @@ public function test_backup_writes_json(): void $writer = new Stream('php://temp', 'w+'); $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -65,9 +65,9 @@ public function test_backup_episode_includes_parent(): void ]; Container::add($metaClass, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { @@ -78,7 +78,7 @@ public function __invoke(\App\Backends\Common\Context $context, string|int $id, $writer = new Stream('php://temp', 'w+'); $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -114,7 +114,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinBackup::class, JellyfinGuid::class, JellyfinGetMetaData::class], - ['Emby', EmbyBackup::class, EmbyGuid::class, EmbyGetMetaData::class], + ['Emby', EmbyBackup::class, EmbyGuid::class, EmbyGetMetaData::class], ]; } } diff --git a/tests/Backends/MediaBrowser/BackupTest.php b/tests/Backends/MediaBrowser/BackupTest.php index 11f1ecf2..a07ac163 100644 --- a/tests/Backends/MediaBrowser/BackupTest.php +++ b/tests/Backends/MediaBrowser/BackupTest.php @@ -32,7 +32,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinBackup::class, JellyfinGuid::class], - ['Emby', EmbyBackup::class, EmbyGuid::class], + ['Emby', EmbyBackup::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ExportFlowTest.php b/tests/Backends/MediaBrowser/ExportFlowTest.php index 803fb566..d348bbc0 100644 --- a/tests/Backends/MediaBrowser/ExportFlowTest.php +++ b/tests/Backends/MediaBrowser/ExportFlowTest.php @@ -38,7 +38,7 @@ public function test_export_queues_requests(): void ]), )); $action = new $actionClass($http, $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -79,7 +79,7 @@ public function test_export_unplayed_queues(): void $http = $this->makeQueueHttp(); $action = new $actionClass($http, $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -110,7 +110,7 @@ public function test_export_ignores_state_unchanged(): void $item['UserData']['LastPlayedDate'] = '2024-01-02T00:00:00Z'; $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -141,7 +141,7 @@ public function test_export_ignores_newer(): void $item['DateCreated'] = '2024-01-02T00:00:00Z'; $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -169,7 +169,7 @@ public function test_export_ignores_not_found(): void $item['UserData']['LastPlayedDate'] = '2024-01-02T00:00:00Z'; $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -199,7 +199,7 @@ public function test_export_ignores_no_guids(): void $item['UserData']['Played'] = false; $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -228,7 +228,7 @@ public function test_export_ignores_missing_date(): void unset($item['DateCreated']); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -289,9 +289,14 @@ private function makeLocalEntity(\App\Backends\Common\Context $context, int $wat private function buildMapper(\App\Backends\Common\Context $context, ?iState $entity): \App\Libs\Mappers\ImportInterface { - return new class($this->logger, $context->userContext->db, $context->userContext->cache, $entity) extends \App\Libs\Mappers\Import\DirectMapper { - public function __construct($logger, $db, $cache, private ?iState $entity) - { + return new class($this->logger, $context->userContext->db, $context->userContext->cache, $entity) extends + \App\Libs\Mappers\Import\DirectMapper { + public function __construct( + $logger, + $db, + $cache, + private ?iState $entity, + ) { parent::__construct($logger, $db, $cache); } @@ -306,7 +311,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinExport::class, JellyfinGuid::class], - ['Emby', EmbyExport::class, EmbyGuid::class], + ['Emby', EmbyExport::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ExportTest.php b/tests/Backends/MediaBrowser/ExportTest.php index bc1b819b..a46c8091 100644 --- a/tests/Backends/MediaBrowser/ExportTest.php +++ b/tests/Backends/MediaBrowser/ExportTest.php @@ -32,7 +32,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinExport::class, JellyfinGuid::class], - ['Emby', EmbyExport::class, EmbyGuid::class], + ['Emby', EmbyExport::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GenerateAccessTokenErrorTest.php b/tests/Backends/MediaBrowser/GenerateAccessTokenErrorTest.php index eb1ecb1f..ac7d623b 100644 --- a/tests/Backends/MediaBrowser/GenerateAccessTokenErrorTest.php +++ b/tests/Backends/MediaBrowser/GenerateAccessTokenErrorTest.php @@ -28,7 +28,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGenerateAccessToken::class], - ['Emby', EmbyGenerateAccessToken::class], + ['Emby', EmbyGenerateAccessToken::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GenerateAccessTokenTest.php b/tests/Backends/MediaBrowser/GenerateAccessTokenTest.php index 667e1ddd..890693eb 100644 --- a/tests/Backends/MediaBrowser/GenerateAccessTokenTest.php +++ b/tests/Backends/MediaBrowser/GenerateAccessTokenTest.php @@ -29,7 +29,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGenerateAccessToken::class], - ['Emby', EmbyGenerateAccessToken::class], + ['Emby', EmbyGenerateAccessToken::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetIdentifierTest.php b/tests/Backends/MediaBrowser/GetIdentifierTest.php index c84b5576..1eae81f4 100644 --- a/tests/Backends/MediaBrowser/GetIdentifierTest.php +++ b/tests/Backends/MediaBrowser/GetIdentifierTest.php @@ -28,7 +28,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetIdentifier::class], - ['Emby', EmbyGetIdentifier::class], + ['Emby', EmbyGetIdentifier::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetInfoEmptyResponseTest.php b/tests/Backends/MediaBrowser/GetInfoEmptyResponseTest.php index 99fcf4e5..8c799d3f 100644 --- a/tests/Backends/MediaBrowser/GetInfoEmptyResponseTest.php +++ b/tests/Backends/MediaBrowser/GetInfoEmptyResponseTest.php @@ -28,7 +28,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetInfo::class], - ['Emby', EmbyGetInfo::class], + ['Emby', EmbyGetInfo::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetInfoTest.php b/tests/Backends/MediaBrowser/GetInfoTest.php index 97e47e9a..cb2e54a7 100644 --- a/tests/Backends/MediaBrowser/GetInfoTest.php +++ b/tests/Backends/MediaBrowser/GetInfoTest.php @@ -30,7 +30,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetInfo::class], - ['Emby', EmbyGetInfo::class], + ['Emby', EmbyGetInfo::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetLibrariesListEmptyTest.php b/tests/Backends/MediaBrowser/GetLibrariesListEmptyTest.php index 7625c143..e356261f 100644 --- a/tests/Backends/MediaBrowser/GetLibrariesListEmptyTest.php +++ b/tests/Backends/MediaBrowser/GetLibrariesListEmptyTest.php @@ -29,7 +29,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetLibrariesList::class], - ['Emby', EmbyGetLibrariesList::class], + ['Emby', EmbyGetLibrariesList::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetLibrariesListTest.php b/tests/Backends/MediaBrowser/GetLibrariesListTest.php index 86d18f9d..d36b980b 100644 --- a/tests/Backends/MediaBrowser/GetLibrariesListTest.php +++ b/tests/Backends/MediaBrowser/GetLibrariesListTest.php @@ -30,7 +30,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetLibrariesList::class, '/movies.html?topParentId=lib-1'], - ['Emby', EmbyGetLibrariesList::class, '!/videos?serverId=backend-1&parentId=lib-1'], + ['Emby', EmbyGetLibrariesList::class, '!/videos?serverId=backend-1&parentId=lib-1'], ]; } } diff --git a/tests/Backends/MediaBrowser/GetLibraryMissingTest.php b/tests/Backends/MediaBrowser/GetLibraryMissingTest.php index 3c3ca291..6444b77c 100644 --- a/tests/Backends/MediaBrowser/GetLibraryMissingTest.php +++ b/tests/Backends/MediaBrowser/GetLibraryMissingTest.php @@ -35,15 +35,24 @@ public function test_get_library_missing_id(): void private function registerLibrariesListAction(string $actionClass): void { - Container::add($actionClass, fn() => new $actionClass(new MockHttpClient($this->makeResponse($this->fixture('libraries'))), $this->logger)); - Container::add(\App\Backends\Jellyfin\Action\GetLibrariesList::class, fn() => new \App\Backends\Jellyfin\Action\GetLibrariesList(new MockHttpClient($this->makeResponse($this->fixture('libraries'))), $this->logger)); + Container::add( + $actionClass, + fn() => new $actionClass(new MockHttpClient($this->makeResponse($this->fixture('libraries'))), $this->logger), + ); + Container::add( + \App\Backends\Jellyfin\Action\GetLibrariesList::class, + fn() => new \App\Backends\Jellyfin\Action\GetLibrariesList( + new MockHttpClient($this->makeResponse($this->fixture('libraries'))), + $this->logger, + ), + ); } private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetLibrary::class, JellyfinGetLibrariesList::class, JellyfinGuid::class], - ['Emby', EmbyGetLibrary::class, EmbyGetLibrariesList::class, EmbyGuid::class], + ['Emby', EmbyGetLibrary::class, EmbyGetLibrariesList::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetLibraryTest.php b/tests/Backends/MediaBrowser/GetLibraryTest.php index 6fa30d71..9bc69299 100644 --- a/tests/Backends/MediaBrowser/GetLibraryTest.php +++ b/tests/Backends/MediaBrowser/GetLibraryTest.php @@ -42,14 +42,17 @@ private function registerLibrariesListAction(string $actionClass): void $http = new MockHttpClient($response); Container::add($actionClass, fn() => new $actionClass($http, $this->logger)); - Container::add(\App\Backends\Jellyfin\Action\GetLibrariesList::class, fn() => new \App\Backends\Jellyfin\Action\GetLibrariesList($http, $this->logger)); + Container::add( + \App\Backends\Jellyfin\Action\GetLibrariesList::class, + fn() => new \App\Backends\Jellyfin\Action\GetLibrariesList($http, $this->logger), + ); } private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetLibrary::class, JellyfinGetLibrariesList::class, JellyfinGuid::class], - ['Emby', EmbyGetLibrary::class, EmbyGetLibrariesList::class, EmbyGuid::class], + ['Emby', EmbyGetLibrary::class, EmbyGetLibrariesList::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetMetaDataErrorTest.php b/tests/Backends/MediaBrowser/GetMetaDataErrorTest.php index 980ee198..1dc88fbe 100644 --- a/tests/Backends/MediaBrowser/GetMetaDataErrorTest.php +++ b/tests/Backends/MediaBrowser/GetMetaDataErrorTest.php @@ -31,7 +31,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetMetaData::class], - ['Emby', EmbyGetMetaData::class], + ['Emby', EmbyGetMetaData::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetMetaDataTest.php b/tests/Backends/MediaBrowser/GetMetaDataTest.php index 202df866..02dc42de 100644 --- a/tests/Backends/MediaBrowser/GetMetaDataTest.php +++ b/tests/Backends/MediaBrowser/GetMetaDataTest.php @@ -34,7 +34,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetMetaData::class], - ['Emby', EmbyGetMetaData::class], + ['Emby', EmbyGetMetaData::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetPlaylistTest.php b/tests/Backends/MediaBrowser/GetPlaylistTest.php index d2ef4e4f..ae286139 100644 --- a/tests/Backends/MediaBrowser/GetPlaylistTest.php +++ b/tests/Backends/MediaBrowser/GetPlaylistTest.php @@ -53,7 +53,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetPlaylist::class, 'playlist_detail_jellyfin'], - ['Emby', EmbyGetPlaylist::class, 'playlist_detail_emby'], + ['Emby', EmbyGetPlaylist::class, 'playlist_detail_emby'], ]; } } diff --git a/tests/Backends/MediaBrowser/GetSessionsErrorTest.php b/tests/Backends/MediaBrowser/GetSessionsErrorTest.php index 716eb122..007e5cad 100644 --- a/tests/Backends/MediaBrowser/GetSessionsErrorTest.php +++ b/tests/Backends/MediaBrowser/GetSessionsErrorTest.php @@ -48,7 +48,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetSessions::class], - ['Emby', EmbyGetSessions::class], + ['Emby', EmbyGetSessions::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetSessionsTest.php b/tests/Backends/MediaBrowser/GetSessionsTest.php index 095c6834..fc0e0ee2 100644 --- a/tests/Backends/MediaBrowser/GetSessionsTest.php +++ b/tests/Backends/MediaBrowser/GetSessionsTest.php @@ -33,7 +33,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetSessions::class], - ['Emby', EmbyGetSessions::class], + ['Emby', EmbyGetSessions::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetUserTest.php b/tests/Backends/MediaBrowser/GetUserTest.php index 1bbd14eb..7e6e75f3 100644 --- a/tests/Backends/MediaBrowser/GetUserTest.php +++ b/tests/Backends/MediaBrowser/GetUserTest.php @@ -35,7 +35,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetUser::class, 'user'], - ['Emby', EmbyGetUser::class, 'users'], + ['Emby', EmbyGetUser::class, 'users'], ]; } } diff --git a/tests/Backends/MediaBrowser/GetUsersListLimitedTokenTest.php b/tests/Backends/MediaBrowser/GetUsersListLimitedTokenTest.php index ddf73fb2..d7e6a72c 100644 --- a/tests/Backends/MediaBrowser/GetUsersListLimitedTokenTest.php +++ b/tests/Backends/MediaBrowser/GetUsersListLimitedTokenTest.php @@ -4,10 +4,10 @@ namespace Tests\Backends\MediaBrowser; +use App\Backends\Common\Response; use App\Backends\Emby\Action\GetUsersList as EmbyGetUsersList; use App\Backends\Jellyfin\Action\GetUser; use App\Backends\Jellyfin\Action\GetUsersList as JellyfinGetUsersList; -use App\Backends\Common\Response; use App\Libs\Container; use App\Libs\Options; @@ -42,7 +42,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetUsersList::class], - ['Emby', EmbyGetUsersList::class], + ['Emby', EmbyGetUsersList::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetUsersListTest.php b/tests/Backends/MediaBrowser/GetUsersListTest.php index bea561c7..d47462b3 100644 --- a/tests/Backends/MediaBrowser/GetUsersListTest.php +++ b/tests/Backends/MediaBrowser/GetUsersListTest.php @@ -31,7 +31,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetUsersList::class], - ['Emby', EmbyGetUsersList::class], + ['Emby', EmbyGetUsersList::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetVersionTest.php b/tests/Backends/MediaBrowser/GetVersionTest.php index 35e14724..ad727442 100644 --- a/tests/Backends/MediaBrowser/GetVersionTest.php +++ b/tests/Backends/MediaBrowser/GetVersionTest.php @@ -28,7 +28,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetVersion::class], - ['Emby', EmbyGetVersion::class], + ['Emby', EmbyGetVersion::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetWebUrlInvalidTypeTest.php b/tests/Backends/MediaBrowser/GetWebUrlInvalidTypeTest.php index 95b48da4..60f802dc 100644 --- a/tests/Backends/MediaBrowser/GetWebUrlInvalidTypeTest.php +++ b/tests/Backends/MediaBrowser/GetWebUrlInvalidTypeTest.php @@ -25,7 +25,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetWebUrl::class], - ['Emby', EmbyGetWebUrl::class], + ['Emby', EmbyGetWebUrl::class], ]; } } diff --git a/tests/Backends/MediaBrowser/GetWebUrlTest.php b/tests/Backends/MediaBrowser/GetWebUrlTest.php index 1a09bf15..841fccff 100644 --- a/tests/Backends/MediaBrowser/GetWebUrlTest.php +++ b/tests/Backends/MediaBrowser/GetWebUrlTest.php @@ -26,7 +26,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinGetWebUrl::class, '!/details?id=item-1&serverId=backend-1'], - ['Emby', EmbyGetWebUrl::class, '!/item?id=item-1&serverId=backend-1'], + ['Emby', EmbyGetWebUrl::class, '!/item?id=item-1&serverId=backend-1'], ]; } } diff --git a/tests/Backends/MediaBrowser/ImportFlowTest.php b/tests/Backends/MediaBrowser/ImportFlowTest.php index 10873cc4..64a60a65 100644 --- a/tests/Backends/MediaBrowser/ImportFlowTest.php +++ b/tests/Backends/MediaBrowser/ImportFlowTest.php @@ -4,14 +4,14 @@ namespace Tests\Backends\MediaBrowser; -use App\Backends\Emby\Action\Import as EmbyImport; +use App\Backends\Common\Request; +use App\Backends\Common\Response; use App\Backends\Emby\Action\GetMetaData as EmbyGetMetaData; +use App\Backends\Emby\Action\Import as EmbyImport; use App\Backends\Emby\EmbyGuid; -use App\Backends\Common\Request; -use App\Backends\Jellyfin\Action\Import as JellyfinImport; use App\Backends\Jellyfin\Action\GetMetaData as JellyfinGetMetaData; +use App\Backends\Jellyfin\Action\Import as JellyfinImport; use App\Backends\Jellyfin\JellyfinGuid; -use App\Backends\Common\Response; use App\Libs\Container; use App\Libs\Options; use ReflectionMethod; @@ -27,7 +27,7 @@ public function test_import_process_adds_items(): void $item['UserData']['PlaybackPositionTicks'] = 0; $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -55,7 +55,7 @@ public function test_import_ignores_missing_date(): void $item['UserData']['PlaybackPositionTicks'] = 0; $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -88,7 +88,7 @@ public function test_import_show_caches(): void ]; $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcessShow($action, $context, $guid, $item, []); @@ -107,7 +107,7 @@ public function test_import_ignores_no_guids(): void $item['UserData']['PlaybackPositionTicks'] = 0; $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -145,9 +145,9 @@ public function test_import_episode_adds(): void ]; Container::add($metaClass, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { @@ -156,7 +156,7 @@ public function __invoke(\App\Backends\Common\Context $context, string|int $id, }); $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -194,9 +194,9 @@ public function test_jellyfin_prefetched_genres(): void ]; $metaAction = new class($show) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public int $calls = 0; @@ -211,7 +211,7 @@ public function __invoke(\App\Backends\Common\Context $context, string|int $id, Container::add(JellyfinGetMetaData::class, fn() => $metaAction); $action = new JellyfinImport($this->makeHttpClient(), $this->logger); - $guid = (new JellyfinGuid($this->logger))->withContext($context); + $guid = new JellyfinGuid($this->logger)->withContext($context); $this->invokeProcessShow($action, $context, $guid, $show, []); $this->invokeProcess( @@ -243,7 +243,7 @@ public function test_jellyfin_prefetches_parent(): void ), $this->logger, ); - $guid = (new JellyfinGuid($this->logger))->withContext($context); + $guid = new JellyfinGuid($this->logger)->withContext($context); $mapper = $context->userContext->mapper; $result = $action($context, $guid, $mapper); @@ -252,9 +252,11 @@ public function test_jellyfin_prefetches_parent(): void $prefetchRequests = array_values(array_filter( $result->response, - static fn($request) => $request instanceof Request + static fn($request) => ( + $request instanceof Request && str_contains((string) $request->url, 'recursive=false') - && str_contains((string) $request->url, 'includeItemTypes=Series'), + && str_contains((string) $request->url, 'includeItemTypes=Series') + ), )); $this->assertNotEmpty($prefetchRequests); @@ -270,7 +272,7 @@ public function test_import_ignores_invalid_type(): void $item['Type'] = 'Audio'; $action = new $actionClass($this->makeHttpClient(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -316,7 +318,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinImport::class, JellyfinGuid::class, JellyfinGetMetaData::class], - ['Emby', EmbyImport::class, EmbyGuid::class, EmbyGetMetaData::class], + ['Emby', EmbyImport::class, EmbyGuid::class, EmbyGetMetaData::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ImportTest.php b/tests/Backends/MediaBrowser/ImportTest.php index 22795d45..68226c89 100644 --- a/tests/Backends/MediaBrowser/ImportTest.php +++ b/tests/Backends/MediaBrowser/ImportTest.php @@ -96,7 +96,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinImport::class, JellyfinGuid::class], - ['Emby', EmbyImport::class, EmbyGuid::class], + ['Emby', EmbyImport::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/MediaBrowserTestCase.php b/tests/Backends/MediaBrowser/MediaBrowserTestCase.php index 96a2c5dd..fcb7c655 100644 --- a/tests/Backends/MediaBrowser/MediaBrowserTestCase.php +++ b/tests/Backends/MediaBrowser/MediaBrowserTestCase.php @@ -7,13 +7,13 @@ use App\Backends\Common\Cache; use App\Backends\Common\Context; use App\Libs\ConfigFile; +use App\Libs\Container; use App\Libs\Database\PDO\PDOAdapter; +use App\Libs\Entity\StateEntity; +use App\Libs\Entity\StateInterface; use App\Libs\Extends\HttpClient; use App\Libs\Extends\LogMessageProcessor; use App\Libs\Extends\MockHttpClient; -use App\Libs\Container; -use App\Libs\Entity\StateEntity; -use App\Libs\Entity\StateInterface; use App\Libs\TestCase; use App\Libs\Uri; use App\Libs\UserContext; @@ -26,8 +26,8 @@ abstract class MediaBrowserTestCase extends TestCase { - protected TestHandler|null $handler = null; - protected Logger|null $logger = null; + protected ?TestHandler $handler = null; + protected ?Logger $logger = null; private array $fixtures = []; diff --git a/tests/Backends/MediaBrowser/PlaylistWriteTest.php b/tests/Backends/MediaBrowser/PlaylistWriteTest.php index cf7bc178..c1f4af02 100644 --- a/tests/Backends/MediaBrowser/PlaylistWriteTest.php +++ b/tests/Backends/MediaBrowser/PlaylistWriteTest.php @@ -29,13 +29,16 @@ public function test_jellyfin_create_json(): void self::assertSame('playlist-jf-new', $result->response['id']); self::assertSame('POST', $requests[0]['method']); self::assertStringEndsWith('/Playlists', $requests[0]['url']); - self::assertSame([ - 'Name' => 'Weekend Movies', - 'Ids' => ['item-1', 'item-2'], - 'UserId' => 'user-1', - 'MediaType' => 'Video', - 'IsPublic' => false, - ], json_decode((string) ($requests[0]['options']['body'] ?? ''), true, flags: JSON_THROW_ON_ERROR)); + self::assertSame( + [ + 'Name' => 'Weekend Movies', + 'Ids' => ['item-1', 'item-2'], + 'UserId' => 'user-1', + 'MediaType' => 'Video', + 'IsPublic' => false, + ], + json_decode((string) ($requests[0]['options']['body'] ?? ''), true, flags: JSON_THROW_ON_ERROR), + ); } public function test_emby_create_delete(): void diff --git a/tests/Backends/MediaBrowser/ProgressQueueTest.php b/tests/Backends/MediaBrowser/ProgressQueueTest.php index ad83a342..4af7c770 100644 --- a/tests/Backends/MediaBrowser/ProgressQueueTest.php +++ b/tests/Backends/MediaBrowser/ProgressQueueTest.php @@ -4,16 +4,16 @@ namespace Tests\Backends\MediaBrowser; +use App\Backends\Common\Request; +use App\Backends\Common\Response; use App\Backends\Emby\Action\GetMetaData as EmbyGetMetaData; use App\Backends\Emby\Action\GetSessions as EmbyGetSessions; use App\Backends\Emby\Action\Progress as EmbyProgress; use App\Backends\Emby\EmbyGuid; -use App\Backends\Common\Request; use App\Backends\Jellyfin\Action\GetMetaData as JellyfinGetMetaData; use App\Backends\Jellyfin\Action\GetSessions as JellyfinGetSessions; use App\Backends\Jellyfin\Action\Progress as JellyfinProgress; use App\Backends\Jellyfin\JellyfinGuid; -use App\Backends\Common\Response; use App\Libs\Container; use App\Libs\Entity\StateEntity; use App\Libs\Entity\StateInterface as iState; @@ -86,7 +86,7 @@ public function __invoke(): Response $queue = new QueueRequests(); $action = new $actionClass($http, $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -157,7 +157,7 @@ public function __invoke(): Response $queue = new QueueRequests(); $action = new $actionClass($http, $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -181,7 +181,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinProgress::class, JellyfinGuid::class, JellyfinGetMetaData::class, JellyfinGetSessions::class], - ['Emby', EmbyProgress::class, EmbyGuid::class, EmbyGetMetaData::class, EmbyGetSessions::class], + ['Emby', EmbyProgress::class, EmbyGuid::class, EmbyGetMetaData::class, EmbyGetSessions::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ProgressSkipTest.php b/tests/Backends/MediaBrowser/ProgressSkipTest.php index c54e6b3f..ba84e73e 100644 --- a/tests/Backends/MediaBrowser/ProgressSkipTest.php +++ b/tests/Backends/MediaBrowser/ProgressSkipTest.php @@ -42,7 +42,7 @@ public function __invoke(): Response $entity = $this->makeEntity($context, via: $context->backendName); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -74,7 +74,7 @@ public function __invoke(): Response ]); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -102,7 +102,7 @@ public function __invoke(): Response ]); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -133,7 +133,7 @@ public function __invoke(): Response ]); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -180,7 +180,7 @@ public function __invoke(): Response $queue = new QueueRequests(); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -222,7 +222,7 @@ public function __invoke(): Response $queue = new QueueRequests(); $action = new $actionClass($this->makeQueueHttp(), $this->logger); - $guid = (new $guidClass($this->logger))->withContext($context); + $guid = new $guidClass($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $this->assertTrue($result->isSuccessful()); @@ -266,7 +266,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinProgress::class, JellyfinGuid::class, JellyfinGetMetaData::class, JellyfinGetSessions::class], - ['Emby', EmbyProgress::class, EmbyGuid::class, EmbyGetMetaData::class, EmbyGetSessions::class], + ['Emby', EmbyProgress::class, EmbyGuid::class, EmbyGetMetaData::class, EmbyGetSessions::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ProgressTest.php b/tests/Backends/MediaBrowser/ProgressTest.php index 89643d3e..0db9cdf0 100644 --- a/tests/Backends/MediaBrowser/ProgressTest.php +++ b/tests/Backends/MediaBrowser/ProgressTest.php @@ -32,7 +32,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinProgress::class, JellyfinGuid::class], - ['Emby', EmbyProgress::class, EmbyGuid::class], + ['Emby', EmbyProgress::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ProxyTest.php b/tests/Backends/MediaBrowser/ProxyTest.php index d4c11aeb..342c8059 100644 --- a/tests/Backends/MediaBrowser/ProxyTest.php +++ b/tests/Backends/MediaBrowser/ProxyTest.php @@ -30,7 +30,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinProxy::class], - ['Emby', EmbyProxy::class], + ['Emby', EmbyProxy::class], ]; } } diff --git a/tests/Backends/MediaBrowser/PushEdgeCasesTest.php b/tests/Backends/MediaBrowser/PushEdgeCasesTest.php index b898568b..fa6c246c 100644 --- a/tests/Backends/MediaBrowser/PushEdgeCasesTest.php +++ b/tests/Backends/MediaBrowser/PushEdgeCasesTest.php @@ -164,7 +164,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinPush::class], - ['Emby', EmbyPush::class], + ['Emby', EmbyPush::class], ]; } } diff --git a/tests/Backends/MediaBrowser/PushQueueTest.php b/tests/Backends/MediaBrowser/PushQueueTest.php index 6ea0dfbb..b99eab5a 100644 --- a/tests/Backends/MediaBrowser/PushQueueTest.php +++ b/tests/Backends/MediaBrowser/PushQueueTest.php @@ -4,9 +4,9 @@ namespace Tests\Backends\MediaBrowser; +use App\Backends\Common\Request; use App\Backends\Emby\Action\Push as EmbyPush; use App\Backends\Jellyfin\Action\Push as JellyfinPush; -use App\Backends\Common\Request; use App\Libs\Entity\StateEntity; use App\Libs\Entity\StateInterface as iState; use App\Libs\Extends\HttpClient; @@ -75,7 +75,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinPush::class], - ['Emby', EmbyPush::class], + ['Emby', EmbyPush::class], ]; } } diff --git a/tests/Backends/MediaBrowser/PushTest.php b/tests/Backends/MediaBrowser/PushTest.php index 01471a61..cf766fd3 100644 --- a/tests/Backends/MediaBrowser/PushTest.php +++ b/tests/Backends/MediaBrowser/PushTest.php @@ -29,7 +29,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinPush::class], - ['Emby', EmbyPush::class], + ['Emby', EmbyPush::class], ]; } } diff --git a/tests/Backends/MediaBrowser/SearchIdTest.php b/tests/Backends/MediaBrowser/SearchIdTest.php index 5714eaab..e7b12003 100644 --- a/tests/Backends/MediaBrowser/SearchIdTest.php +++ b/tests/Backends/MediaBrowser/SearchIdTest.php @@ -10,11 +10,9 @@ use App\Backends\Jellyfin\Action\SearchId as JellyfinSearchId; use App\Backends\Jellyfin\JellyfinGuid; use App\Libs\Container; - -use App\Libs\Extends\MockHttpClient; use App\Libs\Entity\StateEntity; use App\Libs\Entity\StateInterface; - +use App\Libs\Extends\MockHttpClient; use Psr\Log\LoggerInterface; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\Cache\Psr16Cache; @@ -56,7 +54,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinSearchId::class, JellyfinGuid::class], - ['Emby', EmbySearchId::class, EmbyGuid::class], + ['Emby', EmbySearchId::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/SearchQueryErrorTest.php b/tests/Backends/MediaBrowser/SearchQueryErrorTest.php index 2a70e364..dbb6fc91 100644 --- a/tests/Backends/MediaBrowser/SearchQueryErrorTest.php +++ b/tests/Backends/MediaBrowser/SearchQueryErrorTest.php @@ -8,10 +8,8 @@ use App\Backends\Emby\EmbyGuid; use App\Backends\Jellyfin\Action\SearchQuery as JellyfinSearchQuery; use App\Backends\Jellyfin\JellyfinGuid; - use App\Libs\Extends\MockHttpClient; - class SearchQueryErrorTest extends MediaBrowserTestCase { public function test_search_query_error_status(): void @@ -36,7 +34,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinSearchQuery::class, JellyfinGuid::class], - ['Emby', EmbySearchQuery::class, EmbyGuid::class], + ['Emby', EmbySearchQuery::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/SearchQueryTest.php b/tests/Backends/MediaBrowser/SearchQueryTest.php index e8927ca4..72c2bfb5 100644 --- a/tests/Backends/MediaBrowser/SearchQueryTest.php +++ b/tests/Backends/MediaBrowser/SearchQueryTest.php @@ -8,10 +8,8 @@ use App\Backends\Emby\EmbyGuid; use App\Backends\Jellyfin\Action\SearchQuery as JellyfinSearchQuery; use App\Backends\Jellyfin\JellyfinGuid; - use App\Libs\Extends\MockHttpClient; - class SearchQueryTest extends MediaBrowserTestCase { public function test_search_query_success(): void @@ -37,7 +35,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinSearchQuery::class, JellyfinGuid::class], - ['Emby', EmbySearchQuery::class, EmbyGuid::class], + ['Emby', EmbySearchQuery::class, EmbyGuid::class], ]; } } diff --git a/tests/Backends/MediaBrowser/ToEntityTest.php b/tests/Backends/MediaBrowser/ToEntityTest.php index 1c935a18..5cafac2d 100644 --- a/tests/Backends/MediaBrowser/ToEntityTest.php +++ b/tests/Backends/MediaBrowser/ToEntityTest.php @@ -4,16 +4,16 @@ namespace Tests\Backends\MediaBrowser; -use App\Backends\Emby\Action\ToEntity as EmbyToEntity; +use App\Backends\Common\Response; use App\Backends\Emby\Action\GetMetaData as EmbyGetMetaData; +use App\Backends\Emby\Action\ToEntity as EmbyToEntity; use App\Backends\Emby\EmbyGuid; -use App\Backends\Jellyfin\Action\ToEntity as JellyfinToEntity; use App\Backends\Jellyfin\Action\GetMetaData as JellyfinGetMetaData; +use App\Backends\Jellyfin\Action\ToEntity as JellyfinToEntity; use App\Backends\Jellyfin\JellyfinGuid; -use App\Backends\Common\Response; use App\Libs\Config; -use App\Libs\Entity\StateInterface; use App\Libs\Container; +use App\Libs\Entity\StateInterface; use App\Libs\Guid; class ToEntityTest extends MediaBrowserTestCase @@ -53,9 +53,9 @@ public function test_to_entity_episode_parent(): void ]; Container::add($metaClass, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { @@ -110,7 +110,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinToEntity::class, JellyfinGuid::class, JellyfinGetMetaData::class], - ['Emby', EmbyToEntity::class, EmbyGuid::class, EmbyGetMetaData::class], + ['Emby', EmbyToEntity::class, EmbyGuid::class, EmbyGetMetaData::class], ]; } } diff --git a/tests/Backends/MediaBrowser/UpdateStateDryRunTest.php b/tests/Backends/MediaBrowser/UpdateStateDryRunTest.php index ce1f27d4..7ee868df 100644 --- a/tests/Backends/MediaBrowser/UpdateStateDryRunTest.php +++ b/tests/Backends/MediaBrowser/UpdateStateDryRunTest.php @@ -48,7 +48,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinUpdateState::class], - ['Emby', EmbyUpdateState::class], + ['Emby', EmbyUpdateState::class], ]; } } diff --git a/tests/Backends/MediaBrowser/UpdateStateQueueTest.php b/tests/Backends/MediaBrowser/UpdateStateQueueTest.php index 1cf3a32a..bd458f54 100644 --- a/tests/Backends/MediaBrowser/UpdateStateQueueTest.php +++ b/tests/Backends/MediaBrowser/UpdateStateQueueTest.php @@ -4,9 +4,9 @@ namespace Tests\Backends\MediaBrowser; +use App\Backends\Common\Request; use App\Backends\Emby\Action\UpdateState as EmbyUpdateState; use App\Backends\Jellyfin\Action\UpdateState as JellyfinUpdateState; -use App\Backends\Common\Request; use App\Libs\Entity\StateEntity; use App\Libs\Entity\StateInterface as iState; use App\Libs\Extends\HttpClient; @@ -57,7 +57,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinUpdateState::class], - ['Emby', EmbyUpdateState::class], + ['Emby', EmbyUpdateState::class], ]; } } diff --git a/tests/Backends/MediaBrowser/UpdateStateTest.php b/tests/Backends/MediaBrowser/UpdateStateTest.php index 79da2563..10ad3052 100644 --- a/tests/Backends/MediaBrowser/UpdateStateTest.php +++ b/tests/Backends/MediaBrowser/UpdateStateTest.php @@ -29,7 +29,7 @@ private function provideBackends(): array { return [ ['Jellyfin', JellyfinUpdateState::class], - ['Emby', EmbyUpdateState::class], + ['Emby', EmbyUpdateState::class], ]; } } diff --git a/tests/Backends/Plex/BackupFlowTest.php b/tests/Backends/Plex/BackupFlowTest.php index a3a03d7f..3bd8eb62 100644 --- a/tests/Backends/Plex/BackupFlowTest.php +++ b/tests/Backends/Plex/BackupFlowTest.php @@ -4,10 +4,10 @@ namespace Tests\Backends\Plex; +use App\Backends\Common\Response; use App\Backends\Plex\Action\Backup; use App\Backends\Plex\Action\GetMetaData; use App\Backends\Plex\PlexGuid; -use App\Backends\Common\Response; use App\Libs\Container; use App\Libs\Stream; use ReflectionMethod; @@ -23,7 +23,7 @@ public function test_backup_writes_json(): void $writer = new Stream('php://temp', 'w+'); $action = new Backup($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -78,9 +78,9 @@ public function test_backup_episode_includes_parent(): void ]; Container::add(GetMetaData::class, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { @@ -91,7 +91,7 @@ public function __invoke(\App\Backends\Common\Context $context, string|int $id, $writer = new Stream('php://temp', 'w+'); $action = new Backup($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, diff --git a/tests/Backends/Plex/ExportFlowTest.php b/tests/Backends/Plex/ExportFlowTest.php index 95a4e19f..e5cfbcc9 100644 --- a/tests/Backends/Plex/ExportFlowTest.php +++ b/tests/Backends/Plex/ExportFlowTest.php @@ -29,7 +29,7 @@ public function test_export_queues_requests(): void $item = ag($this->fixture('library_movie_get_200'), 'response.body.MediaContainer.Metadata.0'); $action = new Export($this->makeQueueHttp(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -58,7 +58,7 @@ public function test_export_ignores_state_unchanged(): void $item['lastViewedAt'] = 2000; $action = new Export($this->makeQueueHttp(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -86,7 +86,7 @@ public function test_export_ignores_newer(): void $item['lastViewedAt'] = 3000; $action = new Export($this->makeQueueHttp(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -110,7 +110,7 @@ public function test_export_ignores_not_found(): void $item = ag($this->fixture('library_movie_get_200'), 'response.body.MediaContainer.Metadata.0'); $action = new Export($this->makeQueueHttp(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -137,7 +137,7 @@ public function test_export_ignores_no_guids(): void $item['Guid'] = []; $action = new Export($this->makeQueueHttp(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -164,7 +164,7 @@ public function test_export_ignores_missing_date(): void unset($item['addedAt'], $item['lastViewedAt']); $action = new Export($this->makeQueueHttp(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -224,9 +224,14 @@ private function makeLocalEntity(\App\Backends\Common\Context $context, int $wat private function buildMapper(\App\Backends\Common\Context $context, ?iState $entity): \App\Libs\Mappers\ImportInterface { - return new class($this->logger, $context->userContext->db, $context->userContext->cache, $entity) extends \App\Libs\Mappers\Import\DirectMapper { - public function __construct($logger, $db, $cache, private ?iState $entity) - { + return new class($this->logger, $context->userContext->db, $context->userContext->cache, $entity) extends + \App\Libs\Mappers\Import\DirectMapper { + public function __construct( + $logger, + $db, + $cache, + private ?iState $entity, + ) { parent::__construct($logger, $db, $cache); } diff --git a/tests/Backends/Plex/GetLibrariesListTest.php b/tests/Backends/Plex/GetLibrariesListTest.php index f2aebac3..9f61885d 100644 --- a/tests/Backends/Plex/GetLibrariesListTest.php +++ b/tests/Backends/Plex/GetLibrariesListTest.php @@ -9,7 +9,6 @@ use App\Backends\Plex\Action\GetLibrariesList; use App\Backends\Plex\PlexClient; use App\Libs\ConfigFile; - use App\Libs\Extends\LogMessageProcessor; use App\Libs\Extends\MockHttpClient; use App\Libs\Mappers\Import\DirectMapper; @@ -27,9 +26,9 @@ class GetLibrariesListTest extends TestCase { - protected TestHandler|null $handler = null; - protected LoggerInterface|null $logger = null; - protected Context|null $context = null; + protected ?TestHandler $handler = null; + protected ?LoggerInterface $logger = null; + protected ?Context $context = null; protected array $data = []; public function setUp(): void @@ -37,8 +36,8 @@ public function setUp(): void $this->handler = new TestHandler(); $this->logger = new Logger('test', [$this->handler], [new LogMessageProcessor()]); $this->data = json_decode( - json: (string)Stream::make(__DIR__ . '/../../Fixtures/plex_data.json', 'r'), - associative: true + json: (string) Stream::make(__DIR__ . '/../../Fixtures/plex_data.json', 'r'), + associative: true, ); $cache = new Cache($this->logger, new Psr16Cache(new ArrayAdapter())); @@ -55,15 +54,15 @@ public function setUp(): void file: __DIR__ . '/../../Fixtures/test_servers.yaml', autoSave: false, autoCreate: false, - autoBackup: false + autoBackup: false, ), mapper: new DirectMapper( logger: $this->logger, db: $db, - cache: $cache->getInterface() + cache: $cache->getInterface(), ), cache: $cache->getInterface(), - db: $db + db: $db, ), backendId: 'za3g3543d0d637b4f9144099965f8f785cdf9f26', backendToken: 'fake-plex-token', @@ -76,12 +75,12 @@ public function test_correct_response(): void $json = ag($this->data, 'sections_get_200'); $resp = new MockResponse(json_encode(ag($json, 'response.body')), [ - 'http_code' => (int)ag($json, 'response.http_code'), - 'response_headers' => ag($json, 'response.headers', []) + 'http_code' => (int) ag($json, 'response.http_code'), + 'response_headers' => ag($json, 'response.headers', []), ]); $client = new MockHttpClient($resp); - $response = new GetLibrariesList($client, $this->logger)($this->context); + $response = (new GetLibrariesList($client, $this->logger))($this->context); $this->assertTrue($response->status); $this->assertNull($response->error); @@ -91,16 +90,19 @@ public function test_correct_response(): void $expected = []; foreach (ag($json, 'response.body.MediaContainer.Directory', []) as $item) { - $key = (int)ag($item, 'key'); + $key = (int) ag($item, 'key'); $type = ag($item, 'type', 'unknown'); $agent = ag($item, 'agent', 'unknown'); $supportedType = PlexClient::TYPE_MOVIE === $type || PlexClient::TYPE_SHOW === $type; - $webUrl = $this->context->backendUrl->withPath('/web/index.html')->withFragment( - r('!/media/{backend_id}/com.plexapp.plugins.library?source={key}', [ - 'key' => $key, - 'backend_id' => $this->context->backendId, - ]) - ); + $webUrl = $this->context + ->backendUrl + ->withPath('/web/index.html') + ->withFragment( + r('!/media/{backend_id}/com.plexapp.plugins.library?source={key}', [ + 'key' => $key, + 'backend_id' => $this->context->backendId, + ]), + ); $expected[$key] = [ 'id' => $key, @@ -111,7 +113,7 @@ public function test_correct_response(): void 'agent' => $agent, 'scanner' => ag($item, 'scanner'), 'contentType' => strtolower($type), - 'webUrl' => (string)$webUrl, + 'webUrl' => (string) $webUrl, ]; } @@ -120,7 +122,7 @@ public function test_correct_response(): void $this->assertSame( ag($expected, $item['id']), $item, - r('Assert response item payload:{number} is formatted as expected', ['number' => $x]) + r('Assert response item payload:{number} is formatted as expected', ['number' => $x]), ); $x++; } @@ -131,8 +133,8 @@ public function test_401_invalid_token(): void $json = ag($this->data, 'sections_get_401'); $resp = new MockResponse(json_encode(ag($json, 'response.body')), [ - 'http_code' => (int)ag($json, 'response.http_code'), - 'response_headers' => ag($json, 'response.headers', []) + 'http_code' => (int) ag($json, 'response.http_code'), + 'response_headers' => ag($json, 'response.headers', []), ]); $client = new MockHttpClient($resp); @@ -143,7 +145,7 @@ public function test_401_invalid_token(): void $this->assertNotNull($response->error); $this->assertStringContainsString( "libraries returned with unexpected '401' status code", - (string)$response->error + (string) $response->error, ); $this->assertNull($response->response); @@ -175,7 +177,7 @@ public function test_nfo_agents_are_supported(): void $resp = new MockResponse(json_encode($payload), ['http_code' => 200]); $client = new MockHttpClient($resp); - $response = new GetLibrariesList($client, $this->logger)($this->context); + $response = (new GetLibrariesList($client, $this->logger))($this->context); $this->assertTrue($response->status); $this->assertCount(2, $response->response); diff --git a/tests/Backends/Plex/GetLibraryErrorTest.php b/tests/Backends/Plex/GetLibraryErrorTest.php index e9be9ac3..24879af6 100644 --- a/tests/Backends/Plex/GetLibraryErrorTest.php +++ b/tests/Backends/Plex/GetLibraryErrorTest.php @@ -5,8 +5,8 @@ namespace Tests\Backends\Plex; use App\Backends\Common\Response; -use App\Backends\Plex\Action\GetLibrary; use App\Backends\Plex\Action\GetLibrariesList; +use App\Backends\Plex\Action\GetLibrary; use App\Backends\Plex\PlexGuid; use App\Libs\Container; diff --git a/tests/Backends/Plex/GetLibraryProcessTest.php b/tests/Backends/Plex/GetLibraryProcessTest.php index 2ee6f76f..84eeae65 100644 --- a/tests/Backends/Plex/GetLibraryProcessTest.php +++ b/tests/Backends/Plex/GetLibraryProcessTest.php @@ -17,7 +17,7 @@ public function test_process_movie_metadata(): void $item = ag($this->fixture('library_movie_get_200'), 'response.body.MediaContainer.Metadata.0'); $action = new GetLibrary($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $result = $this->invokeProcess( $action, @@ -50,7 +50,7 @@ public function test_process_show_metadata(): void ]; $action = new GetLibrary($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $result = $this->invokeProcess( $action, @@ -75,7 +75,7 @@ public function test_process_unsupported_type_throws(): void ]; $action = new GetLibrary($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->expectException(\App\Libs\Exceptions\Backends\RuntimeException::class); diff --git a/tests/Backends/Plex/GetLibraryTest.php b/tests/Backends/Plex/GetLibraryTest.php index 6f7184fe..a79d2556 100644 --- a/tests/Backends/Plex/GetLibraryTest.php +++ b/tests/Backends/Plex/GetLibraryTest.php @@ -24,9 +24,9 @@ public function test_get_library_to_entity(): void ]; Container::add(GetLibrariesList::class, fn() => new class($section) { - public function __construct(private array $section) - { - } + public function __construct( + private array $section, + ) {} public function __invoke(\App\Backends\Common\Context $context, array $opts = []): Response { @@ -44,7 +44,7 @@ public function __invoke(\App\Backends\Common\Context $context, array $opts = [] $context = $this->makeContext(); $action = new GetLibrary($http, $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $result = $action($context, $guid, '1', [Options::TO_ENTITY => true]); $message = $result->error?->format() ?? ''; diff --git a/tests/Backends/Plex/GetUserTokenTest.php b/tests/Backends/Plex/GetUserTokenTest.php index 8200ae03..9bd4140f 100644 --- a/tests/Backends/Plex/GetUserTokenTest.php +++ b/tests/Backends/Plex/GetUserTokenTest.php @@ -5,8 +5,8 @@ namespace Tests\Backends\Plex; use App\Backends\Common\Response; -use App\Backends\Plex\Action\GetUserToken; use App\Backends\Plex\Action\GetUsersList; +use App\Backends\Plex\Action\GetUserToken; use App\Libs\Container; use App\Libs\Options; use Symfony\Component\HttpClient\Response\MockResponse; @@ -53,13 +53,16 @@ public function test_get_user_token_success(): void { $http = new \App\Libs\Extends\MockHttpClient([ new MockResponse(json_encode(['authToken' => 'temp-token']), ['http_code' => 201]), - new MockResponse(json_encode([ - [ - 'provides' => 'server', - 'clientIdentifier' => 'plex-server-1', - 'accessToken' => 'perm-token', - ], - ]), ['http_code' => 200]), + new MockResponse( + json_encode([ + [ + 'provides' => 'server', + 'clientIdentifier' => 'plex-server-1', + 'accessToken' => 'perm-token', + ], + ]), + ['http_code' => 200], + ), ]); $context = $this->makeContext(); @@ -74,13 +77,16 @@ public function test_get_token_missing_server(): void { $http = new \App\Libs\Extends\MockHttpClient([ new MockResponse(json_encode(['authToken' => 'temp-token']), ['http_code' => 201]), - new MockResponse(json_encode([ - [ - 'provides' => 'server', - 'clientIdentifier' => 'other-server', - 'accessToken' => 'perm-token', - ], - ]), ['http_code' => 200]), + new MockResponse( + json_encode([ + [ + 'provides' => 'server', + 'clientIdentifier' => 'other-server', + 'accessToken' => 'perm-token', + ], + ]), + ['http_code' => 200], + ), ]); $context = $this->makeContext(); diff --git a/tests/Backends/Plex/GetUsersListTest.php b/tests/Backends/Plex/GetUsersListTest.php index 48392a14..f1f0a325 100644 --- a/tests/Backends/Plex/GetUsersListTest.php +++ b/tests/Backends/Plex/GetUsersListTest.php @@ -77,7 +77,8 @@ public function test_users_list_merges(): void public function test_users_list_dedup(): void { - $externalUsersXml = '' + $externalUsersXml = + '' . '' . '' . ''; @@ -200,7 +201,12 @@ public function test_users_list_target(): void ]); $requests = []; - $http = new \App\Libs\Extends\MockHttpClient(function (string $method, string $url) use (&$requests, $homeUsersJson, $switchJson, $resourcesJson) { + $http = new \App\Libs\Extends\MockHttpClient(function (string $method, string $url) use ( + &$requests, + $homeUsersJson, + $switchJson, + $resourcesJson, + ) { $requests[] = $url; if (str_contains($url, '/api/v2/home/users/') && str_contains($url, '/switch')) { if (str_contains($url, '/api/v2/home/users/uuid-2/switch')) { diff --git a/tests/Backends/Plex/ImportFlowTest.php b/tests/Backends/Plex/ImportFlowTest.php index f59f7d69..53ffad78 100644 --- a/tests/Backends/Plex/ImportFlowTest.php +++ b/tests/Backends/Plex/ImportFlowTest.php @@ -4,10 +4,10 @@ namespace Tests\Backends\Plex; -use App\Backends\Plex\Action\Import; +use App\Backends\Common\Response; use App\Backends\Plex\Action\GetMetaData; +use App\Backends\Plex\Action\Import; use App\Backends\Plex\PlexGuid; -use App\Backends\Common\Response; use App\Libs\Container; use ReflectionMethod; @@ -20,7 +20,7 @@ public function test_import_process_adds_items(): void $item = ag($this->fixture('library_movie_get_200'), 'response.body.MediaContainer.Metadata.0'); $action = new Import($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -45,7 +45,7 @@ public function test_import_ignores_missing_date(): void unset($item['addedAt'], $item['lastViewedAt']); $action = new Import($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -98,9 +98,9 @@ public function test_import_episode_adds(): void ]; Container::add(GetMetaData::class, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { @@ -109,7 +109,7 @@ public function __invoke(\App\Backends\Common\Context $context, string|int $id, }); $action = new Import($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, @@ -160,9 +160,9 @@ public function test_import_prefetched_genres(): void ]; $metaAction = new class($show) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public int $calls = 0; @@ -180,7 +180,7 @@ public function __invoke(\App\Backends\Common\Context $context, string|int $id, Container::add(GetMetaData::class, fn() => $metaAction); $action = new Import($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcessShow($action, $context, $guid, $show, []); $this->invokeProcess( @@ -208,7 +208,7 @@ public function test_import_ignores_no_guids(): void $item['guid'] = 'plex://local'; $action = new Import($this->makeHttpClient(), $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $this->invokeProcess( $action, diff --git a/tests/Backends/Plex/ParseWebhookTest.php b/tests/Backends/Plex/ParseWebhookTest.php index 98fa5e4a..e8449e24 100644 --- a/tests/Backends/Plex/ParseWebhookTest.php +++ b/tests/Backends/Plex/ParseWebhookTest.php @@ -36,8 +36,8 @@ public function test_parse_webhook_success(): void $context = $this->makeContext(); $cache = new Psr16Cache(new ArrayAdapter()); - $request = (new ServerRequest('POST', 'http://plex.test'))->withParsedBody($webhook); - $guid = (new PlexGuid($this->logger))->withContext($context); + $request = new ServerRequest('POST', 'http://plex.test')->withParsedBody($webhook); + $guid = new PlexGuid($this->logger)->withContext($context); $action = new ParseWebhook($cache); $result = $action($context, $guid, $request); @@ -58,7 +58,7 @@ public function test_parse_webhook_ignored_library(): void ]; $context = $this->makeContext([Options::IGNORE => '99']); - $request = (new ServerRequest('POST', 'http://plex.test'))->withParsedBody($payload); + $request = new ServerRequest('POST', 'http://plex.test')->withParsedBody($payload); $action = new ParseWebhook(new Psr16Cache(new ArrayAdapter())); $result = $action($context, new PlexGuid($this->logger), $request); @@ -78,7 +78,7 @@ public function test_webhook_rejects_event(): void ]; $context = $this->makeContext(); - $request = (new ServerRequest('POST', 'http://plex.test'))->withParsedBody($payload); + $request = new ServerRequest('POST', 'http://plex.test')->withParsedBody($payload); $action = new ParseWebhook(new Psr16Cache(new ArrayAdapter())); $result = $action($context, new PlexGuid($this->logger), $request); diff --git a/tests/Backends/Plex/PlaylistWriteTest.php b/tests/Backends/Plex/PlaylistWriteTest.php index 873f1e21..84d248bf 100644 --- a/tests/Backends/Plex/PlaylistWriteTest.php +++ b/tests/Backends/Plex/PlaylistWriteTest.php @@ -17,13 +17,16 @@ public function test_create_playlist_query(): void $http = new MockHttpClient(function (string $method, string $url, array $options) use (&$requests) { $requests[] = compact('method', 'url', 'options'); - return new MockResponse(json_encode([ - 'MediaContainer' => [ - 'Metadata' => [ - ['ratingKey' => 'new-plex-playlist'], + return new MockResponse( + json_encode([ + 'MediaContainer' => [ + 'Metadata' => [ + ['ratingKey' => 'new-plex-playlist'], + ], ], - ], - ], JSON_THROW_ON_ERROR), ['http_code' => 200]); + ], JSON_THROW_ON_ERROR), + ['http_code' => 200], + ); }); $action = new CreatePlaylist($http, $this->logger); @@ -37,7 +40,10 @@ public function test_create_playlist_query(): void self::assertStringContainsString('title=Weekend+Movies', $requests[0]['url']); self::assertStringContainsString('smart=0', $requests[0]['url']); self::assertStringContainsString('type=video', $requests[0]['url']); - self::assertStringContainsString('uri=server%3A%2F%2Fplex-server-1%2Fcom.plexapp.plugins.library%2Flibrary%2Fmetadata%2F11%2C22', $requests[0]['url']); + self::assertStringContainsString( + 'uri=server%3A%2F%2Fplex-server-1%2Fcom.plexapp.plugins.library%2Flibrary%2Fmetadata%2F11%2C22', + $requests[0]['url'], + ); } public function test_delete_playlist_endpoint(): void diff --git a/tests/Backends/Plex/PlexGuidTest.php b/tests/Backends/Plex/PlexGuidTest.php index c33550e2..f41a8587 100644 --- a/tests/Backends/Plex/PlexGuidTest.php +++ b/tests/Backends/Plex/PlexGuidTest.php @@ -24,7 +24,7 @@ class PlexGuidTest extends TestCase { - protected Logger|null $logger = null; + protected ?Logger $logger = null; private function logged(Level $level, string $message, bool $clear = false): bool { @@ -65,7 +65,7 @@ private function getClass(): PlexGuid backendId: 's00000000000000000000000000000000000000p', backendToken: 't000000000000000000p', backendUser: '11111111', - ) + ), ); } @@ -92,7 +92,7 @@ public function test__construct() $this->getClass(); $this->assertTrue( $this->logged(Level::Error, 'Failed to parse GUIDs file', true), - "Assert message logged when the value type does not match the expected type." + 'Assert message logged when the value type does not match the expected type.', ); } finally { Config::save('guid.file', $oldGuidFile); @@ -104,221 +104,213 @@ public function test_parseGUIDFile() Config::save('guid.file', null); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'version: 99.0'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file version is not supported.", - exception: InvalidArgumentException::class, - exceptionMessage: 'Unsupported file version' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'version: 99.0'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file version is not supported.', + exception: InvalidArgumentException::class, + exceptionMessage: 'Unsupported file version', + ); $this->checkException( closure: fn() => $this->getClass()->parseGUIDFile('not_set.yml'), - reason: "Failed to assert that the GUID file is not found.", + reason: 'Failed to assert that the GUID file is not found.', exception: InvalidArgumentException::class, - exceptionMessage: 'does not exist' + exceptionMessage: 'does not exist', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'fff: {_]'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file is invalid.", - exception: InvalidArgumentException::class, - exceptionMessage: 'Failed to parse GUIDs file' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'fff: {_]'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file is invalid.', + exception: InvalidArgumentException::class, + exceptionMessage: 'Failed to parse GUIDs file', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, 'invalid'); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Failed to throw exception when the GUID file is invalid.", - exception: InvalidArgumentException::class, - exceptionMessage: 'is not an array' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, 'invalid'); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Failed to throw exception when the GUID file is invalid.', + exception: InvalidArgumentException::class, + exceptionMessage: 'is not an array', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); touch($tmpFile); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Info, 'is empty', true), - "Failed to assert that the GUID file is empty." - ); - + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Info, 'is empty', true), + 'Failed to assert that the GUID file is empty.', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->checkException( - closure: function () use ($tmpFile) { - file_put_contents($tmpFile, Yaml::dump(['links' => 'foo'])); - $this->getClass()->parseGUIDFile($tmpFile); - }, - reason: "Should throw an exception when there are no GUIDs mapping.", - exception: InvalidArgumentException::class, - exceptionMessage: 'links sub key is not an array' - ); - + $this->checkException( + closure: function () use ($tmpFile) { + file_put_contents($tmpFile, Yaml::dump(['links' => 'foo'])); + $this->getClass()->parseGUIDFile($tmpFile); + }, + reason: 'Should throw an exception when there are no GUIDs mapping.', + exception: InvalidArgumentException::class, + exceptionMessage: 'links sub key is not an array', + ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $this->handler->clear(); - $yaml = ['links' => [['type' => 'plex']]]; - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertCount(0, $this->handler->getRecords(), "There should be no messages logged for empty list."); - $this->handler->clear(); - - - file_put_contents($tmpFile, Yaml::dump(ag_set($yaml, 'links.0', 'ff'))); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'Value must be an object.', true), - 'Assert link value is an object.' - ); + $this->handler->clear(); + $yaml = ['links' => [['type' => 'plex']]]; + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertCount(0, $this->handler->getRecords(), 'There should be no messages logged for empty list.'); + $this->handler->clear(); - $yaml = ag_set($yaml, 'links.0.options.replace', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'replace value must be an object.', true), - 'Assert replace key is an object.' - ); + file_put_contents($tmpFile, Yaml::dump(ag_set($yaml, 'links.0', 'ff'))); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'Value must be an object.', true), + 'Assert link value is an object.', + ); - $yaml = ag_set($yaml, 'links.0.options.replace', []); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'options.replace.from field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.options.replace', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'replace value must be an object.', true), + 'Assert replace key is an object.', + ); - $yaml = ag_set($yaml, 'links.0.options.replace.from', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'options.replace.to field is not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.options.replace', []); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'options.replace.from field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.options.replace.to', 'bar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertCount(0, $this->handler->getRecords(), "There should be no error messages logged."); + $yaml = ag_set($yaml, 'links.0.options.replace.from', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'options.replace.to field is not a string.', true), + 'Assert to field is a string.', + ); + $yaml = ag_set($yaml, 'links.0.options.replace.to', 'bar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertCount(0, $this->handler->getRecords(), 'There should be no error messages logged.'); $this->handler->clear(); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); - $yaml = ag_set(['links' => [['type' => 'plex']]], 'links.0.map', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map value must be an object.', true), - 'Assert map key is an object.' - ); - - $yaml = ag_set($yaml, 'links.0.map', []); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.from field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set(['links' => [['type' => 'plex']]], 'links.0.map', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map value must be an object.', true), + 'Assert map key is an object.', + ); - $yaml = ag_set($yaml, 'links.0.map.from', 'foo'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.to field is empty or not a string.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map', []); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.from field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.to', 'foobar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'field does not starts with', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.from', 'foo'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.to field is empty or not a string.', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map.to', 'guid_foobar'); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.to field is not a supported', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.to', 'foobar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'field does not starts with', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map', [ - 'from' => 'com.plexapp.agents.imdb', - 'to' => 'guid_imdb', - ]); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $this->getClass()->parseGUIDFile($tmpFile); - $this->assertTrue( - $this->logged(Level::Warning, 'map.from already exists.', true), - 'Assert to field is a string.' - ); + $yaml = ag_set($yaml, 'links.0.map.to', 'guid_foobar'); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.to field is not a supported', true), + 'Assert to field is a string.', + ); - $yaml = ag_set($yaml, 'links.0.map', [ - 'from' => 'com.plexapp.agents.ccdb', - 'to' => 'guid_imdb', - ]); + $yaml = ag_set($yaml, 'links.0.map', [ + 'from' => 'com.plexapp.agents.imdb', + 'to' => 'guid_imdb', + ]); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $this->getClass()->parseGUIDFile($tmpFile); + $this->assertTrue( + $this->logged(Level::Warning, 'map.from already exists.', true), + 'Assert to field is a string.', + ); - $this->handler->clear(); + $yaml = ag_set($yaml, 'links.0.map', [ + 'from' => 'com.plexapp.agents.ccdb', + 'to' => 'guid_imdb', + ]); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $class = $this->getClass(); - $class->parseGUIDFile($tmpFile); - $this->assertArrayHasKey( - 'ccdb', - ag($class->getConfig(), 'guidMapper', []), - 'Assert that the GUID mapping has been added.' - ); - $this->handler->clear(); + $this->handler->clear(); - $yaml = ag_set($yaml, 'links.0', [ - 'type' => 'plex', - 'options' => [ - 'legacy' => false, - ], - 'map' => [ - 'from' => 'com.plexapp.agents.imthedb', - 'to' => 'guid_imdb', - ] - ]); - file_put_contents($tmpFile, Yaml::dump($yaml)); - $class = $this->getClass(); - $class->parseGUIDFile($tmpFile); - $this->assertArrayHasKey( - 'com.plexapp.agents.imthedb', - ag($class->getConfig(), 'guidMapper', []), - 'Assert that the GUID mapping has been added.' - ); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $class = $this->getClass(); + $class->parseGUIDFile($tmpFile); + $this->assertArrayHasKey( + 'ccdb', + ag($class->getConfig(), 'guidMapper', []), + 'Assert that the GUID mapping has been added.', + ); + $this->handler->clear(); + $yaml = ag_set($yaml, 'links.0', [ + 'type' => 'plex', + 'options' => [ + 'legacy' => false, + ], + 'map' => [ + 'from' => 'com.plexapp.agents.imthedb', + 'to' => 'guid_imdb', + ], + ]); + file_put_contents($tmpFile, Yaml::dump($yaml)); + $class = $this->getClass(); + $class->parseGUIDFile($tmpFile); + $this->assertArrayHasKey( + 'com.plexapp.agents.imthedb', + ag($class->getConfig(), 'guidMapper', []), + 'Assert that the GUID mapping has been added.', + ); } public function test_isLocal() { $this->assertTrue( $this->getClass()->isLocal('com.plexapp.agents.none://123456/1/1'), - 'Assert that the GUID is local.' + 'Assert that the GUID is local.', ); $this->assertFalse( $this->getClass()->isLocal('com.plexapp.agents.imdb://123456/1/1'), - 'Assert that the GUID is not local.' + 'Assert that the GUID is not local.', ); $this->assertFalse( $this->getClass()->isLocal('tv.plex.agents.nfo.movie://movie/tmdb_383498'), - 'Assert that typed NFO GUIDs are treated as non-local external ids.' + 'Assert that typed NFO GUIDs are treated as non-local external ids.', ); } @@ -326,16 +318,22 @@ public function test_has() { $context = ['item' => ['id' => 123, 'type' => 'episode', 'title' => 'Test title', 'year' => 2021]]; - $this->assertTrue($this->getClass()->has([ - ['id' => 'com.plexapp.agents.imdb://123456'], - ['id' => 'com.plexapp.agents.tvdb://123456'], - ], $context), 'Assert that the GUID exists.'); + $this->assertTrue( + $this->getClass()->has([ + ['id' => 'com.plexapp.agents.imdb://123456'], + ['id' => 'com.plexapp.agents.tvdb://123456'], + ], $context), + 'Assert that the GUID exists.', + ); - $this->assertFalse($this->getClass()->has([ - ['id' => ''], - ['id' => 'com.plexapp.agents.none://123456'], - ['id' => 'com.plexapp.agents.imdb'], - ], $context), 'Assert that the GUID does not exist.'); + $this->assertFalse( + $this->getClass()->has([ + ['id' => ''], + ['id' => 'com.plexapp.agents.none://123456'], + ['id' => 'com.plexapp.agents.imdb'], + ], $context), + 'Assert that the GUID does not exist.', + ); } public function test_parse() @@ -349,51 +347,64 @@ public function test_parse() ], ]; - $this->assertEquals([ - Guid::GUID_IMDB => '123456', - Guid::GUID_TMDB => '123456', - Guid::GUID_ANIDB => '123456', - ], + $this->assertEquals( + [ + Guid::GUID_IMDB => '123456', + Guid::GUID_TMDB => '123456', + Guid::GUID_ANIDB => '123456', + ], $this->getClass()->parse([ ['id' => 'com.plexapp.agents.imdb://123456'], ['id' => 'com.plexapp.agents.tmdb://123456'], ['id' => 'com.plexapp.agents.hama://anidb-123456'], ], $context), - 'Assert that the GUID exists.'); + 'Assert that the GUID exists.', + ); - $this->assertEquals([ - Guid::GUID_IMDB => 'tt1234567', - Guid::GUID_TMDB => '383498', - Guid::GUID_TVDB => '121361', - ], + $this->assertEquals( + [ + Guid::GUID_IMDB => 'tt1234567', + Guid::GUID_TMDB => '383498', + Guid::GUID_TVDB => '121361', + ], $this->getClass()->parse([ ['id' => 'tv.plex.agents.nfo.movie://movie/tmdb_383498'], ['id' => 'tv.plex.agents.nfo.movie://movie/imdb_tt1234567'], ['id' => 'tv.plex.agents.nfo.series://show/tvdb_121361'], ], $context), - 'Assert that typed NFO GUIDs are normalized into supported external ids.'); - - $this->assertEquals([], $this->getClass()->parse([ - ['id' => ''], - ['id' => 'com.plexapp.agents.none://123456'], - ['id' => 'com.plexapp.agents.imdb'], - ['id' => 'tv.plex.agents.nfo.movie://movie/858024'], - ], $context), 'Assert that the GUID does not exist. for invalid GUIDs.'); + 'Assert that typed NFO GUIDs are normalized into supported external ids.', + ); + + $this->assertEquals( + [], + $this->getClass()->parse([ + ['id' => ''], + ['id' => 'com.plexapp.agents.none://123456'], + ['id' => 'com.plexapp.agents.imdb'], + ['id' => 'tv.plex.agents.nfo.movie://movie/858024'], + ], $context), + 'Assert that the GUID does not exist. for invalid GUIDs.', + ); } public function test_get() { $context = ['item' => ['id' => 123, 'type' => 'episode', 'title' => 'Test title', 'year' => 2021]]; - $this->assertEquals([], $this->getClass()->get([ - ['id' => 'com.plexapp.agents.imdb'], - ], $context), 'Assert invalid guid return empty array.'); + $this->assertEquals( + [], + $this->getClass()->get([ + ['id' => 'com.plexapp.agents.imdb'], + ], $context), + 'Assert invalid guid return empty array.', + ); $this->assertTrue( $this->logged(Level::Info, 'Unable to parse', true), - 'Assert that the invalid GUID is logged.' + 'Assert that the invalid GUID is logged.', ); - $this->assertEquals([Guid::GUID_IMDB => '1', Guid::GUID_CMDB => 'afa', Guid::GUID_TVDB => '123'], + $this->assertEquals( + [Guid::GUID_IMDB => '1', Guid::GUID_CMDB => 'afa', Guid::GUID_TVDB => '123'], $this->getClass()->get([ ['id' => 'com.plexapp.agents.imdb://2'], ['id' => 'com.plexapp.agents.imdb://1'], @@ -403,27 +414,35 @@ public function test_get() ['id' => 'com.plexapp.agents.hama://notSet-123'], ['id' => 'com.plexapp.agents.hama://notSet-'], ], $context), - 'Assert only the the oldest ID is returned for numeric GUIDs.' + 'Assert only the the oldest ID is returned for numeric GUIDs.', ); $this->assertTrue( $this->logged(Level::Info, 'reported conflicting', true), - 'Assert that a log is raised when multiple GUIDs for the same provider are found.' + 'Assert that a log is raised when multiple GUIDs for the same provider are found.', ); - $this->assertEquals([Guid::GUID_IMDB => '1'], $this->getClass()->get([ - ['id' => 'com.plexapp.agents.imdb://1'], - ['id' => 'com.plexapp.agents.imdb://2'], - ], $context), 'Assert only the the oldest ID is returned for numeric GUIDs.'); + $this->assertEquals( + [Guid::GUID_IMDB => '1'], + $this->getClass()->get([ + ['id' => 'com.plexapp.agents.imdb://1'], + ['id' => 'com.plexapp.agents.imdb://2'], + ], $context), + 'Assert only the the oldest ID is returned for numeric GUIDs.', + ); - $this->assertEquals([Guid::GUID_TVDB => '84871'], $this->getClass()->get([ - ['id' => 'tvdb://84871'], - ['id' => 'tv.plex.agents.nfo.series://episode/tvdb_84871'], - ], $context), 'Assert typed NFO GUIDs do not conflict with identical canonical GUIDs.'); + $this->assertEquals( + [Guid::GUID_TVDB => '84871'], + $this->getClass()->get([ + ['id' => 'tvdb://84871'], + ['id' => 'tv.plex.agents.nfo.series://episode/tvdb_84871'], + ], $context), + 'Assert typed NFO GUIDs do not conflict with identical canonical GUIDs.', + ); $this->assertFalse( $this->logged(Level::Warning, 'reported multiple ids', true), - 'Assert identical canonical and NFO GUIDs do not raise duplicate warnings.' + 'Assert identical canonical and NFO GUIDs do not raise duplicate warnings.', ); // -- as we cache the ignore list for each user now, @@ -437,20 +456,25 @@ public function test_get() opts: [ 'reset' => true, 'list' => [ - (string)make_ignore_id('show://imdb:123@test_plex') => 1 - ] - ] + (string) make_ignore_id('show://imdb:123@test_plex') => 1, + ], + ], ); - $this->assertEquals([], - $this->getClass()->get([ - ['id' => 'com.plexapp.agents.imdb://123'], - ], ag_set($context, 'item.type', 'show')), - 'Assert only the the oldest ID is returned for numeric GUIDs.'); + $this->assertEquals( + [], + $this->getClass()->get( + [ + ['id' => 'com.plexapp.agents.imdb://123'], + ], + ag_set($context, 'item.type', 'show'), + ), + 'Assert only the the oldest ID is returned for numeric GUIDs.', + ); $this->assertTrue( $this->logged(Level::Debug, 'PlexGuid: Ignoring', true), - 'Assert that a log is raised when the GUID is ignored by user choice.' + 'Assert that a log is raised when the GUID is ignored by user choice.', ); } } diff --git a/tests/Backends/Plex/PlexTestCase.php b/tests/Backends/Plex/PlexTestCase.php index bd96b22c..8531215b 100644 --- a/tests/Backends/Plex/PlexTestCase.php +++ b/tests/Backends/Plex/PlexTestCase.php @@ -17,16 +17,16 @@ use App\Libs\UserContext; use Monolog\Handler\TestHandler; use Monolog\Logger; -use Psr\Log\LoggerInterface; use Psr\Http\Message\UriInterface; +use Psr\Log\LoggerInterface; use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\Cache\Psr16Cache; use Symfony\Component\HttpClient\Response\MockResponse; abstract class PlexTestCase extends TestCase { - protected TestHandler|null $handler = null; - protected Logger|null $logger = null; + protected ?TestHandler $handler = null; + protected ?Logger $logger = null; private array $fixtures = []; diff --git a/tests/Backends/Plex/ProgressQueueTest.php b/tests/Backends/Plex/ProgressQueueTest.php index 5764845c..e94e48ce 100644 --- a/tests/Backends/Plex/ProgressQueueTest.php +++ b/tests/Backends/Plex/ProgressQueueTest.php @@ -5,8 +5,8 @@ namespace Tests\Backends\Plex; use App\Backends\Common\Context; -use App\Backends\Common\Response; use App\Backends\Common\Request; +use App\Backends\Common\Response; use App\Backends\Plex\Action\GetMetaData; use App\Backends\Plex\Action\GetSessions; use App\Backends\Plex\Action\Progress; @@ -93,7 +93,7 @@ public function __invoke(Context $context, string|int $id, array $opts = []): Re ), ); $action = new Progress($http, $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $message = $result->error?->format() ?? ''; @@ -174,7 +174,7 @@ public function __invoke(Context $context, string|int $id, array $opts = []): Re ), ); $action = new Progress($http, $this->logger); - $guid = (new PlexGuid($this->logger))->withContext($context); + $guid = new PlexGuid($this->logger)->withContext($context); $result = $action($context, $guid, [$entity], $queue); $message = $result->error?->format() ?? ''; diff --git a/tests/Backends/Plex/SearchIdTest.php b/tests/Backends/Plex/SearchIdTest.php index f504cc7f..80383acb 100644 --- a/tests/Backends/Plex/SearchIdTest.php +++ b/tests/Backends/Plex/SearchIdTest.php @@ -8,8 +8,6 @@ use App\Backends\Plex\Action\SearchId; use App\Backends\Plex\PlexGuid; use App\Libs\Container; - - use Symfony\Component\Cache\Adapter\ArrayAdapter; use Symfony\Component\Cache\Psr16Cache; diff --git a/tests/Backends/Plex/SearchQueryTest.php b/tests/Backends/Plex/SearchQueryTest.php index 5d66aa86..a889d578 100644 --- a/tests/Backends/Plex/SearchQueryTest.php +++ b/tests/Backends/Plex/SearchQueryTest.php @@ -7,7 +7,6 @@ use App\Backends\Plex\Action\SearchQuery; use App\Backends\Plex\PlexGuid; - class SearchQueryTest extends PlexTestCase { public function test_search_query_success(): void diff --git a/tests/Backends/Plex/ToEntityTest.php b/tests/Backends/Plex/ToEntityTest.php index 82b14ebd..98601025 100644 --- a/tests/Backends/Plex/ToEntityTest.php +++ b/tests/Backends/Plex/ToEntityTest.php @@ -4,13 +4,13 @@ namespace Tests\Backends\Plex; -use App\Backends\Plex\Action\ToEntity; +use App\Backends\Common\Response; use App\Backends\Plex\Action\GetMetaData; +use App\Backends\Plex\Action\ToEntity; use App\Backends\Plex\PlexGuid; use App\Libs\Config; -use App\Libs\Entity\StateInterface; -use App\Backends\Common\Response; use App\Libs\Container; +use App\Libs\Entity\StateInterface; use App\Libs\Guid; class ToEntityTest extends PlexTestCase @@ -62,9 +62,9 @@ public function test_to_entity_episode_parent(): void ]; Container::add(GetMetaData::class, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { @@ -130,9 +130,9 @@ public function test_to_entity_showlevel_nfo(): void ]; Container::add(GetMetaData::class, fn() => new class($showPayload) { - public function __construct(private array $payload) - { - } + public function __construct( + private array $payload, + ) {} public function __invoke(\App\Backends\Common\Context $context, string|int $id, array $opts = []): Response { diff --git a/tests/Cli/CommandLoaderTest.php b/tests/Cli/CommandLoaderTest.php index 1568abd2..ed7488a3 100644 --- a/tests/Cli/CommandLoaderTest.php +++ b/tests/Cli/CommandLoaderTest.php @@ -34,9 +34,9 @@ protected function configure(): void }; $container = new class($command) implements ContainerInterface { - public function __construct(private readonly Command $command) - { - } + public function __construct( + private readonly Command $command, + ) {} public function get(string $id): object { @@ -50,11 +50,17 @@ public function has(string $id): bool }; $app = new Cli(new PSRContainer()); - $app->setCommandLoader(new CommandLoader($container, [ - 'events:view' => 'events.view', - ], [ - 'events:view' => ['events:show'], - ])); + $app->setCommandLoader( + new CommandLoader( + $container, + [ + 'events:view' => 'events.view', + ], + [ + 'events:view' => ['events:show'], + ], + ), + ); self::assertTrue($app->has('events:view')); self::assertTrue($app->has('events:show')); diff --git a/tests/Commands/Backend/RestoreCommandTest.php b/tests/Commands/Backend/RestoreCommandTest.php index 680e2dc4..3678006d 100644 --- a/tests/Commands/Backend/RestoreCommandTest.php +++ b/tests/Commands/Backend/RestoreCommandTest.php @@ -6,10 +6,10 @@ use App\Commands\Backend\RestoreCommand; use App\Libs\Extends\HttpClient; +use App\Libs\Extends\MockHttpClient; use App\Libs\LogSuppressor; use App\Libs\QueueRequests; use App\Libs\TestCase; -use App\Libs\Extends\MockHttpClient; use Symfony\Component\Console\Application; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Tester\CommandTester; @@ -27,18 +27,21 @@ public function test_fatal_resets_queue(): void FakeBackendClient::setExportError('main', 'fake_restore', new \RuntimeException('restore export failed')); $backupFile = self::$tmpPath . '/backup.json'; - file_put_contents($backupFile, json_encode([ + file_put_contents($backupFile, json_encode( [ - 'type' => 'movie', - 'watched' => 1, - 'updated' => 1_700_000_000, - 'title' => 'Fake Movie', - 'year' => 2024, - 'guids' => [ - 'guid_imdb' => 'tt1234567', + [ + 'type' => 'movie', + 'watched' => 1, + 'updated' => 1_700_000_000, + 'title' => 'Fake Movie', + 'year' => 2024, + 'guids' => [ + 'guid_imdb' => 'tt1234567', + ], ], ], - ], JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE, + )); $queue = new QueueRequests(); FakeBackendClient::setQueuedExportRequests('main', 'fake_restore', 1); @@ -67,18 +70,21 @@ public function test_item_failures_keep_success(): void $logger = $this->initFakeBackendApp($this->fakeBackendConfig('fake_restore')); $backupFile = self::$tmpPath . '/backup.json'; - file_put_contents($backupFile, json_encode([ + file_put_contents($backupFile, json_encode( [ - 'type' => 'movie', - 'watched' => 1, - 'updated' => 1_700_000_000, - 'title' => 'Fake Movie', - 'year' => 2024, - 'guids' => [ - 'guid_imdb' => 'tt1234567', + [ + 'type' => 'movie', + 'watched' => 1, + 'updated' => 1_700_000_000, + 'title' => 'Fake Movie', + 'year' => 2024, + 'guids' => [ + 'guid_imdb' => 'tt1234567', + ], ], ], - ], JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE, + )); $queue = new QueueRequests(); FakeBackendClient::setQueuedExportRequests('main', 'fake_restore', 1); @@ -112,19 +118,22 @@ public function test_progress_flag_calls_progress(): void $logger = $this->initFakeBackendApp($this->fakeBackendConfig('fake_restore')); $backupFile = self::$tmpPath . '/backup.json'; - file_put_contents($backupFile, json_encode([ + file_put_contents($backupFile, json_encode( [ - 'type' => 'movie', - 'watched' => 0, - 'updated' => 1_700_000_000, - 'title' => 'Fake Movie', - 'year' => 2024, - 'progress' => 90000, - 'guids' => [ - 'guid_imdb' => 'tt1234567', + [ + 'type' => 'movie', + 'watched' => 0, + 'updated' => 1_700_000_000, + 'title' => 'Fake Movie', + 'year' => 2024, + 'progress' => 90000, + 'guids' => [ + 'guid_imdb' => 'tt1234567', + ], ], ], - ], JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); + JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE, + )); $queue = new QueueRequests(); @@ -145,14 +154,17 @@ public function test_progress_flag_calls_progress(): void self::assertSame(RestoreCommand::SUCCESS, $status); self::assertCount(1, FakeBackendClient::getCalls('export')); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_restore', - 'user' => 'main', - 'count' => 1, - 'after' => null, + [ + 'backend' => 'fake_restore', + 'user' => 'main', + 'count' => 1, + 'after' => null, + ], ], - ], FakeBackendClient::getCalls('progress')); + FakeBackendClient::getCalls('progress'), + ); } private function makeTester(RestoreCommand $command): CommandTester diff --git a/tests/Commands/Backend/TestCommandTest.php b/tests/Commands/Backend/TestCommandTest.php index aff60dec..2f1d8758 100644 --- a/tests/Commands/Backend/TestCommandTest.php +++ b/tests/Commands/Backend/TestCommandTest.php @@ -59,9 +59,12 @@ public function test_invokes_playlist(): void $payload = json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR); self::assertSame('getPlaylistsList', $payload['action']); - self::assertSame([ - ['id' => 'playlist-1', 'title' => 'Weekend Movies'], - ], $payload['result']); + self::assertSame( + [ + ['id' => 'playlist-1', 'title' => 'Weekend Movies'], + ], + $payload['result'], + ); } public function test_invokes_routes_opts(): void @@ -87,9 +90,12 @@ public function test_invokes_routes_opts(): void $payload = json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR); self::assertSame('getUsersList', $payload['action']); - self::assertSame([ - ['id' => 1, 'name' => 'alpha'], - ], $payload['result']); + self::assertSame( + [ + ['id' => 1, 'name' => 'alpha'], + ], + $payload['result'], + ); } public function test_normalizes_named_opts(): void diff --git a/tests/Commands/Database/LegacyCommandTest.php b/tests/Commands/Database/LegacyCommandTest.php index f95f5c70..f1da7a81 100644 --- a/tests/Commands/Database/LegacyCommandTest.php +++ b/tests/Commands/Database/LegacyCommandTest.php @@ -167,32 +167,54 @@ private function createLegacyDb(string $file, string $reference, bool $withPlayl $pdo = new PDO('sqlite:' . $file); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $pdo->exec('CREATE TABLE events (id TEXT PRIMARY KEY, status INTEGER NOT NULL DEFAULT 0, reference TEXT NULL, event TEXT NOT NULL, event_data TEXT NOT NULL DEFAULT "{}", options TEXT NOT NULL DEFAULT "{}", attempts INTEGER NOT NULL DEFAULT 0, logs TEXT NOT NULL DEFAULT "{}", created_at INTEGER NOT NULL, updated_at INTEGER NULL)'); + $pdo->exec( + 'CREATE TABLE events (id TEXT PRIMARY KEY, status INTEGER NOT NULL DEFAULT 0, reference TEXT NULL, event TEXT NOT NULL, event_data TEXT NOT NULL DEFAULT "{}", options TEXT NOT NULL DEFAULT "{}", attempts INTEGER NOT NULL DEFAULT 0, logs TEXT NOT NULL DEFAULT "{}", created_at INTEGER NOT NULL, updated_at INTEGER NULL)', + ); if (true === $withPlaylists) { - $pdo->exec('CREATE TABLE playlists (id INTEGER PRIMARY KEY AUTOINCREMENT, backend TEXT NOT NULL, backend_id TEXT NOT NULL, title TEXT NOT NULL, type TEXT NOT NULL DEFAULT "video", summary TEXT NULL, is_editable INTEGER NOT NULL DEFAULT 1, is_smart INTEGER NOT NULL DEFAULT 0, is_public INTEGER NOT NULL DEFAULT 0, item_count INTEGER NOT NULL DEFAULT 0, sync_id TEXT NULL, content_hash TEXT NOT NULL DEFAULT "", remote_updated_at INTEGER NOT NULL DEFAULT 0, deleted_at INTEGER NULL, metadata TEXT NOT NULL DEFAULT "{}", created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, synced_at INTEGER NOT NULL)'); - $pdo->exec('CREATE TABLE playlist_items (id INTEGER PRIMARY KEY AUTOINCREMENT, playlist_id INTEGER NOT NULL, position INTEGER NOT NULL, state_id INTEGER NULL, backend_item_id TEXT NULL, backend_entry_id TEXT NULL, item_type TEXT NULL, title TEXT NOT NULL, metadata TEXT NOT NULL DEFAULT "{}", created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL)'); + $pdo->exec( + 'CREATE TABLE playlists (id INTEGER PRIMARY KEY AUTOINCREMENT, backend TEXT NOT NULL, backend_id TEXT NOT NULL, title TEXT NOT NULL, type TEXT NOT NULL DEFAULT "video", summary TEXT NULL, is_editable INTEGER NOT NULL DEFAULT 1, is_smart INTEGER NOT NULL DEFAULT 0, is_public INTEGER NOT NULL DEFAULT 0, item_count INTEGER NOT NULL DEFAULT 0, sync_id TEXT NULL, content_hash TEXT NOT NULL DEFAULT "", remote_updated_at INTEGER NOT NULL DEFAULT 0, deleted_at INTEGER NULL, metadata TEXT NOT NULL DEFAULT "{}", created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, synced_at INTEGER NOT NULL)', + ); + $pdo->exec( + 'CREATE TABLE playlist_items (id INTEGER PRIMARY KEY AUTOINCREMENT, playlist_id INTEGER NOT NULL, position INTEGER NOT NULL, state_id INTEGER NULL, backend_item_id TEXT NULL, backend_entry_id TEXT NULL, item_type TEXT NULL, title TEXT NOT NULL, metadata TEXT NOT NULL DEFAULT "{}", created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL)', + ); } - $pdo->exec('CREATE TABLE state (id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, updated INTEGER NOT NULL, watched INTEGER NOT NULL DEFAULT 0, via TEXT NOT NULL, title TEXT NOT NULL, year INTEGER NULL, season INTEGER NULL, episode INTEGER NULL, parent TEXT NULL, guids TEXT NULL, metadata TEXT NULL, extra TEXT NULL, created_at INTEGER NOT NULL DEFAULT 0, updated_at INTEGER NOT NULL DEFAULT 0)'); - - $pdo->exec("INSERT INTO events (id, status, reference, event, event_data, options, attempts, logs, created_at, updated_at) VALUES ('event-1', 1, " . $pdo->quote($reference) . ", 'task.test', '{\"ok\":true}', '{}', 0, '{}', 100, 101)"); - $pdo->exec("INSERT INTO state (id, type, updated, watched, via, title, year, season, episode, parent, guids, metadata, extra, created_at, updated_at) VALUES (11, 'movie', 100, 1, 'plex', 'Movie', 2024, NULL, NULL, '{\"guid_plex\":\"parent-1\"}', '{\"guid_plex\":\"movie-1\"}', '{\"plex\":{\"id\":1}}', '{\"plex\":{\"path\":\"/media/movie.mkv\"}}', 100, 101)"); + $pdo->exec( + 'CREATE TABLE state (id INTEGER PRIMARY KEY AUTOINCREMENT, type TEXT NOT NULL, updated INTEGER NOT NULL, watched INTEGER NOT NULL DEFAULT 0, via TEXT NOT NULL, title TEXT NOT NULL, year INTEGER NULL, season INTEGER NULL, episode INTEGER NULL, parent TEXT NULL, guids TEXT NULL, metadata TEXT NULL, extra TEXT NULL, created_at INTEGER NOT NULL DEFAULT 0, updated_at INTEGER NOT NULL DEFAULT 0)', + ); + + $pdo->exec( + "INSERT INTO events (id, status, reference, event, event_data, options, attempts, logs, created_at, updated_at) VALUES ('event-1', 1, " + . $pdo->quote($reference) + . ", 'task.test', '{\"ok\":true}', '{}', 0, '{}', 100, 101)", + ); + $pdo->exec( + "INSERT INTO state (id, type, updated, watched, via, title, year, season, episode, parent, guids, metadata, extra, created_at, updated_at) VALUES (11, 'movie', 100, 1, 'plex', 'Movie', 2024, NULL, NULL, '{\"guid_plex\":\"parent-1\"}', '{\"guid_plex\":\"movie-1\"}', '{\"plex\":{\"id\":1}}', '{\"plex\":{\"path\":\"/media/movie.mkv\"}}', 100, 101)", + ); if (true === $withPlaylists) { - $pdo->exec("INSERT INTO playlists (id, backend, backend_id, title, type, summary, is_editable, is_smart, is_public, item_count, sync_id, content_hash, remote_updated_at, deleted_at, metadata, created_at, updated_at, synced_at) VALUES (7, 'plex', 'pl-1', 'Playlist', 'video', NULL, 1, 0, 0, 1, 'sync-1', 'hash', 100, NULL, '{\"kind\":\"playlist\"}', 100, 101, 102)"); - $pdo->exec("INSERT INTO playlist_items (id, playlist_id, position, state_id, backend_item_id, backend_entry_id, item_type, title, metadata, created_at, updated_at) VALUES (13, 7, 1, 11, 'item-1', 'entry-1', 'movie', 'Movie', '{\"rank\":1}', 100, 101)"); + $pdo->exec( + "INSERT INTO playlists (id, backend, backend_id, title, type, summary, is_editable, is_smart, is_public, item_count, sync_id, content_hash, remote_updated_at, deleted_at, metadata, created_at, updated_at, synced_at) VALUES (7, 'plex', 'pl-1', 'Playlist', 'video', NULL, 1, 0, 0, 1, 'sync-1', 'hash', 100, NULL, '{\"kind\":\"playlist\"}', 100, 101, 102)", + ); + $pdo->exec( + "INSERT INTO playlist_items (id, playlist_id, position, state_id, backend_item_id, backend_entry_id, item_type, title, metadata, created_at, updated_at) VALUES (13, 7, 1, 11, 'item-1', 'entry-1', 'movie', 'Movie', '{\"rank\":1}', 100, 101)", + ); } } private function createV2DbWithState(string $file, string $reference): void { - $pdo = (new PdoFactory())->createForFile($file); + $pdo = new PdoFactory()->createForFile($file); $migrations = new PackageMigrationFactory(); if (false === $migrations->isMigrated($pdo)) { $migrations->migrate($pdo, dryRun: false); } - $pdo->exec("INSERT INTO events (id, status, reference, event, event_data, options, attempts, logs, created_at, updated_at) VALUES ('existing', 1, " . $pdo->quote($reference) . ", 'task.test', '{}', '{}', 0, '{}', 1, 1)"); + $pdo->exec( + "INSERT INTO events (id, status, reference, event, event_data, options, attempts, logs, created_at, updated_at) VALUES ('existing', 1, " + . $pdo->quote($reference) + . ", 'task.test', '{}', '{}', 0, '{}', 1, 1)", + ); } private function assertMigratedDb(string $file, string $reference, bool $withPlaylists = true): void diff --git a/tests/Commands/Database/QueryCommandTest.php b/tests/Commands/Database/QueryCommandTest.php index cb850771..9e3d9abb 100644 --- a/tests/Commands/Database/QueryCommandTest.php +++ b/tests/Commands/Database/QueryCommandTest.php @@ -51,12 +51,15 @@ public function test_select_default_db(): void ]); self::assertSame(QueryCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'id' => 1, - 'name' => 'main-row', + [ + 'id' => 1, + 'name' => 'main-row', + ], ], - ], json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR)); + json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR), + ); } public function test_write_affected_rows(): void @@ -78,11 +81,14 @@ public function test_write_affected_rows(): void self::assertStringContainsString('Affected 1 row(s).', $tester->getDisplay()); $result = $main->db->getDBLayer()->query('SELECT name FROM sample WHERE id = 1')->fetchAll(PDO::FETCH_ASSOC); - self::assertSame([ + self::assertSame( [ - 'name' => 'after', + [ + 'name' => 'after', + ], ], - ], $result); + $result, + ); } public function test_user_routes_db(): void @@ -110,12 +116,15 @@ public function test_user_routes_db(): void ]); self::assertSame(QueryCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'id' => 1, - 'name' => 'alice-row', + [ + 'id' => 1, + 'name' => 'alice-row', + ], ], - ], json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR)); + json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR), + ); } public function test_named_params_bind(): void @@ -142,12 +151,15 @@ public function test_named_params_bind(): void ]); self::assertSame(QueryCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'id' => 2, - 'name' => 'beta', + [ + 'id' => 2, + 'name' => 'beta', + ], ], - ], json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR)); + json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR), + ); } public function test_named_params_kv(): void @@ -196,12 +208,15 @@ public function test_positional_params_bind(): void ]); self::assertSame(QueryCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'id' => 2, - 'name' => 'beta', + [ + 'id' => 2, + 'name' => 'beta', + ], ], - ], json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR)); + json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR), + ); } public function test_positional_equals_literal(): void @@ -228,12 +243,15 @@ public function test_positional_equals_literal(): void ]); self::assertSame(QueryCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'id' => 1, - 'name' => 'alpha=beta', + [ + 'id' => 1, + 'name' => 'alpha=beta', + ], ], - ], json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR)); + json_decode($tester->getDisplay(), true, flags: JSON_THROW_ON_ERROR), + ); } public function test_mixed_placeholders_rejected(): void @@ -275,14 +293,17 @@ public function test_scalar_params_coerced(): void self::assertSame(QueryCommand::SUCCESS, $status); $result = $db->query('SELECT id, enabled, score, note FROM flags')->fetchAll(PDO::FETCH_ASSOC); - self::assertSame([ + self::assertSame( [ - 'id' => 1, - 'enabled' => 1, - 'score' => 2.5, - 'note' => null, + [ + 'id' => 1, + 'enabled' => 1, + 'score' => 2.5, + 'note' => null, + ], ], - ], $result); + $result, + ); } public function test_unknown_user(): void diff --git a/tests/Commands/Events/DispatchCommandTest.php b/tests/Commands/Events/DispatchCommandTest.php index dec1e19d..eb033866 100644 --- a/tests/Commands/Events/DispatchCommandTest.php +++ b/tests/Commands/Events/DispatchCommandTest.php @@ -90,11 +90,14 @@ public function test_allow_debug_marker(): void $event = $this->event(); $this->runEvent($command, $event, Level::Debug, true); - self::assertSame([ - "NOTICE: Dispatching Event: 'on_push' queued at '2026-05-17T08:25:02+00:00'.", - 'DEBUG: listener debug', - "NOTICE: Event 'on_push' was dispatched.", - ], $event->logs); + self::assertSame( + [ + "NOTICE: Dispatching Event: 'on_push' queued at '2026-05-17T08:25:02+00:00'.", + 'DEBUG: listener debug', + "NOTICE: Event 'on_push' was dispatched.", + ], + $event->logs, + ); self::assertSame( ["[event:550e8400-e29b-41d4-a716-446655440000] Dispatching Event: 'on_push' queued at '2026-05-17T08:25:02+00:00'."], array_map(static fn($record): string => $record->message, $handler->getRecords()), diff --git a/tests/Commands/Prune/CommandSessionsPrunerTest.php b/tests/Commands/Prune/CommandSessionsPrunerTest.php index 4ea3d55a..a1d19abd 100644 --- a/tests/Commands/Prune/CommandSessionsPrunerTest.php +++ b/tests/Commands/Prune/CommandSessionsPrunerTest.php @@ -4,8 +4,8 @@ namespace Tests\Commands\Prune; -use App\Libs\Prune\CommandSessionsPruner; use App\Libs\Config; +use App\Libs\Prune\CommandSessionsPruner; use App\Libs\TestCase; final class CommandSessionsPrunerTest extends TestCase @@ -50,7 +50,7 @@ public function test_exec_done(): void 'finished_at' => null, ]); - (new CommandSessionsPruner())->__invoke(true); + new CommandSessionsPruner()->__invoke(true); self::assertFalse(is_dir($expired)); self::assertTrue(is_dir($recent)); @@ -68,7 +68,7 @@ public function test_exec_queue(): void 'expires_at' => make_date(strtotime('+10 minutes'))->format(DATE_ATOM), ]); - (new CommandSessionsPruner())->__invoke(true); + new CommandSessionsPruner()->__invoke(true); self::assertFalse(is_dir($expired)); self::assertTrue(is_dir($fresh)); @@ -82,7 +82,7 @@ public function test_dry_done(): void 'finished_at' => make_date(strtotime('-2 days'))->format(DATE_ATOM), ]); - (new CommandSessionsPruner())->__invoke(false); + new CommandSessionsPruner()->__invoke(false); self::assertTrue(is_dir($expired)); } @@ -94,7 +94,7 @@ public function test_dry_queue(): void 'expires_at' => make_date(strtotime('-10 minutes'))->format(DATE_ATOM), ]); - (new CommandSessionsPruner())->__invoke(false); + new CommandSessionsPruner()->__invoke(false); self::assertTrue(is_dir($expired)); } @@ -112,14 +112,14 @@ public function test_lock(): void self::assertIsResource($lockHandle); self::assertTrue(flock($lockHandle, LOCK_EX | LOCK_NB)); - (new CommandSessionsPruner())->__invoke(true); + new CommandSessionsPruner()->__invoke(true); self::assertTrue(is_dir($expired)); flock($lockHandle, LOCK_UN); fclose($lockHandle); - (new CommandSessionsPruner())->__invoke(true); + new CommandSessionsPruner()->__invoke(true); self::assertFalse(is_dir($expired)); } diff --git a/tests/Commands/State/BackupCommandTest.php b/tests/Commands/State/BackupCommandTest.php index 34ef410d..bcd2d9c5 100644 --- a/tests/Commands/State/BackupCommandTest.php +++ b/tests/Commands/State/BackupCommandTest.php @@ -49,14 +49,17 @@ public function test_selected_user_backup_file(): void ]); self::assertSame(BackupCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_backup', - 'user' => 'alice', - 'dry_run' => false, - 'no_enhance' => false, + [ + 'backend' => 'fake_backup', + 'user' => 'alice', + 'dry_run' => false, + 'no_enhance' => false, + ], ], - ], FakeBackendClient::getCalls('backup')); + FakeBackendClient::getCalls('backup'), + ); $aliceFile = self::$tmpPath . '/backup/custom.alice.fake_backup.json'; self::assertFileExists($aliceFile); @@ -125,14 +128,17 @@ public function test_metadata_only_backend_runs_backup(): void ]); self::assertSame(BackupCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_backup', - 'user' => 'main', - 'dry_run' => false, - 'no_enhance' => false, + [ + 'backend' => 'fake_backup', + 'user' => 'main', + 'dry_run' => false, + 'no_enhance' => false, + ], ], - ], FakeBackendClient::getCalls('backup')); + FakeBackendClient::getCalls('backup'), + ); } public function test_empty_backup_removes_file(): void diff --git a/tests/Commands/State/ExportCommandTest.php b/tests/Commands/State/ExportCommandTest.php index 24f44ac0..cbe73035 100644 --- a/tests/Commands/State/ExportCommandTest.php +++ b/tests/Commands/State/ExportCommandTest.php @@ -8,8 +8,8 @@ use App\Libs\Container; use App\Libs\Entity\StateEntity; use App\Libs\Entity\StateInterface as iState; -use App\Libs\Mappers\ImportInterface as iImport; use App\Libs\LogSuppressor; +use App\Libs\Mappers\ImportInterface as iImport; use App\Libs\QueueRequests; use App\Libs\TestCase; use Monolog\Logger; @@ -54,13 +54,16 @@ public function test_force_full_updates_last_sync(): void ]); self::assertSame(ExportCommand::SUCCESS, $status); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_export', - 'user' => 'alice', - 'after' => null, + [ + 'backend' => 'fake_export', + 'user' => 'alice', + 'after' => null, + ], ], - ], FakeBackendClient::getCalls('export')); + FakeBackendClient::getCalls('export'), + ); self::assertSame([], FakeBackendClient::getCalls('push')); $aliceConfig = Yaml::parseFile(self::$tmpPath . '/users/alice/servers.yaml'); @@ -135,14 +138,17 @@ public function test_matching_backend_uses_push(): void self::assertSame(ExportCommand::SUCCESS, $status); self::assertSame([], FakeBackendClient::getCalls('export')); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_export', - 'user' => 'alice', - 'count' => 1, - 'after' => 1_700_000_050, + [ + 'backend' => 'fake_export', + 'user' => 'alice', + 'count' => 1, + 'after' => 1_700_000_050, + ], ], - ], FakeBackendClient::getCalls('push')); + FakeBackendClient::getCalls('push'), + ); } public function test_row_timestamp_uses_push(): void @@ -193,14 +199,17 @@ public function test_row_timestamp_uses_push(): void self::assertSame(ExportCommand::SUCCESS, $status); self::assertSame([], FakeBackendClient::getCalls('export')); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_export', - 'user' => 'alice', - 'count' => 1, - 'after' => 1_700_000_100, + [ + 'backend' => 'fake_export', + 'user' => 'alice', + 'count' => 1, + 'after' => 1_700_000_100, + ], ], - ], FakeBackendClient::getCalls('push')); + FakeBackendClient::getCalls('push'), + ); $aliceConfig = Yaml::parseFile(self::$tmpPath . '/users/alice/servers.yaml'); self::assertSame(1_700_000_150, ag($aliceConfig, 'fake_export.export.lastSync')); diff --git a/tests/Commands/State/ImportCommandTest.php b/tests/Commands/State/ImportCommandTest.php index e970fca9..64b28eae 100644 --- a/tests/Commands/State/ImportCommandTest.php +++ b/tests/Commands/State/ImportCommandTest.php @@ -21,8 +21,8 @@ use Symfony\Component\Console\Application; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Tester\CommandTester; -use Symfony\Contracts\HttpClient\HttpClientInterface as iHttp; use Symfony\Component\Yaml\Yaml; +use Symfony\Contracts\HttpClient\HttpClientInterface as iHttp; use Tests\Support\FakeBackendClient; use Tests\Support\StateCommandTestSupport; @@ -95,9 +95,12 @@ protected function sendRequests(array $queue, bool $syncRequests): void self::assertTrue($command->sendRequestsCalled, 'Import command should reach the request processing phase.'); - $stateTable = $db->getDBLayer()->query( - sql: "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'state'" - )->fetchColumn(); + $stateTable = $db + ->getDBLayer() + ->query( + sql: "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'state'", + ) + ->fetchColumn(); self::assertSame('state', $stateTable, 'Failed request-phase writes should be rolled back with the adapter transaction.'); } @@ -157,18 +160,21 @@ public function test_orders_full_before_metadata(): void $status = $this->makeTester($command)->execute([]); self::assertSame(ImportCommand::SUCCESS, $status); - self::assertSame([ - [ - 'backend' => 'full_second', - 'user' => 'main', - 'after' => 1_700_000_000, - ], + self::assertSame( [ - 'backend' => 'metadata_first', - 'user' => 'main', - 'after' => 1_700_000_000, + [ + 'backend' => 'full_second', + 'user' => 'main', + 'after' => 1_700_000_000, + ], + [ + 'backend' => 'metadata_first', + 'user' => 'main', + 'after' => 1_700_000_000, + ], ], - ], FakeBackendClient::getCalls('pull')); + FakeBackendClient::getCalls('pull'), + ); } private function makeTester(ImportCommand $command): CommandTester diff --git a/tests/Commands/State/PlaylistCommandTest.php b/tests/Commands/State/PlaylistCommandTest.php index 28c9f8cb..33e70036 100644 --- a/tests/Commands/State/PlaylistCommandTest.php +++ b/tests/Commands/State/PlaylistCommandTest.php @@ -9,6 +9,7 @@ use App\Libs\LogSuppressor; use App\Libs\Mappers\Import\DirectMapper; use App\Libs\Playlists\PlaylistSyncService; +use App\Libs\TestCase; use App\Libs\UserContext; use Monolog\Logger; use PHPUnit\Framework\MockObject\MockObject; @@ -18,7 +19,6 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Tester\CommandTester; -use App\Libs\TestCase; final class PlaylistCommandTest extends TestCase { @@ -206,8 +206,7 @@ private function makeTester( iClient $client, string $backendName = 'test_plex', array $userNames = ['main'], - ): CommandTester - { + ): CommandTester { $application = new Application(); $application->getDefinition()->addOption(new InputOption('output', 'o', InputOption::VALUE_REQUIRED, '', 'table')); $application->getDefinition()->addOption(new InputOption('trace', null, InputOption::VALUE_NONE)); @@ -221,8 +220,7 @@ private function makeCommand( iClient $client, string $backendName = 'test_plex', array $userNames = ['main'], - ): PlaylistCommand - { + ): PlaylistCommand { $this->initTempApp(); $this->seedTestServersConfig(); diff --git a/tests/Commands/State/ValidateCommandTest.php b/tests/Commands/State/ValidateCommandTest.php index d59a9c1e..f7e9cdd4 100644 --- a/tests/Commands/State/ValidateCommandTest.php +++ b/tests/Commands/State/ValidateCommandTest.php @@ -45,13 +45,16 @@ public function test_remove_last_missing_record(): void self::assertSame(ValidateCommand::SUCCESS, $status); self::assertSame(0, $userContext->db->getTotal(), 'Record should be removed when its last backend reference disappears.'); - self::assertSame([ + self::assertSame( [ - 'backend' => 'fake_validate', - 'user' => 'main', - 'id' => '501', + [ + 'backend' => 'fake_validate', + 'user' => 'main', + 'id' => '501', + ], ], - ], FakeBackendClient::getCalls('metadata')); + FakeBackendClient::getCalls('metadata'), + ); } public function test_invalid_user_returns_failure(): void @@ -106,14 +109,21 @@ public function test_selected_user_db_only(): void self::assertSame(ValidateCommand::SUCCESS, $status); self::assertSame(1, $mainContext->db->getTotal(), 'Main user records should remain untouched when another user is selected.'); - self::assertSame(0, $aliceContext->db->getTotal(), 'Selected user records should be validated and removed when metadata no longer exists.'); - self::assertSame([ + self::assertSame( + 0, + $aliceContext->db->getTotal(), + 'Selected user records should be validated and removed when metadata no longer exists.', + ); + self::assertSame( [ - 'backend' => 'fake_validate', - 'user' => 'alice', - 'id' => '602', + [ + 'backend' => 'fake_validate', + 'user' => 'alice', + 'id' => '602', + ], ], - ], FakeBackendClient::getCalls('metadata')); + FakeBackendClient::getCalls('metadata'), + ); } private function makeTester(ValidateCommand $command): CommandTester diff --git a/tests/Commands/System/PruneCommandTest.php b/tests/Commands/System/PruneCommandTest.php index a5f44678..c2f4df47 100644 --- a/tests/Commands/System/PruneCommandTest.php +++ b/tests/Commands/System/PruneCommandTest.php @@ -159,7 +159,7 @@ public function test_run_due(): void $this->assertSame(PruneCommand::SUCCESS, $status); $this->assertSame( [ - ['always_pruner', false], + ['always_pruner', false], ['events_remover', false], ], self::$calls, @@ -183,7 +183,7 @@ public function test_run_exec(): void $this->assertSame( [ ['always_pruner', true], - ['logs_remover', true], + ['logs_remover', true], ], self::$calls, ); diff --git a/tests/Database/DBLayerTest.php b/tests/Database/DBLayerTest.php index cbd1ce4a..f1b90b7e 100644 --- a/tests/Database/DBLayerTest.php +++ b/tests/Database/DBLayerTest.php @@ -13,8 +13,8 @@ use App\Libs\Guid; use App\Libs\Options; use App\Libs\TestCase; -use Monolog\Level; use Monolog\Handler\TestHandler; +use Monolog\Level; use Monolog\Logger; use PDO; use PDOException; diff --git a/tests/Database/PDOAdapterTest.php b/tests/Database/PDOAdapterTest.php index 461a752f..bb6590fe 100644 --- a/tests/Database/PDOAdapterTest.php +++ b/tests/Database/PDOAdapterTest.php @@ -30,7 +30,7 @@ class PDOAdapterTest extends TestCase private array $testMovie = []; private array $testEpisode = []; - private iDB|null $db = null; + private ?iDB $db = null; public function setUp(): void { @@ -83,14 +83,14 @@ public function clear(): bool public function getMultiple(iterable $keys, mixed $default = null): iterable { foreach ($keys as $key) { - yield $key => $this->get((string)$key, $default); + yield $key => $this->get((string) $key, $default); } } public function setMultiple(iterable $values, DateInterval|int|null $ttl = null): bool { foreach ($values as $key => $value) { - $this->set((string)$key, $value, $ttl); + $this->set((string) $key, $value, $ttl); } return true; @@ -99,7 +99,7 @@ public function setMultiple(iterable $values, DateInterval|int|null $ttl = null) public function deleteMultiple(iterable $keys): bool { foreach ($keys as $key) { - $this->delete((string)$key); + $this->delete((string) $key); } return true; @@ -131,10 +131,8 @@ private function seedEntities(): array $altEpisode[iState::COLUMN_GUIDS][Guid::GUID_TVRAGE] = '6501'; $altEpisode[iState::COLUMN_GUIDS][Guid::GUID_ANIDB] = '6601'; foreach ($altEpisode[iState::COLUMN_META_DATA] as $backend => $metadata) { - $altEpisode[iState::COLUMN_META_DATA][$backend][iState::COLUMN_META_DATA_EXTRA][iState::COLUMN_META_DATA_EXTRA_TITLE] = - 'Different Episode Title'; - $altEpisode[iState::COLUMN_META_DATA][$backend][iState::COLUMN_ID] = - ($metadata[iState::COLUMN_ID] ?? 0) + 100; + $altEpisode[iState::COLUMN_META_DATA][$backend][iState::COLUMN_META_DATA_EXTRA][iState::COLUMN_META_DATA_EXTRA_TITLE] = 'Different Episode Title'; + $altEpisode[iState::COLUMN_META_DATA][$backend][iState::COLUMN_ID] = ($metadata[iState::COLUMN_ID] ?? 0) + 100; } $altEpisodeEntity = $this->db->insert(new StateEntity($altEpisode)); @@ -226,14 +224,14 @@ public function test_get_conditions(): void $this->assertSame( $modified->getAll(), $this->db->get($item)->getAll(), - 'When db is not empty, get returns object.' + 'When db is not empty, get returns object.', ); // -- look up based on id $this->assertSame( $modified->getAll(), $this->db->get($modified)->getAll(), - 'Look up db using id pointer and return object.' + 'Look up db using id pointer and return object.', ); } @@ -285,7 +283,7 @@ public function test_getAll_conditions(): void $this->assertSame( [], $this->db->getAll(opts: ['class' => $item]), - 'When db is empty, getAll returns empty array.' + 'When db is empty, getAll returns empty array.', ); $this->db->insert($item); @@ -293,13 +291,13 @@ public function test_getAll_conditions(): void $this->assertCount( 1, $this->db->getAll(opts: ['class' => $item]), - 'When db is not empty, objects returned.' + 'When db is not empty, objects returned.', ); $this->assertCount( 0, $this->db->getAll(date: new DateTimeImmutable('now'), opts: ['class' => $item]), - 'When db is not empty, And date condition is not met. empty array should be returned.' + 'When db is not empty, And date condition is not met. empty array should be returned.', ); } @@ -349,7 +347,7 @@ public function test_update_conditions(): void $this->assertSame( $updatedItem->getAll(), $r, - 'When updating item, getAll should return same values as the recorded item.' + 'When updating item, getAll should return same values as the recorded item.', ); $updatedItem->watched = 0; @@ -360,7 +358,7 @@ public function test_update_conditions(): void $this->assertNull( ag($item->getMetadata($item->via), iState::COLUMN_META_DATA_PLAYED_AT), - 'When watched flag is set to 0, played_at metadata should be null.' + 'When watched flag is set to 0, played_at metadata should be null.', ); } @@ -456,12 +454,12 @@ public function test_duplicates_uses_cache(): void $this->assertArrayHasKey( $episodeEntity->id, $second, - 'Episode record should remain present in cached duplicates result.' + 'Episode record should remain present in cached duplicates result.', ); $this->assertArrayHasKey( $movieEntity->id, $second, - 'Related movie record should remain present in cached duplicates result.' + 'Related movie record should remain present in cached duplicates result.', ); } @@ -483,7 +481,7 @@ public function test_fetch_returns_all_entities(): void $this->assertSame( $expectedIds, $fetchedIds, - 'Fetch should yield the same set of IDs that were inserted.' + 'Fetch should yield the same set of IDs that were inserted.', ); } @@ -507,35 +505,35 @@ public function test_remove_conditions(): void $this->assertTrue( $this->db->remove($item1), - 'When db is not empty, remove returns true if record removed.' + 'When db is not empty, remove returns true if record removed.', ); $this->assertInstanceOf( iState::class, $this->db->get($item2), - 'When Record exists an instance of StateInterface is returned.' + 'When Record exists an instance of StateInterface is returned.', ); $this->assertNull( $this->db->get($item3), - 'When Record does not exists a null is returned.' + 'When Record does not exists a null is returned.', ); // -- remove without id pointer. $this->assertTrue( $this->db->remove($item2), - 'If record does not have id but have pointers resolve it in db and remove it, and return true.' + 'If record does not have id but have pointers resolve it in db and remove it, and return true.', ); $this->assertFalse( $this->db->remove($item3), - 'If record does not have id and/or pointers, return false.' + 'If record does not have id and/or pointers, return false.', ); $item1 = new StateEntity($this->testEpisode); $this->db->insert($item1); $this->assertTrue( $this->db->remove(new StateEntity($this->testEpisode)), - 'When removing item with id, return true.' + 'When removing item with id, return true.', ); } @@ -547,7 +545,7 @@ public function test_commit_conditions(): void $this->assertSame( ['added' => 2, 'updated' => 0, 'failed' => 0], $this->db->commit([$item1, $item2]), - 'Array with count of each operation status.' + 'Array with count of each operation status.', ); $item1->guids['guid_anidb'] = iState::TYPE_EPISODE . '/1'; @@ -556,7 +554,7 @@ public function test_commit_conditions(): void $this->assertSame( ['added' => 0, 'updated' => 2, 'failed' => 0], $this->db->commit([$item1, $item2]), - 'Array with count of each operation status.' + 'Array with count of each operation status.', ); } @@ -592,7 +590,7 @@ public function test_findByBackendId(): void $this->assertCount(0, $item1_db->apply($item1)->diff(), 'When item is found, it should be returned.'); $this->assertNull( $this->db->findByBackendId('not_set', 0, 'movie'), - 'When item is not found, null should be returned.' + 'When item is not found, null should be returned.', ); $item2_db = $this->db->findByBackendId( @@ -667,17 +665,19 @@ public function test_reset_keeps_migration_metadata(): void public function test_transaction() { - $this->db->getDBLayer()->transactional(function () { - $this->checkException( - closure: function () { - return $this->db->transactional(fn() => throw new \PDOException('test', 11)); - }, - reason: 'If we started transaction from outside the db, it shouldn\'t swallow the exception.', - exception: DBLayerException::class, - exceptionMessage: 'test', - exceptionCode: 11, - ); - }); + $this->db + ->getDBLayer() + ->transactional(function () { + $this->checkException( + closure: function () { + return $this->db->transactional(fn() => throw new \PDOException('test', 11)); + }, + reason: 'If we started transaction from outside the db, it shouldn\'t swallow the exception.', + exception: DBLayerException::class, + exceptionMessage: 'test', + exceptionCode: 11, + ); + }); $this->db->transactional(fn($db) => $db->insert(new StateEntity($this->testEpisode))); @@ -710,7 +710,7 @@ public function test_destruct_no_commit(): void self::assertSame( 0, (int) $verify->query('SELECT COUNT(*) FROM state')->fetchColumn(), - 'Uncommitted adapter writes should not be visible to another connection.' + 'Uncommitted adapter writes should not be visible to another connection.', ); unset($db); @@ -718,7 +718,7 @@ public function test_destruct_no_commit(): void self::assertSame( 0, (int) $verify->query('SELECT COUNT(*) FROM state')->fetchColumn(), - 'Destroying adapter should not auto-commit an open transaction.' + 'Destroying adapter should not auto-commit an open transaction.', ); } @@ -754,15 +754,18 @@ private function expectedManagedIndexes(array $backends): array private function stateManagedIndexes(PDO $pdo): array { $indexes = $pdo->query( - "SELECT name FROM sqlite_master WHERE type = 'index' AND tbl_name = 'state' ORDER BY name" + "SELECT name FROM sqlite_master WHERE type = 'index' AND tbl_name = 'state' ORDER BY name", )?->fetchAll(PDO::FETCH_COLUMN); $managed = array_values(array_filter( false === is_array($indexes) ? [] : $indexes, - fn(mixed $name): bool => true === is_string($name) && ( - str_starts_with($name, 'state_parent_') - || str_starts_with($name, 'state_guids_') - || str_starts_with($name, 'state_metadata_') + fn(mixed $name): bool => ( + true === is_string($name) + && ( + str_starts_with($name, 'state_parent_') + || str_starts_with($name, 'state_guids_') + || str_starts_with($name, 'state_metadata_') + ) ), )); @@ -770,5 +773,4 @@ private function stateManagedIndexes(PDO $pdo): array return $managed; } - } diff --git a/tests/Fixtures/EpisodeEntity.php b/tests/Fixtures/EpisodeEntity.php index 63bb5d5d..a6ce72ac 100644 --- a/tests/Fixtures/EpisodeEntity.php +++ b/tests/Fixtures/EpisodeEntity.php @@ -77,15 +77,15 @@ iState::COLUMN_EXTRA => [ 'test_plex' => [ iState::COLUMN_EXTRA_DATE => 1, - iState::COLUMN_EXTRA_EVENT => 'media.scrobble' + iState::COLUMN_EXTRA_EVENT => 'media.scrobble', ], 'test_jellyfin' => [ iState::COLUMN_EXTRA_DATE => 1, - iState::COLUMN_EXTRA_EVENT => 'media.scrobble' + iState::COLUMN_EXTRA_EVENT => 'media.scrobble', ], 'test_emby' => [ iState::COLUMN_EXTRA_DATE => 1, - iState::COLUMN_EXTRA_EVENT => 'media.scrobble' + iState::COLUMN_EXTRA_EVENT => 'media.scrobble', ], ], iState::COLUMN_CREATED_AT => 2, diff --git a/tests/Libs/ConfigFileTest.php b/tests/Libs/ConfigFileTest.php index 719a2631..f2cc81eb 100644 --- a/tests/Libs/ConfigFileTest.php +++ b/tests/Libs/ConfigFileTest.php @@ -17,7 +17,7 @@ class ConfigFileTest extends TestCase private array $data = ['foo' => 'bar', 'baz' => 'kaz', 'sub' => ['key' => 'val']]; private array $params = []; - private Logger|null $logger = null; + private ?Logger $logger = null; protected function setUp(): void { @@ -49,7 +49,7 @@ public function test_constructor() type: 'json', autoSave: false, autoCreate: false, - autoBackup: false + autoBackup: false, ), reason: 'If file does not exist, and autoCreate is set to false, an exception should be thrown.', exception: InvalidArgumentException::class, @@ -62,7 +62,7 @@ public function test_constructor() type: 'php', autoSave: false, autoCreate: false, - autoBackup: false + autoBackup: false, ), reason: 'If type is not supported, an exception should be thrown.', exception: InvalidArgumentException::class, @@ -75,11 +75,11 @@ public function test_constructor() type: 'json', autoSave: false, autoCreate: true, - autoBackup: false + autoBackup: false, ), reason: 'If file is not writable, an exception should be thrown.', exception: InvalidArgumentException::class, - exceptionMessage: "could not be created", + exceptionMessage: 'could not be created', ); try { @@ -114,7 +114,7 @@ public function test_setLogger() $class->persist(); $this->assertStringContainsString( 'has been modified since last load.', - $this->handler->getRecords()[0]['message'] + $this->handler->getRecords()[0]['message'], ); } @@ -128,7 +128,7 @@ public function test_delete() $this->assertArrayNotHasKey( 'test_jellyfin', ConfigFile::open(...$params)->delete('test_jellyfin')->getAll(), - '->delete: Failed to delete key from YAML file.' + '->delete: Failed to delete key from YAML file.', ); $class = ConfigFile::open(...$params); @@ -136,7 +136,7 @@ public function test_delete() $this->assertArrayNotHasKey( 'test_jellyfin', $class->getAll(), - 'ArrayAccess: Failed to delete key from YAML file.' + 'ArrayAccess: Failed to delete key from YAML file.', ); } @@ -147,14 +147,14 @@ public function test_get() $this->assertArrayHasKey( 'token', $class->get('test_plex', []), - '->get: Invalid response from parsing YAML file.' + '->get: Invalid response from parsing YAML file.', ); $this->assertArrayHasKey('token', $class['test_plex'], 'ArrayAccess: Invalid response from parsing YAML file.'); $this->assertArrayNotHasKey( 'token', $class->get('test_not_set', []), - 'Invalid response from parsing YAML file.' + 'Invalid response from parsing YAML file.', ); $this->assertNull($class['test_not_set'], 'ArrayAccess: Must return null if key does not exist.'); } @@ -179,7 +179,7 @@ public function test_set() $this->assertArrayHasKey( 'test_foo', ConfigFile::open(...$params)->set('test_foo', $this->data)->getAll(), - '->set: Failed to set key in YAML file.' + '->set: Failed to set key in YAML file.', ); $class = ConfigFile::open(...$params); @@ -234,7 +234,7 @@ public function test_configFile_set() $this->assertArrayNotHasKey( 'token', $class->get('test_not_set', []), - 'Invalid response from parsing YAML file.' + 'Invalid response from parsing YAML file.', ); $this->assertTrue($class->has('test_plex'), 'Must return true if key exists.'); $this->assertFalse($class->has('test_not_set'), 'Must return false if key does not exist.'); @@ -275,7 +275,7 @@ public function test_addFilter() $this->assertEquals( 'LOWERCASE_VALUE', $reloaded->get('test_filter'), - 'Filter should have uppercased the value during persist' + 'Filter should have uppercased the value during persist', ); // Test multiple filters can be added @@ -296,12 +296,12 @@ public function test_addFilter() $this->assertEquals( 'PREFIX_LOWERCASE_VALUE', $reloaded2->get('test_filter'), - 'Both filters should have been applied' + 'Both filters should have been applied', ); $this->assertEquals( 'PREFIX_value', $reloaded2->get('another_key'), - 'Filter should apply to new keys' + 'Filter should apply to new keys', ); // Test that filter receives array and returns array @@ -346,7 +346,7 @@ public function test_removeFilter() $this->assertEquals( 'should_stay_lowercase', $reloaded->get('test_value'), - 'Filter should not have been applied after removal' + 'Filter should not have been applied after removal', ); // Test removing non-existent filter doesn't cause error @@ -382,7 +382,7 @@ public function test_removeFilter() $this->assertEquals( 'PREFIX_value', $reloaded3->get('test_partial'), - 'Only prefix filter should be applied, not uppercase' + 'Only prefix filter should be applied, not uppercase', ); } @@ -449,7 +449,7 @@ public function test_replaceAll_with_operations_tracking() $this->assertEquals( $newData, $class->getAll(), - 'Data should be fully replaced regardless of previous operations' + 'Data should be fully replaced regardless of previous operations', ); $this->assertArrayNotHasKey('before_key', $class->getAll(), 'Previous set operation should be overridden'); @@ -502,7 +502,7 @@ public function test_replaceAll_with_filters() $this->assertEquals( 'LOWERCASE', $reloaded->get('key1'), - 'Filter should be applied during persist after replaceAll' + 'Filter should be applied during persist after replaceAll', ); $this->assertEquals('VALUE', $reloaded->get('key2'), 'All values should be filtered'); } diff --git a/tests/Libs/ConfigTest.php b/tests/Libs/ConfigTest.php index dbcf88b4..8578fccc 100644 --- a/tests/Libs/ConfigTest.php +++ b/tests/Libs/ConfigTest.php @@ -40,7 +40,7 @@ public function test_init(): void $this->assertSame( $this->data, Config::getAll(), - 'When config is initialized, getAll() returns all data' + 'When config is initialized, getAll() returns all data', ); } @@ -49,7 +49,7 @@ public function test_get(): void $this->assertSame( $this->data['foo'], Config::get('foo'), - 'When key is set, get() returns its value' + 'When key is set, get() returns its value', ); } @@ -58,7 +58,7 @@ public function test_default(): void $this->assertSame( 'not_set', Config::get('key_not_set', 'not_set'), - 'When key is not set, default value is returned' + 'When key is not set, default value is returned', ); } @@ -72,7 +72,7 @@ public function test_append(): void $this->assertSame( $data, Config::getAll(), - 'When data is appended, getAll() returns all data including appended data.' + 'When data is appended, getAll() returns all data including appended data.', ); } @@ -84,12 +84,12 @@ public function test_save(): void $this->assertSame( 'updated', Config::get('foo'), - 'When key is set via save, get() returns its value' + 'When key is set via save, get() returns its value', ); $this->assertSame( 'updated', Config::get('sub.key'), - 'When key is set via save, get() returns its value' + 'When key is set via save, get() returns its value', ); } @@ -98,13 +98,13 @@ public function test_reset(): void $this->assertCount( count($this->data), Config::getAll(), - 'When config is initialized, getAll() returns all data' + 'When config is initialized, getAll() returns all data', ); Config::reset(); $this->assertEmpty( Config::getAll(), - 'When config is reset, getAll() returns empty array' + 'When config is reset, getAll() returns empty array', ); } @@ -123,11 +123,11 @@ public function test_remove(): void $this->assertSame( $data, Config::getAll(), - 'When key is removed, getAll() returns all data except removed data.' + 'When key is removed, getAll() returns all data except removed data.', ); $this->assertFalse( Config::has('sub'), - 'When key is removed, has() returns false' + 'When key is removed, has() returns false', ); } @@ -150,5 +150,4 @@ public function test_logs_future(): void $this->assertSame('-7 DAYS', Config::get('logs.prune.after')); } - } diff --git a/tests/Libs/DataUtilTest.php b/tests/Libs/DataUtilTest.php index 7c9cc9cb..d24fbeb6 100644 --- a/tests/Libs/DataUtilTest.php +++ b/tests/Libs/DataUtilTest.php @@ -19,10 +19,10 @@ class DataUtilTest extends TestCase 'sub' => ['key' => 'val'], 'bool' => true, 'int' => 1, - 'float' => 1.1 + 'float' => 1.1, ]; - private iRequest|null $request = null; + private ?iRequest $request = null; protected function setUp(): void { @@ -55,7 +55,7 @@ protected function setUp(): void 'error' => UPLOAD_ERR_OK, 'tmp_name' => __DIR__ . '/../Fixtures/test_servers.yaml', ], - ] + ], ); } @@ -70,19 +70,19 @@ public function test_DataUtil_fromRequest(): void $this->assertSame( $this->post, DataUtil::fromRequest($this->request)->getAll(), - 'fromRequest() returns all data post data, Default is without query params.' + 'fromRequest() returns all data post data, Default is without query params.', ); $this->assertSame( $this->post, DataUtil::fromRequest($this->request, includeQueryParams: false)->getAll(), - 'fromRequest() return only post data, without query params when includeQueryParams is explicitly set to false.' + 'fromRequest() return only post data, without query params when includeQueryParams is explicitly set to false.', ); $this->assertSame( array_replace_recursive($this->query, $this->post), DataUtil::fromRequest($this->request, includeQueryParams: true)->getAll(), - 'fromRequest() returns all data including query params when includeQueryParams is explicitly set to true.' + 'fromRequest() returns all data including query params when includeQueryParams is explicitly set to true.', ); } @@ -94,13 +94,13 @@ public function test_DataUtil_get(): void $this->assertSame( $this->query['limit'], $obj->get('limit'), - 'get() returns the value of the key if it exists.' + 'get() returns the value of the key if it exists.', ); $this->assertNull($obj->get('not_set'), 'get() returns null if the key does not exist.'); $this->assertSame( 'default', $obj->get('not_set', 'default'), - 'get() returns the default value if the key does not exist.' + 'get() returns the default value if the key does not exist.', ); $this->assertIsArray($obj->get('sub'), 'get() returns an array if the key is an array.'); $this->assertIsBool($obj->get('bool'), 'get() returns a boolean if the key is a boolean.'); @@ -110,7 +110,7 @@ public function test_DataUtil_get(): void $this->assertSame( ag($this->post, 'sub.key'), $obj->get('sub.key'), - 'get() returns the value of the key if it exists.' + 'get() returns the value of the key if it exists.', ); } @@ -132,7 +132,7 @@ public function test_dataUtil_map() $this->assertSame( array_map($callback, $data), $obj->map($callback)->getAll(), - 'map() returns the array with the callback applied to each value.' + 'map() returns the array with the callback applied to each value.', ); } @@ -144,7 +144,7 @@ public function test_dataUtil_filter() $this->assertSame( array_filter($data, $callback, ARRAY_FILTER_USE_BOTH), $obj->filter($callback)->getAll(), - 'filter() returns the array with the callback applied to each value.' + 'filter() returns the array with the callback applied to each value.', ); } @@ -157,7 +157,7 @@ public function test_dataUtil_with() $this->assertSame( $expected, $obj->with('new', 'value')->getAll(), - 'with() returns a new DataUtil object with the key and value set.' + 'with() returns a new DataUtil object with the key and value set.', ); } @@ -168,25 +168,25 @@ public function test_dataUtil_without() $this->assertSame( ['page' => $this->query['page']], $obj->without('limit')->getAll(), - 'without() returns a new DataUtil object without the key.' + 'without() returns a new DataUtil object without the key.', ); $this->assertSame( $this->query, $obj->without('not_set')->getAll(), - 'without() returns a new DataUtil object even if the key does not exist with same data.' + 'without() returns a new DataUtil object even if the key does not exist with same data.', ); $this->assertNotSame( spl_object_hash($obj), spl_object_hash($obj->without('not_set')), - 'without() Any mutation should return a new object. and the spl_object_hash() should not be the same.' + 'without() Any mutation should return a new object. and the spl_object_hash() should not be the same.', ); $this->assertNotSame( spl_object_id($obj), spl_object_id($obj->without('not_set')), - 'without() Any mutation should return a new object. and the spl_object_id() should not be the same.' + 'without() Any mutation should return a new object. and the spl_object_id() should not be the same.', ); } @@ -199,7 +199,6 @@ public function test_dataUtil_jsonSerialize() public function test_dataUtil_toString() { $obj = DataUtil::fromArray($this->query); - $this->assertSame(json_encode($this->query), (string)$obj, 'jsonSerialize() returns the data array.'); + $this->assertSame(json_encode($this->query), (string) $obj, 'jsonSerialize() returns the data array.'); } - } diff --git a/tests/Libs/EmitterTest.php b/tests/Libs/EmitterTest.php index 6287b357..2cf4fbbe 100644 --- a/tests/Libs/EmitterTest.php +++ b/tests/Libs/EmitterTest.php @@ -18,7 +18,7 @@ class EmitterTest extends TestCase private array $headers = []; private string $body = ''; - private Emitter|null $emitter = null; + private ?Emitter $emitter = null; protected function reset(): void { @@ -29,7 +29,7 @@ protected function reset(): void $this->headers[] = [ 'header' => $header, 'replace' => $replace, - 'status' => $status + 'status' => $status, ]; }) ->withHeadersSentFunc(fn() => false) @@ -45,38 +45,47 @@ protected function setUp(): void public function test_emitter_headers() { - $response = new Response(Status::OK, headers: [ - 'content-type' => 'text/plain', - 'X-TEST' => 'test', - ], version: '2.0'); + $response = new Response( + Status::OK, + headers: [ + 'content-type' => 'text/plain', + 'X-TEST' => 'test', + ], + version: '2.0', + ); $this->emitter->__invoke($response); $this->assertSame( 'Content-Type: text/plain', $this->headers[0]['header'], - 'Content-Type header is not set correctly.' + 'Content-Type header is not set correctly.', ); $this->assertSame( 'X-Test: test', $this->headers[1]['header'], - 'X-TEST header is not set correctly.' + 'X-TEST header is not set correctly.', ); $this->assertSame( 'HTTP/2.0 200 OK', $this->headers[2]['header'], - 'Status line is not set correctly.' + 'Status line is not set correctly.', ); } public function test_emitter_body() { - $response = new Response(Status::OK, headers: [ - 'content-type' => 'text/plain', - 'X-TEST' => 'test', - ], body: Stream::create('test'), version: '2.0'); + $response = new Response( + Status::OK, + headers: [ + 'content-type' => 'text/plain', + 'X-TEST' => 'test', + ], + body: Stream::create('test'), + version: '2.0', + ); $this->emitter->__invoke($response); $this->assertSame('test', $this->body, 'Body is not set correctly.'); @@ -104,18 +113,24 @@ public function test_emitter_body() public function test_emitter_body_streamable() { - $response = new Response(Status::OK, headers: [ - 'X-Emitter-Flush' => '1', - ], body: StreamedBody::create(fn() => 'test')); + $response = new Response( + Status::OK, + headers: [ + 'X-Emitter-Flush' => '1', + ], + body: StreamedBody::create(fn() => 'test'), + ); $this->emitter->__invoke($response); $this->assertSame('test', $this->body, 'Body is not set correctly.'); $this->reset(); $this->emitter->__invoke( - $response->withoutHeader('X-Emitter-Flush')->withBody( - StreamedBody::create(fn() => 'test', isReadable: false) - ) + $response + ->withoutHeader('X-Emitter-Flush') + ->withBody( + StreamedBody::create(fn() => 'test', isReadable: false), + ), ); $this->assertSame('test', $this->body, 'Body is not set correctly.'); } @@ -151,11 +166,15 @@ public function test_emitter_stops_empty(): void public function test_fail_conditions() { - $response = new Response(Status::OK, headers: [ - 'content-type' => 'text/plain', - 'X-TEST' => 'test', - ], body: Stream::create('test'), version: '2.0'); - + $response = new Response( + Status::OK, + headers: [ + 'content-type' => 'text/plain', + 'X-TEST' => 'test', + ], + body: Stream::create('test'), + version: '2.0', + ); $emitter = $this->emitter->withHeadersSentFunc(function (&$file, &$line): bool { $file = 'test'; @@ -167,7 +186,7 @@ public function test_fail_conditions() closure: fn() => $emitter->__invoke($response), reason: 'Headers already sent.', exception: EmitterException::class, - exceptionCode: EmitterException::HEADERS_SENT + exceptionCode: EmitterException::HEADERS_SENT, ); ob_start(); @@ -177,7 +196,7 @@ public function test_fail_conditions() closure: fn() => $this->emitter->__invoke($response), reason: 'Headers already sent.', exception: EmitterException::class, - exceptionCode: EmitterException::OUTPUT_SENT + exceptionCode: EmitterException::OUTPUT_SENT, ); ob_end_clean(); diff --git a/tests/Libs/Events/DataEventTest.php b/tests/Libs/Events/DataEventTest.php index 00528080..07d93592 100644 --- a/tests/Libs/Events/DataEventTest.php +++ b/tests/Libs/Events/DataEventTest.php @@ -24,7 +24,7 @@ protected function getDataEvent(array $data = []): DataEvent EventsTable::COLUMN_REFERENCE => 'test', EventsTable::COLUMN_EVENT => 'test', EventsTable::COLUMN_EVENT_DATA => json_encode(['foo' => 'bar']), - EventsTable::COLUMN_OPTIONS => json_encode(['timeout' => 60,]), + EventsTable::COLUMN_OPTIONS => json_encode(['timeout' => 60]), EventsTable::COLUMN_ATTEMPTS => 0, EventsTable::COLUMN_LOGS => json_encode(['test entry']), EventsTable::COLUMN_CREATED_AT => '2024-01-01 01:01:01', @@ -49,9 +49,7 @@ public function test_initial_state() $this->assertSame('test', $dataEvent->getReference(), 'getReference() does not return the expected value'); $this->assertSame(['test entry'], $dataEvent->getLogs(), 'getLogs() does not return the expected value'); $this->assertSame(['foo' => 'bar'], $dataEvent->getData(), 'getData() does not return the expected value'); - $this->assertSame(['timeout' => 60], - $dataEvent->getOptions(), - 'getOptions() does not return the expected value'); + $this->assertSame(['timeout' => 60], $dataEvent->getOptions(), 'getOptions() does not return the expected value'); } public function test_logs_mutation() @@ -61,9 +59,7 @@ public function test_logs_mutation() $this->assertSame(['test entry'], $dataEvent->getLogs(), 'getLogs() does not return the expected value'); $dataEvent->addRawLog('new entry'); - $this->assertSame(['test entry', 'new entry'], - $dataEvent->getLogs(), - 'addLog() does not return the expected value'); + $this->assertSame(['test entry', 'new entry'], $dataEvent->getLogs(), 'addLog() does not return the expected value'); for ($i = 0; $i < 203; $i++) { $dataEvent->addRawLog('new entry'); diff --git a/tests/Libs/Events/EventQueueTest.php b/tests/Libs/Events/EventQueueTest.php index 5a56b0e4..32489132 100644 --- a/tests/Libs/Events/EventQueueTest.php +++ b/tests/Libs/Events/EventQueueTest.php @@ -21,7 +21,8 @@ final class EventQueueTest extends TestCase public function test_cache_only(): void { $cache = new Psr16Cache(new ArrayAdapter()); - $repo = $this->getMockBuilder(EventsRepository::class) + $repo = $this + ->getMockBuilder(EventsRepository::class) ->disableOriginalConstructor() ->onlyMethods(['getObject', 'findByReference', 'remove', 'save']) ->getMock(); @@ -31,13 +32,17 @@ public function test_cache_only(): void $repo->expects($this->never())->method('remove'); $repo->expects($this->never())->method('save'); - $queued = new EventQueue($cache, $repo)->queue('on_request', ['ok' => true], [ - 'unique' => true, - EventsTable::COLUMN_REFERENCE => 'request://1', - Options::CACHE_ONLY => true, - Options::CACHE_TTL => new \DateInterval('PT6H'), - Options::CONTEXT_USER => 'alice', - ]); + $queued = new EventQueue($cache, $repo)->queue( + 'on_request', + ['ok' => true], + [ + 'unique' => true, + EventsTable::COLUMN_REFERENCE => 'request://1', + Options::CACHE_ONLY => true, + Options::CACHE_TTL => new \DateInterval('PT6H'), + Options::CONTEXT_USER => 'alice', + ], + ); self::assertSame('on_request', $queued->event); self::assertSame(EventStatus::PENDING, $queued->status); @@ -66,25 +71,30 @@ public function test_lock_fallback(): void foreach ($modes as $mode) { $reference = 'ref://' . $mode; $item = new EventInfo([], true); - $repo = $this->getMockBuilder(EventsRepository::class) + $repo = $this + ->getMockBuilder(EventsRepository::class) ->disableOriginalConstructor() ->onlyMethods(['getObject', 'findByReference', 'remove', 'save']) ->getMock(); - $repo->expects($this->once()) + $repo + ->expects($this->once()) ->method('getObject') ->with([]) ->willReturn($item); $optsMatcher = $this->callback(static function (array $opts) use ($reference): bool { - return true === $opts[Options::FAIL_FAST_ON_LOCK] + return ( + true === $opts[Options::FAIL_FAST_ON_LOCK] && 'alice' === $opts[Options::CONTEXT_USER] && $reference === $opts[EventsTable::COLUMN_REFERENCE] - && true === $opts['unique']; + && true === $opts['unique'] + ); }); if ('find' === $mode) { - $repo->expects($this->once()) + $repo + ->expects($this->once()) ->method('findByReference') ->with($reference, [], $optsMatcher) ->willThrowException(new PDOException('database is locked')); @@ -96,12 +106,14 @@ public function test_lock_fallback(): void if ('remove' === $mode) { $existing = new EventInfo([], true); - $repo->expects($this->once()) + $repo + ->expects($this->once()) ->method('findByReference') ->with($reference, [], $optsMatcher) ->willReturn($existing); - $repo->expects($this->once()) + $repo + ->expects($this->once()) ->method('remove') ->with($existing, $optsMatcher) ->willThrowException(new PDOException('database is locked')); @@ -110,34 +122,42 @@ public function test_lock_fallback(): void } if ('save' === $mode) { - $repo->expects($this->once()) + $repo + ->expects($this->once()) ->method('findByReference') ->with($reference, [], $optsMatcher) ->willReturn(null); $repo->expects($this->never())->method('remove'); - $repo->expects($this->once()) + $repo + ->expects($this->once()) ->method('save') ->with( $this->callback(static function (EventInfo $event) use ($reference): bool { - return 'process_request' === $event->event + return ( + 'process_request' === $event->event && EventStatus::PENDING === $event->status && $reference === $event->reference && ['ok' => true] === $event->event_data && DataEvent::class === $event->options['class'] - && 'alice' === $event->options[Options::CONTEXT_USER]; + && 'alice' === $event->options[Options::CONTEXT_USER] + ); }), $optsMatcher, ) ->willThrowException(new PDOException('database is locked')); } - $queued = new EventQueue($cache, $repo)->queue('process_request', ['ok' => true], [ - 'unique' => true, - EventsTable::COLUMN_REFERENCE => $reference, - Options::FAIL_FAST_ON_LOCK => true, - Options::CONTEXT_USER => 'alice', - ]); + $queued = new EventQueue($cache, $repo)->queue( + 'process_request', + ['ok' => true], + [ + 'unique' => true, + EventsTable::COLUMN_REFERENCE => $reference, + Options::FAIL_FAST_ON_LOCK => true, + Options::CONTEXT_USER => 'alice', + ], + ); self::assertSame('process_request', $queued->event); self::assertSame(EventStatus::PENDING, $queued->status); diff --git a/tests/Libs/GuidTest.php b/tests/Libs/GuidTest.php index 4084bc61..e985f2af 100644 --- a/tests/Libs/GuidTest.php +++ b/tests/Libs/GuidTest.php @@ -18,7 +18,7 @@ class GuidTest extends TestCase { - protected Logger|null $logger = null; + protected ?Logger $logger = null; private function logged(Level $level, string $message, bool $clear = false): bool { @@ -61,21 +61,21 @@ protected function setUp(): void public function test__construct() { $guid = Guid::fromArray(['guid_test' => 'ztt1234567']); - $this->assertCount(0, $guid->getAll(), "Count should be 0 when the GUID is not supported."); + $this->assertCount(0, $guid->getAll(), 'Count should be 0 when the GUID is not supported.'); $guid = Guid::fromArray(['guid_imdb' => null]); - $this->assertCount(0, $guid->getAll(), "Count should be 0 when value of guid is null."); + $this->assertCount(0, $guid->getAll(), 'Count should be 0 when value of guid is null.'); Guid::fromArray(['guid_tvdb' => INF], logger: $this->logger); $this->assertTrue( $this->logged(Level::Info, 'external id. Unexpected value type.', true), - "Assert message logged when the value type does not match the expected type." + 'Assert message logged when the value type does not match the expected type.', ); Guid::fromArray(['guid_tvdb' => 'tt1234567']); $this->assertTrue( $this->logged(Level::Info, "external id. Unexpected value '", true), - "Assert message logged when the value does not match the expected pattern." + 'Assert message logged when the value does not match the expected pattern.', ); } @@ -88,7 +88,7 @@ public function test_validation() r("Failed to assert that '{value} test for '{guid}' returns true.", [ 'guid' => $guid, 'value' => $value, - ]) + ]), ); } @@ -99,7 +99,7 @@ public function test_validation() 'guid' => $guid, 'value' => $value, ]), - exception: InvalidArgumentException::class + exception: InvalidArgumentException::class, ); } } @@ -108,16 +108,16 @@ public function test_validation() closure: fn() => Guid::validate('guid_not_set', '12345678'), reason: 'Failed to assert that an exception is thrown when the GUID is not supported.', exception: InvalidArgumentException::class, - exceptionMessage: 'Invalid db' + exceptionMessage: 'Invalid db', ); $this->assertTrue( Guid::validate('guid_cmdb', '12345678'), - 'Assert supported guid with no validator returns true.' + 'Assert supported guid with no validator returns true.', ); $this->assertTrue( Guid::validate('path', '0123456789abcdef0123456789abcdef'), - 'Assert path guid validates through prefix normalization.' + 'Assert path guid validates through prefix normalization.', ); } @@ -126,9 +126,9 @@ public function test_jsonSerialize() Guid::reparse(); $guid = Guid::fromArray(['guid_imdb' => 'tt1234567', 'guid_tvdb' => '123']); $this->assertJsonStringEqualsJsonString( - json_encode(['guid_imdb' => 'tt1234567', 'guid_tvdb' => '123',]), + json_encode(['guid_imdb' => 'tt1234567', 'guid_tvdb' => '123']), json_encode($guid), - "Failed to assert that the JSON serialization of the Guid object is correct." + 'Failed to assert that the JSON serialization of the Guid object is correct.', ); } @@ -136,9 +136,9 @@ public function test__toString() { $guid = Guid::fromArray(['guid_imdb' => 'tt1234567', 'guid_tvdb' => '123']); $this->assertJsonStringEqualsJsonString( - json_encode(['guid_imdb' => 'tt1234567', 'guid_tvdb' => '123',]), - (string)$guid, - "Failed to assert that the string representation of the Guid object is correct. {records}" + json_encode(['guid_imdb' => 'tt1234567', 'guid_tvdb' => '123']), + (string) $guid, + 'Failed to assert that the string representation of the Guid object is correct. {records}', ); } @@ -148,9 +148,9 @@ public function test_parseGUIDFile() $this->checkException( closure: fn() => Guid::parseGUIDFile('not_set.yml'), - reason: "Failed to assert that the GUID file is not found.", + reason: 'Failed to assert that the GUID file is not found.', exception: InvalidArgumentException::class, - exceptionMessage: 'does not exist' + exceptionMessage: 'does not exist', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); @@ -159,9 +159,9 @@ public function test_parseGUIDFile() file_put_contents($tmpFile, 'fff: {_]'); Guid::parseGUIDFile($tmpFile); }, - reason: "Failed to throw exception when the GUID file is invalid.", + reason: 'Failed to throw exception when the GUID file is invalid.', exception: InvalidArgumentException::class, - exceptionMessage: 'Failed to parse GUIDs file' + exceptionMessage: 'Failed to parse GUIDs file', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); @@ -170,9 +170,9 @@ public function test_parseGUIDFile() file_put_contents($tmpFile, 'invalid'); Guid::parseGUIDFile($tmpFile); }, - reason: "Failed to throw exception when the GUID file is invalid.", + reason: 'Failed to throw exception when the GUID file is invalid.', exception: InvalidArgumentException::class, - exceptionMessage: 'is not an array' + exceptionMessage: 'is not an array', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); @@ -181,9 +181,9 @@ public function test_parseGUIDFile() file_put_contents($tmpFile, 'version: 2.0'); Guid::parseGUIDFile($tmpFile); }, - reason: "Failed to throw exception when the GUID file version is not supported.", + reason: 'Failed to throw exception when the GUID file version is not supported.', exception: InvalidArgumentException::class, - exceptionMessage: 'Unsupported file version' + exceptionMessage: 'Unsupported file version', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); @@ -191,7 +191,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Info, 'is empty', true), - "Failed to assert that the GUID file is empty." + 'Failed to assert that the GUID file is empty.', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); @@ -200,9 +200,9 @@ public function test_parseGUIDFile() file_put_contents($tmpFile, Yaml::dump(['guids' => []])); Guid::parseGUIDFile($tmpFile); }, - reason: "Should throw an exception when there are no GUIDs mapping.", + reason: 'Should throw an exception when there are no GUIDs mapping.', exception: InvalidArgumentException::class, - exceptionMessage: 'does not contain any GUIDs mapping' + exceptionMessage: 'does not contain any GUIDs mapping', ); $tmpFile = self::$tmpPath . '/guid_' . uniqid(); @@ -210,21 +210,21 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'Value must be an object', true), - 'Assert that GUID key is an array.' + 'Assert that GUID key is an array.', ); file_put_contents($tmpFile, Yaml::dump(['guids' => [['name' => 'imdb']]])); Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, "name must start with 'guid_'", true), - 'Assert that GUID name starts with guid_' + 'Assert that GUID name starts with guid_', ); file_put_contents($tmpFile, Yaml::dump(['guids' => [['name' => 'guid_imdb', 'type' => INF]]])); Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'type must be a string', true), - 'Assert guid type is string.' + 'Assert guid type is string.', ); $yaml = [ @@ -232,9 +232,9 @@ public function test_parseGUIDFile() [ 'name' => 'guid_foobar', 'type' => 'string', - 'validator' => [] - ] - ] + 'validator' => [], + ], + ], ]; file_put_contents($tmpFile, Yaml::dump($yaml)); @@ -242,7 +242,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator key must be an object', true), - 'Assert validator key is an object.' + 'Assert validator key is an object.', ); $yaml = ag_set($yaml, 'guids.0.validator', ['pattern' => '\d']); @@ -250,7 +250,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator.pattern is empty or invalid', true), - 'Assert a message is logged when the pattern is invalid.' + 'Assert a message is logged when the pattern is invalid.', ); $yaml = ag_set($yaml, 'guids.0.validator', ['pattern' => '/^\d+$/']); @@ -258,7 +258,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator.example is empty or not a string', true), - 'Assert a message is logged when the example is empty or not a string.' + 'Assert a message is logged when the example is empty or not a string.', ); $yaml = ag_set($yaml, 'guids.0.validator', ['pattern' => '/^\d+$/', 'example' => '(number)']); @@ -266,7 +266,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator.tests key must be an object', true), - 'Assert a message is logged when the test key is not an object.' + 'Assert a message is logged when the test key is not an object.', ); $yaml = ag_set($yaml, 'guids.0.validator.tests', ['valid' => 'foo']); @@ -274,7 +274,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator.tests.valid key must be an array', true), - 'Assert a message is logged when the test key is not an object.' + 'Assert a message is logged when the test key is not an object.', ); $yaml = ag_set($yaml, 'guids.0.validator.tests.valid', ['d12345678']); @@ -282,7 +282,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'does not match pattern', true), - 'Assert a message is logged when valid test does not match the pattern.' + 'Assert a message is logged when valid test does not match the pattern.', ); $yaml = ag_set($yaml, 'guids.0.validator.tests', [ @@ -293,7 +293,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator.tests.invalid key must be an array', true), - 'Assert a message is logged when invalid test is not an array.' + 'Assert a message is logged when invalid test is not an array.', ); $yaml = ag_set($yaml, 'guids.0.validator.tests', [ @@ -304,7 +304,7 @@ public function test_parseGUIDFile() Guid::parseGUIDFile($tmpFile); $this->assertTrue( $this->logged(Level::Warning, 'validator.tests.invalid value', true), - 'Assert a message is logged when invalid test match the pattern.' + 'Assert a message is logged when invalid test match the pattern.', ); $yaml = ag_set($yaml, 'guids.0.validator.tests', [ @@ -318,12 +318,12 @@ public function test_parseGUIDFile() $this->assertArrayHasKey( 'guid_foobar', Guid::getValidators(), - 'Assert that the GUID is added to the validators.' + 'Assert that the GUID is added to the validators.', ); $this->assertArrayHasKey( 'guid_foobar', Guid::getSupported(), - 'Assert that the GUID is added to the supported GUIDs.' + 'Assert that the GUID is added to the supported GUIDs.', ); } @@ -339,7 +339,7 @@ public function test_reparse() Guid::getSupported(); $this->assertTrue( $this->logged(Level::Error, 'Failed to read or parse', true), - "Failed to assert that the GUID file is empty." + 'Failed to assert that the GUID file is empty.', ); } finally { Config::save('guid.file', $oldGuidFile); @@ -353,7 +353,7 @@ public function test_getPointers() $this->assertEquals( ['guid_imdb://tt1234567', 'guid_tvdb://123', 'guid_path://' . $path], $guid->getPointers(), - "Failed to assert that the GUID pointers are correct." + 'Failed to assert that the GUID pointers are correct.', ); } @@ -373,10 +373,10 @@ public function test_getValidators() 'tests' => [ 'valid' => ['12345678'], 'invalid' => ['d12345678'], - ] - ] - ] - ] + ], + ], + ], + ], ]; try { @@ -386,7 +386,7 @@ public function test_getValidators() $this->assertArrayHasKey( 'guid_foobar', Guid::getValidators(), - 'Assert that the GUID is added to the validators.' + 'Assert that the GUID is added to the validators.', ); } finally { Config::save('guid.file', $oldGuidFile); @@ -399,8 +399,7 @@ public function test_guid_logger_from_container() Guid::fromArray(['guid_tvdb' => INF]); $this->assertTrue( $this->logged(Level::Info, 'external id. Unexpected value type.', true), - "Assert message logged when the value type does not match the expected type." + 'Assert message logged when the value type does not match the expected type.', ); } - } diff --git a/tests/Libs/HelpersTest.php b/tests/Libs/HelpersTest.php index 13940d78..b4096079 100644 --- a/tests/Libs/HelpersTest.php +++ b/tests/Libs/HelpersTest.php @@ -53,9 +53,7 @@ public function get(string $key, mixed $default = null): mixed public function set(string $key, mixed $value, \DateInterval|int|null $ttl = null): bool { if ($this->throw) { - throw new class() extends \InvalidArgumentException implements - \Psr\SimpleCache\InvalidArgumentException { - }; + throw new class() extends \InvalidArgumentException implements \Psr\SimpleCache\InvalidArgumentException {}; } $this->cache[$key] = $value; @@ -147,7 +145,7 @@ public function test_makeDate(): void $this->assertSame( '2020-01-01 00:00:00', make_date(new \DateTimeImmutable('2020-01-01 00:00:00', new \DateTimeZone('UTC')), 'UTC') - ->format('Y-m-d H:i:s') + ->format('Y-m-d H:i:s'), ); } @@ -171,35 +169,40 @@ public function test_ag(): void public function test_ag_set(): void { - $this->assertSame(['foo' => 'bar'], + $this->assertSame( + ['foo' => 'bar'], ag_set([], 'foo', 'bar'), - 'a simple key is passed it will be in saved in format of [key => value]' + 'a simple key is passed it will be in saved in format of [key => value]', ); - $this->assertSame(['foo' => ['bar' => 'baz']], + $this->assertSame( + ['foo' => ['bar' => 'baz']], ag_set([], 'foo.bar', 'baz'), - 'When a nested key is passed, it will be saved in format of [key => [nested_key => value]]' + 'When a nested key is passed, it will be saved in format of [key => [nested_key => value]]', ); - $this->assertSame(['foo' => ['bar' => 'baz']], + $this->assertSame( + ['foo' => ['bar' => 'baz']], ag_set([], 'foo/bar', 'baz', '/'), - 'When a nested key is passed with custom delimiter, it will be saved in format of [key => [nested_key => value]]' + 'When a nested key is passed with custom delimiter, it will be saved in format of [key => [nested_key => value]]', ); $arr = [ 'foo' => [ - 'bar' => 'baz' + 'bar' => 'baz', ], ]; - $this->assertSame(['foo' => ['bar' => 'baz', 'kaz' => 'taz']], + $this->assertSame( + ['foo' => ['bar' => 'baz', 'kaz' => 'taz']], ag_set($arr, 'foo.kaz', 'taz'), - 'When a nested key is passed, it will be saved in format of [key => [nested_key => value]]' + 'When a nested key is passed, it will be saved in format of [key => [nested_key => value]]', ); - $this->assertSame(['foo' => ['kaz' => 'taz']], + $this->assertSame( + ['foo' => ['kaz' => 'taz']], ag_set([], 'foo.kaz', 'taz'), - 'When a nested key is passed, it will be saved in format of [key => [nested_key => value]]' + 'When a nested key is passed, it will be saved in format of [key => [nested_key => value]]', ); $exception = null; @@ -211,7 +214,7 @@ public function test_ag_set(): void $this->assertSame( TypeError::class, $exception ? $exception::class : null, - 'When trying to set value to non-array, exception is thrown.' + 'When trying to set value to non-array, exception is thrown.', ); } @@ -224,7 +227,7 @@ public function test_ag_set(): void $this->assertSame( RuntimeException::class, $exception ? $exception::class : null, - 'When trying to set value to existing key, exception is thrown.' + 'When trying to set value to existing key, exception is thrown.', ); } } @@ -247,7 +250,7 @@ public function test_ag_exits(): void $this->assertTrue(ag_exists($arr, 0), 'when numeric key is passed, and it exists, true is returned'); $this->assertTrue( ag_exists($arr, 'sub/foo', '/'), - 'When custom delimiter is passed, it is used to split path.' + 'When custom delimiter is passed, it is used to split path.', ); } @@ -263,36 +266,36 @@ public function test_ag_delete(): void $this->assertSame( ['foo' => 'bar', 'sub' => []], ag_delete($arr, 'sub.foo'), - 'When dot notation is used, and it exists, it is deleted, and copy of the modified array is returned' + 'When dot notation is used, and it exists, it is deleted, and copy of the modified array is returned', ); $this->assertSame( ['foo' => 'bar', 'sub' => []], ag_delete($arr, 'sub/foo', '/'), - 'When custom delimiter is passed, it is used to split path. and it exists, it is deleted, and copy of the modified array is returned' + 'When custom delimiter is passed, it is used to split path. and it exists, it is deleted, and copy of the modified array is returned', ); $this->assertSame( ['sub' => ['foo' => 'bar']], ag_delete($arr, 'foo'), - 'When simple key is passed, and it exists, it is deleted, and copy of the modified array is returned' + 'When simple key is passed, and it exists, it is deleted, and copy of the modified array is returned', ); $this->assertSame( [0 => 'foo', 1 => 'bar'], ag_delete([0 => 'foo', 1 => 'bar', 2 => 'taz'], 2), - 'When an int key is passed, and it exists, it is deleted, and copy of the modified array is returned' + 'When an int key is passed, and it exists, it is deleted, and copy of the modified array is returned', ); $this->assertSame( $arr, ag_delete($arr, 121), - 'When an int key is passed, and it does not exist, original array is returned' + 'When an int key is passed, and it does not exist, original array is returned', ); $this->assertSame( $arr, ag_delete($arr, 'test.bar'), - 'When a non-existing key is passed, original array is returned.' + 'When a non-existing key is passed, original array is returned.', ); } @@ -304,12 +307,12 @@ public function test_fsize(): void $this->assertSame( '1.07G', fsize(1024 * 1024 * 1024), - 'When size is less than 1TB, it is returned in GB format' + 'When size is less than 1TB, it is returned in GB format', ); $this->assertSame( '1.10T', fsize(1024 * 1024 * 1024 * 1024), - 'When size is less than 1P, it is returned in TB format' + 'When size is less than 1P, it is returned in TB format', ); } @@ -331,7 +334,7 @@ public function test_webhook(): void $this->assertSame( $entity->getAll(), $fromPayload->getAll(), - 'saveWebhookPayload() should save webhook payload into given stream if it is provided otherwise it should save it into default stream.' + 'saveWebhookPayload() should save webhook payload into given stream if it is provided otherwise it should save it into default stream.', ); $hasTmpDir = Config::has('tmpDir'); @@ -363,7 +366,8 @@ public function test_request(): void $request = new ServerRequestCreator($factory, $factory, $factory, $factory) ->fromArrays(server: ['REQUEST_METHOD' => 'GET']); - $request = $request->withBody(Stream::create(json_encode($movieData))) + $request = $request + ->withBody(Stream::create(json_encode($movieData))) ->withParsedBody($movieData) ->withQueryParams(['foo' => 'bar', 'baz' => 'taz']) ->withAttribute('foo', 'bar'); @@ -417,7 +421,7 @@ public function test_api_response(): void 'Access-Control-Allow-Origin' => '*', ], ], - ] + ], ]); $data = ['foo' => 'bar']; $response = api_response(Status::OK, $data); @@ -438,7 +442,7 @@ public function test_error_response(): void 'Access-Control-Allow-Origin' => '*', ], ], - ] + ], ]); $data = ['error' => ['code' => Status::BAD_REQUEST->value, 'message' => 'error message']]; @@ -452,7 +456,7 @@ public function test_error_response(): void $this->assertSame($data, json_decode($response->getBody()->getContents(), true)); $response = api_error('error message', Status::BAD_REQUEST, opts: [ - 'callback' => fn($response) => $response->withStatus(Status::INTERNAL_SERVER_ERROR->value) + 'callback' => fn($response) => $response->withStatus(Status::INTERNAL_SERVER_ERROR->value), ]); $this->assertSame(Status::INTERNAL_SERVER_ERROR->value, $response->getStatusCode()); } @@ -468,7 +472,7 @@ public function test_api_message(): void 'Access-Control-Allow-Origin' => '*', ], ], - ] + ], ]); $response = api_message('info message'); @@ -476,7 +480,7 @@ public function test_api_message(): void $this->assertSame(Status::OK->value, $response->getStatusCode()); $this->assertSame( ['info' => ['code' => Status::OK->value, 'message' => 'info message']], - json_decode($response->getBody()->getContents(), true) + json_decode($response->getBody()->getContents(), true), ); } @@ -498,9 +502,9 @@ public function test_httpClientChunks(): void iterable: http_client_chunks($client->stream($response)), options: [ 'decoder' => new ErrorWrappingDecoder( - new ExtJsonDecoder(assoc: true, options: JSON_INVALID_UTF8_IGNORE) - ) - ] + new ExtJsonDecoder(assoc: true, options: JSON_INVALID_UTF8_IGNORE), + ), + ], ); $x = 0; @@ -529,10 +533,13 @@ public function test_send_requests_followup(): void client: $client, ); - $this->assertSame([ - ['POST', 'http://example.test/played'], - ['POST', 'http://example.test/reset'], - ], $calls); + $this->assertSame( + [ + ['POST', 'http://example.test/played'], + ['POST', 'http://example.test/reset'], + ], + $calls, + ); } public function test_string_helpers(): void @@ -551,12 +558,12 @@ public function test_arrayToString(): void $this->assertSame( '(foo: [ (bar: baz) ]), (kaz: [ (taz: raz) ])', array_to_string($data), - 'When array is passed, it is converted into array text separated by delimiter.' + 'When array is passed, it is converted into array text separated by delimiter.', ); $this->assertSame( '(foo: [ (bar: baz) ])@ (kaz: [ (taz: raz) ])', array_to_string($data, '@ '), - 'When array is passed, it is converted into array text separated by delimiter.' + 'When array is passed, it is converted into array text separated by delimiter.', ); $cl = new class implements JsonSerializable { @@ -585,7 +592,7 @@ public function __toString(): string $this->assertSame( '(baz: {"foo":"bar"})', array_to_string(['baz' => $cl]), - 'When array contains a class that implements JsonSerializable it is converted into array string.' + 'When array contains a class that implements JsonSerializable it is converted into array string.', ); $this->assertSame( @@ -595,13 +602,13 @@ public function __toString(): string 'foo' => true, 'bar' => false, ]), - "When an object that implements Stringable is passed, it's casted to string" + "When an object that implements Stringable is passed, it's casted to string", ); $this->assertSame( '(baz: [ (foo: bar) ])', array_to_string(['baz' => $cl3]), - "When a class doesn't implement JsonSerializable or Stringable, it's converted to array. using object vars." + "When a class doesn't implement JsonSerializable or Stringable, it's converted to array. using object vars.", ); } @@ -624,19 +631,19 @@ public function test_formatDuration(): void $this->assertSame( '01:00:00', format_duration(3600000), - 'When duration is passed, it is converted into human readable format.' + 'When duration is passed, it is converted into human readable format.', ); $this->assertSame( '01:00:00', format_duration(3600000.0), - 'When float duration is passed, it is converted into human readable format.' + 'When float duration is passed, it is converted into human readable format.', ); $this->assertSame( '00:30:00', format_duration(3600000.0 / 2), - 'When float duration is passed, it is converted into human readable format.' + 'When float duration is passed, it is converted into human readable format.', ); } @@ -647,12 +654,12 @@ public function test_array_keys_diff(): void $this->assertSame( ['kaz' => 3], array_keys_diff($base, $list, has: false), - 'When base array is passed, and list of keys is passed, it returns array of keys that are not in list if has is false.' + 'When base array is passed, and list of keys is passed, it returns array of keys that are not in list if has is false.', ); $this->assertSame( ['foo' => 0, 'bar' => 1, 'baz' => 2], array_keys_diff($base, $list, has: true), - 'When base array is passed, and list of keys is passed, it returns array of keys that are in list if has is true.' + 'When base array is passed, and list of keys is passed, it returns array of keys that are in list if has is true.', ); } @@ -663,8 +670,8 @@ public function test_makeIgnoreId(): void $this->assertSame( $key, - (string)make_ignore_id($keyPassed), - 'When ignore url is passed with garbage query string, it is removed.' + (string) make_ignore_id($keyPassed), + 'When ignore url is passed with garbage query string, it is removed.', ); } @@ -677,41 +684,41 @@ public function test_isIgnoredId(): void $this->assertTrue( is_ignored_id($userContext, 'test_plex', 'movie', 'guid_tvdb', '1200', '121', opts: [ 'list' => [ - (string)make_ignore_id($key) => make_date(), + (string) make_ignore_id($key) => make_date(), ], ]), - 'When exact ignore url is passed, and it is found in ignore list, true is returned.' + 'When exact ignore url is passed, and it is found in ignore list, true is returned.', ); Config::init([ 'ignore' => [ - (string)make_ignore_id($key)->withQuery('') => make_date(), - ] + (string) make_ignore_id($key)->withQuery('') => make_date(), + ], ]); $this->assertTrue( is_ignored_id($userContext, 'test_plex', 'movie', 'guid_tvdb', '1200', '121', opts: [ 'list' => [ - (string)make_ignore_id($key)->withQuery('') => make_date() - ] + (string) make_ignore_id($key)->withQuery('') => make_date(), + ], ]), - 'When ignore url is passed with and ignore list has url without query string, true is returned.' + 'When ignore url is passed with and ignore list has url without query string, true is returned.', ); $this->assertFalse( is_ignored_id($userContext, 'test_plex', 'movie', 'guid_tvdb', '1201', '121', opts: [ 'list' => [ - (string)make_ignore_id($key)->withQuery('') => make_date() - ] + (string) make_ignore_id($key)->withQuery('') => make_date(), + ], ]), - 'When ignore url is passed with and ignore list does not contain the url, false is returned.' + 'When ignore url is passed with and ignore list does not contain the url, false is returned.', ); $this->expectException(InvalidArgumentException::class); is_ignored_id($userContext, 'test_plex', 'not_real_type', 'guid_tvdb', '1200', '121', opts: [ 'list' => [ - (string)make_ignore_id($key)->withQuery('') => make_date() - ] + (string) make_ignore_id($key)->withQuery('') => make_date(), + ], ]); } @@ -720,31 +727,31 @@ public function test_r(): void $this->assertSame( 'Hi bar', r('Hi {foo}', ['foo' => 'bar']), - 'When string with placeholder is passed, and array of values is passed, placeholders are replaced with values.' + 'When string with placeholder is passed, and array of values is passed, placeholders are replaced with values.', ); $this->assertSame( 'Hi bar', r('Hi {foo.bar.kaz}', ['foo' => ['bar' => ['kaz' => 'bar']]]), - 'When string with placeholder is passed, and array of values is passed, placeholders are replaced with values.' + 'When string with placeholder is passed, and array of values is passed, placeholders are replaced with values.', ); $this->assertSame( 'foo', r('foo', ['foo' => 'bar']), - 'When string passed without placeholders, it is returned as it is.' + 'When string passed without placeholders, it is returned as it is.', ); $this->assertSame( 'foo bar,taz', - r('foo {obj}', ['obj' => (object)['foo' => 'bar', 'baz' => 'taz']]), - 'When object is passed, it is converted into array and placeholders are replaced with values.' + r('foo {obj}', ['obj' => (object) ['foo' => 'bar', 'baz' => 'taz']]), + 'When object is passed, it is converted into array and placeholders are replaced with values.', ); $this->assertSame( 'foo bar,taz', r('foo {obj}', ['obj' => ['foo' => 'bar', 'baz' => 'taz']]), - 'When array is passed, it is converted into array and placeholders are replaced with values.' + 'When array is passed, it is converted into array and placeholders are replaced with values.', ); $message = 'foo bar,taz'; @@ -752,32 +759,32 @@ public function test_r(): void $this->assertSame( ['message' => $message, 'context' => $context], r_array($message, $context), - 'When non-existing placeholder is passed, string is returned as it is.' + 'When non-existing placeholder is passed, string is returned as it is.', ); $this->assertSame( 'Time is: 2020-01-01T00:00:00+00:00', r('Time is: {date}', ['date' => make_date('2020-01-01', 'UTC')]), - 'When date is passed, it is converted into string and placeholders are replaced with values.' + 'When date is passed, it is converted into string and placeholders are replaced with values.', ); $this->assertSame( 'HTTP Status: 200', r('HTTP Status: {status}', ['status' => Status::OK]), - 'When Int backed Enum is passed, it is converted into its value and the placeholder is replaced with it.' + 'When Int backed Enum is passed, it is converted into its value and the placeholder is replaced with it.', ); $this->assertSame( 'HTTP Method: POST', r('HTTP Method: {method}', ['method' => Method::POST]), - 'When String backed Enum is passed, it is converted into its value and the placeholder is replaced with it.' + 'When String backed Enum is passed, it is converted into its value and the placeholder is replaced with it.', ); $res = fopen('php://memory', 'r'); $this->assertSame( 'foo [resource]', r('foo {obj}', ['obj' => $res]), - 'When array is passed, it is converted into array and placeholders are replaced with values.' + 'When array is passed, it is converted into array and placeholders are replaced with values.', ); fclose($res); } @@ -791,7 +798,7 @@ public function test_getClientIp(): void $this->assertSame( '1.2.3.4', get_client_ip($request), - 'When request is passed, it returns client ip.' + 'When request is passed, it returns client ip.', ); $factory = new Psr17Factory(); @@ -809,7 +816,7 @@ public function test_getClientIp(): void $this->assertSame( '4.3.2.1', get_client_ip($request), - 'When request is passed, it returns client ip.' + 'When request is passed, it returns client ip.', ); } @@ -839,14 +846,14 @@ public function test_getClientIp_SERVER(): void $this->assertSame( '1.2.3.4', get_client_ip(), - 'When trust proxy is enabled, And first ip is empty return real ip.' + 'When trust proxy is enabled, And first ip is empty return real ip.', ); $_SERVER['HTTP_X_FORWARDED_FOR'] = 'garbage,4.3.2.1'; $this->assertSame( '1.2.3.4', get_client_ip(), - 'When trust proxy is enabled, first ip is garbage return real ip.' + 'When trust proxy is enabled, first ip is garbage return real ip.', ); } @@ -860,7 +867,6 @@ public function test_inContainer() $_ENV['IN_CONTAINER'] = true; $this->assertTrue(in_container(), 'When in container, true is returned.'); - putenv('IN_CONTAINER=true'); $this->assertTrue(in_container(), 'When in container, true is returned.'); } @@ -880,12 +886,12 @@ public function test_parseEnvFile(): void $parsed = parse_env_file($envFile); $correctData = [ - "WS_TZ" => "Asia/Kuwait", - "WS_CRON_IMPORT" => "1", - "WS_CRON_EXPORT" => "0", - "WS_CRON_IMPORT_AT" => "16 */1 * * *", - "WS_CRON_EXPORT_AT" => "30 */3 * * *", - "WS_CRON_PUSH_AT" => "*/10 * * * *", + 'WS_TZ' => 'Asia/Kuwait', + 'WS_CRON_IMPORT' => '1', + 'WS_CRON_EXPORT' => '0', + 'WS_CRON_IMPORT_AT' => '16 */1 * * *', + 'WS_CRON_EXPORT_AT' => '30 */3 * * *', + 'WS_CRON_PUSH_AT' => '*/10 * * * *', ]; $this->assertCount(count($correctData), $parsed, 'When parsing env file, filter out garbage data.'); @@ -902,12 +908,12 @@ public function test_loadEnvFile(): void { $envFile = __DIR__ . '/../Fixtures/test_env_vars'; $correctData = [ - "WS_TZ" => "Asia/Kuwait", - "WS_CRON_IMPORT" => "1", - "WS_CRON_EXPORT" => "0", - "WS_CRON_IMPORT_AT" => "16 */1 * * *", - "WS_CRON_EXPORT_AT" => "30 */3 * * *", - "WS_CRON_PUSH_AT" => "*/10 * * * *", + 'WS_TZ' => 'Asia/Kuwait', + 'WS_CRON_IMPORT' => '1', + 'WS_CRON_EXPORT' => '0', + 'WS_CRON_IMPORT_AT' => '16 */1 * * *', + 'WS_CRON_EXPORT_AT' => '30 */3 * * *', + 'WS_CRON_PUSH_AT' => '*/10 * * * *', ]; $_ENV['WS_TZ'] = 'Asia/Kuwait'; @@ -934,23 +940,23 @@ public function test_generateRoutes() $this->assertCount( 2, $this->cache->cache, - 'It should have generated two cache buckets for http and cli routes.' + 'It should have generated two cache buckets for http and cli routes.', ); $this->assertGreaterThanOrEqual( 1, count($this->cache->cache['routes_cli']), - 'It should have more than 1 route for cli routes.' + 'It should have more than 1 route for cli routes.', ); $this->assertGreaterThanOrEqual( 1, count($this->cache->cache['routes_http']), - 'It should have more than 1 route for cli routes.' + 'It should have more than 1 route for cli routes.', ); $this->assertSame( $routes, $this->cache->cache['routes_cli'], - 'It should return cli routes when called with cli type.' + 'It should return cli routes when called with cli type.', ); $eventView = array_values(array_filter( @@ -966,7 +972,7 @@ public function test_generateRoutes() $this->assertSame( generate_routes('http', [CacheInterface::class => $this->cache]), $this->cache->cache['routes_http'], - 'It should return http routes. when called with http type.' + 'It should return http routes. when called with http type.', ); $this->cache->reset(); @@ -977,7 +983,7 @@ public function test_generateRoutes() // -- $save = Config::get('supported', []); - Config::save('supported', ['not_set' => 'not_set_client', 'plex' => PlexClient::class,]); + Config::save('supported', ['not_set' => 'not_set_client', 'plex' => PlexClient::class]); $routes = generate_routes('http', [CacheInterface::class => $this->cache]); Config::save('supported', $save); } @@ -998,11 +1004,11 @@ public function test_getSystemMemoryInfo() $this->assertArrayHasKey('swap_free', $info, 'It should have swap free key.'); $keysValues = [ - "mem_total" => 131598708000.0, - "mem_free" => 10636272000.0, - "mem_available" => 113059644000.0, - "swap_total" => 144758584000.0, - "swap_free" => 140512824000.0, + 'mem_total' => 131598708000.0, + 'mem_free' => 10636272000.0, + 'mem_available' => 113059644000.0, + 'swap_total' => 144758584000.0, + 'swap_free' => 140512824000.0, ]; foreach ($keysValues as $key => $value) { @@ -1037,7 +1043,7 @@ public function test_checkIgnoreRule() $this->assertSame( 'No db source was given.', $exception?->getMessage(), - 'When no db source is given, it should throw exception.' + 'When no db source is given, it should throw exception.', ); } @@ -1051,7 +1057,7 @@ public function test_checkIgnoreRule() $this->assertStringContainsString( "Invalid db source name 'foo' was given.", $exception?->getMessage(), - 'When invalid db source is given, it should throw exception.' + 'When invalid db source is given, it should throw exception.', ); } @@ -1065,7 +1071,7 @@ public function test_checkIgnoreRule() $this->assertSame( 'No external id was given.', $exception?->getMessage(), - 'When no external id is given in the password part of url, it should throw exception.' + 'When no external id is given in the password part of url, it should throw exception.', ); } @@ -1078,12 +1084,12 @@ public function test_checkIgnoreRule() $this->assertSame( RuntimeException::class, $exception ? $exception::class : null, - $exception?->getMessage() ?? '' + $exception?->getMessage() ?? '', ); $this->assertStringContainsString( "Invalid type 'http' was given.", $exception?->getMessage(), - 'When invalid type is given, it should throw exception.' + 'When invalid type is given, it should throw exception.', ); } @@ -1096,12 +1102,12 @@ public function test_checkIgnoreRule() $this->assertSame( RuntimeException::class, $exception ? $exception::class : null, - $exception?->getMessage() ?? '' + $exception?->getMessage() ?? '', ); $this->assertStringContainsString( "Invalid backend name 'not_set' was given.", $exception?->getMessage(), - 'When invalid backend name is given, it should throw exception.' + 'When invalid backend name is given, it should throw exception.', ); } @@ -1114,12 +1120,12 @@ public function test_checkIgnoreRule() $this->assertSame( RuntimeException::class, $exception ? $exception::class : null, - $exception?->getMessage() ?? '' + $exception?->getMessage() ?? '', ); $this->assertStringContainsString( 'No type was given.', $exception?->getMessage(), - 'When no type is given, it should throw exception.' + 'When no type is given, it should throw exception.', ); } $exception = null; @@ -1131,12 +1137,12 @@ public function test_checkIgnoreRule() $this->assertSame( RuntimeException::class, $exception ? $exception::class : null, - $exception?->getMessage() ?? '' + $exception?->getMessage() ?? '', ); $this->assertStringContainsString( 'Invalid ignore rule was given.', $exception?->getMessage(), - 'When parse_url fails to parse url, it should throw exception.' + 'When parse_url fails to parse url, it should throw exception.', ); } } @@ -1144,27 +1150,31 @@ public function test_checkIgnoreRule() public function test_addCors() { $response = api_response(Status::OK, headers: ['X-Request-Id' => '1']); - $response = add_cors($response, headers: [ - 'X-Test-Add' => 'test', - 'X-Request-Id' => '2', - ], methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS']); + $response = add_cors( + $response, + headers: [ + 'X-Test-Add' => 'test', + 'X-Request-Id' => '2', + ], + methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'], + ); $this->assertSame('*', $response->getHeaderLine('Access-Control-Allow-Origin')); $this->assertSame( 'GET, POST, PUT, DELETE, PATCH, OPTIONS', - $response->getHeaderLine('Access-Control-Allow-Methods') + $response->getHeaderLine('Access-Control-Allow-Methods'), ); $this->assertSame( 'X-Application-Version, X-Request-Id, Authorization, *', - $response->getHeaderLine('Access-Control-Allow-Headers') + $response->getHeaderLine('Access-Control-Allow-Headers'), ); - $this->assertGreaterThanOrEqual(600, (int)$response->getHeaderLine('Access-Control-Max-Age')); + $this->assertGreaterThanOrEqual(600, (int) $response->getHeaderLine('Access-Control-Max-Age')); $this->assertSame('test', $response->getHeaderLine('X-Test-Add')); $this->assertSame('1', $response->getHeaderLine('X-Request-Id'), 'The original header should not be altered.'); $this->assertNotSame( '2', $response->getHeaderLine('X-Request-Id'), - 'AddCors: headers should not alter already set headers.' + 'AddCors: headers should not alter already set headers.', ); } @@ -1198,15 +1208,15 @@ public function test_deepArrayMerge() $this->assertSame($expected, deep_array_merge([$array1, $array2]), 'It should merge arrays correctly.'); $this->assertSame( - [['foo' => 'baz'], ['baz' => 'taz'],], - deep_array_merge([[['foo' => 'bar']], [['foo' => 'baz'], ['baz' => 'taz'],]], true), - 'if preserve keys is true' + [['foo' => 'baz'], ['baz' => 'taz']], + deep_array_merge([[['foo' => 'bar']], [['foo' => 'baz'], ['baz' => 'taz']]], true), + 'if preserve keys is true', ); $this->assertSame( - [['foo' => 'bar'], ['foo' => 'baz'], ['baz' => 'taz'],], - deep_array_merge([[['foo' => 'bar']], [['foo' => 'baz'], ['baz' => 'taz'],]], false), - 'if preserve keys is false' + [['foo' => 'bar'], ['foo' => 'baz'], ['baz' => 'taz']], + deep_array_merge([[['foo' => 'bar']], [['foo' => 'baz'], ['baz' => 'taz']]], false), + 'if preserve keys is false', ); } @@ -1220,7 +1230,7 @@ public function test_tryCatch() $this->assertInstanceOf( RuntimeException::class, $x, - 'When try block is successful, it should return the value.' + 'When try block is successful, it should return the value.', ); $this->assertSame('finally_was_called', $f, 'finally block should be executed.'); } @@ -1235,12 +1245,10 @@ public function test_getServerColumnSpec() 'description' => 'The user ID of the backend.', ], get_server_column_spec('user'), - 'It should return correct column spec.' + 'It should return correct column spec.', ); - $this->assertSame([], - get_server_column_spec('not_set'), - 'It should return empty array when column is not set.'); + $this->assertSame([], get_server_column_spec('not_set'), 'It should return empty array when column is not set.'); } public function test_getEnvSpec() @@ -1253,7 +1261,7 @@ public function test_getEnvSpec() 'type' => 'string', ], get_env_spec('WS_DATA_PATH'), - 'It should return correct env spec.' + 'It should return correct env spec.', ); $this->assertSame([], get_env_spec('not_set'), 'It should return empty array when env is not set.'); @@ -1286,7 +1294,7 @@ public function test_isTaskWorkerRunning() $d = is_scheduler_running(pidFile: $tmpFile, ignoreContainer: true); $this->assertFalse( $d['status'], - 'When pid file is found, and process does not exists it should return false.' + 'When pid file is found, and process does not exists it should return false.', ); } @@ -1296,7 +1304,7 @@ public function test_findSideCarFiles() $this->assertCount( 4, find_side_car_files($n), - 'It should return side car files for given file.' + 'It should return side car files for given file.', ); } @@ -1323,13 +1331,13 @@ public function test_array_key_case_recursive() $this->assertSame( $expected, array_change_key_case_recursive($array, CASE_UPPER), - 'It should change keys case.' + 'It should change keys case.', ); $this->assertSame( $array, array_change_key_case_recursive($expected, CASE_LOWER), - 'It should change keys case.' + 'It should change keys case.', ); $this->expectException(RuntimeException::class); @@ -1341,7 +1349,7 @@ public function test_getMimeType() $this->assertSame( 'application/json', get_mime_type(__DIR__ . '/../Fixtures/plex_data.json'), - 'It should return correct mime type.' + 'It should return correct mime type.', ); } @@ -1350,23 +1358,23 @@ public function test_getExtension() $this->assertSame( 'json', get_extension(__DIR__ . '/../Fixtures/plex_data.json'), - 'It should return correct extension.' + 'It should return correct extension.', ); } public function test_generateUUID() { - #1ef6d04c-23c3-6442-9fd5-c87f54c3d8d1 + // 1ef6d04c-23c3-6442-9fd5-c87f54c3d8d1 $this->assertMatchesRegularExpression( '/^[0-9a-f]{8}-[0-9a-f]{4}-6[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', generate_uuid(), - 'It should match valid UUID6 pattern.' + 'It should match valid UUID6 pattern.', ); $this->assertMatchesRegularExpression( '/^test-[0-9a-f]{8}-[0-9a-f]{4}-6[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', generate_uuid('test'), - 'It should match valid UUID6 pattern.' + 'It should match valid UUID6 pattern.', ); } @@ -1386,7 +1394,7 @@ function: fn() => 'foo', opts: [ CacheInterface::class => $this->cache, ReflectionContainer::class => $reflectContainer, - ] + ], ); $this->assertSame('foo', $item(), 'It should return correct value.'); @@ -1400,7 +1408,7 @@ public function test_getPagination() $request = $creator->fromArrays([ 'REQUEST_METHOD' => 'GET', - 'QUERY_STRING' => 'page=2&perpage=10' + 'QUERY_STRING' => 'page=2&perpage=10', ], get: ['page' => 2, 'perpage' => 10]); [$page, $perpage, $start] = get_pagination($request, 1); @@ -1418,7 +1426,7 @@ public function test_getBackend() $this->assertInstanceOf( PlexClient::class, get_backend('test_plex'), - 'It should return correct backend client.' + 'It should return correct backend client.', ); $this->expectException(RuntimeException::class); @@ -1439,7 +1447,7 @@ public function test_makeBackend() $this->assertInstanceOf( InvalidArgumentException::class, $exception, - 'Should throw exception when no type is given.' + 'Should throw exception when no type is given.', ); $this->assertStringContainsString('No backend type was set.', $exception?->getMessage()); } @@ -1453,7 +1461,7 @@ public function test_makeBackend() $this->assertInstanceOf( InvalidArgumentException::class, $exception, - 'Should throw exception when no url is given.' + 'Should throw exception when no url is given.', ); $this->assertStringContainsString('No backend url was set.', $exception?->getMessage()); } @@ -1467,7 +1475,7 @@ public function test_makeBackend() $this->assertInstanceOf( InvalidArgumentException::class, $exception, - 'Should throw exception when no type is not supported.' + 'Should throw exception when no type is not supported.', ); $this->assertStringContainsString('Unexpected client type', $exception?->getMessage()); } @@ -1477,7 +1485,7 @@ public function test_makeBackend() $this->assertInstanceOf( PlexClient::class, make_backend($data['test_plex'], 'test_plex'), - 'It should return correct backend client.' + 'It should return correct backend client.', ); } @@ -1489,12 +1497,12 @@ public function test_lw() $this->assertSame( [AppExceptionInterface::class => ['foo' => 'bar']], lw('test', [], $exception)['context'], - 'it should return the added AppContext' + 'it should return the added AppContext', ); $this->assertSame( ['bar' => 'foo'], lw('test', ['bar' => 'foo'], new \RuntimeException())['context'], - 'If exception is not AppExceptionInterface, it should return same data.' + 'If exception is not AppExceptionInterface, it should return same data.', ); $exception = new DBLayerException(); @@ -1511,13 +1519,13 @@ public function test_lw() ], ], lw('test', ['bar' => 'foo'], $exception)['context'], - 'If exception is not AppExceptionInterface, it should return same data.' + 'If exception is not AppExceptionInterface, it should return same data.', ); $this->assertSame( ['bar' => 'foo'], lw('test', ['bar' => 'foo'])['context'], - 'If no exception is given, it should return same data.' + 'If no exception is given, it should return same data.', ); } @@ -1528,7 +1536,7 @@ public function test_commandContext() $this->assertSame( 'docker exec -ti watchstate console', trim(command_context()), - 'It should return correct command context. When in container.' + 'It should return correct command context. When in container.', ); unset($_ENV['IN_CONTAINER']); @@ -1536,7 +1544,7 @@ public function test_commandContext() $this->assertSame( $_SERVER['argv'][0] ?? 'php bin/console', trim(command_context()), - 'If not in container, it should return argv[0] or defaults to php bin/console.' + 'If not in container, it should return argv[0] or defaults to php bin/console.', ); unset($_ENV['IN_CONTAINER']); } @@ -1548,14 +1556,14 @@ public function test_normalizeName() $this->assertSame( $name, normalize_name($name), - "When valid name '{$name}' is passed, it should return same string." + "When valid name '{$name}' is passed, it should return same string.", ); } $this->assertSame( 'user_123', normalize_name('123'), - 'When name is made entirely of numbers, it should prepend user_ to it.' + 'When name is made entirely of numbers, it should prepend user_ to it.', ); $invalidNames = [ @@ -1568,7 +1576,7 @@ public function test_normalizeName() $this->assertSame( 'foo_bar', normalize_name($name), - "When invalid name '{$name}' is passed, it should return same string with underscores." + "When invalid name '{$name}' is passed, it should return same string with underscores.", ); } } @@ -1580,100 +1588,100 @@ public function test_parseEpisodeRange() // S01E01-02-03 [ 'ShowTitle - S01E01-02-03-05.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 5] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 5], ], [ 'showTitle S01E01-02-03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'ShowTitle - S01E01-02-03 - random text.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], // S01E01.S01E02.S01E03 [ 'ShowTitle - S01E01.S01E02.S01E03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'showTitle S01E01.S01E02.S01E03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'ShowTitle - S01E01.S01E02.S01E03 - random text.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], // S01E01E02E03 [ 'ShowTitle - S01E01E02E03E04E05.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 5] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 5], ], [ 'showTitle S01E01E02E03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'ShowTitle - S01E01E02E03 - random text.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], // S01E01-E02-E03 [ 'ShowTitle - S01E01-E02-E03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'showTitle S01E01-E02-E03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'ShowTitle - S01E01-E02-E03 - random text.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], // S01E01-03 [ 'ShowTitle - S01E01-06.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 6] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 6], ], [ 'showTitle S01E01-03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'ShowTitle - S01E01-03 - random text.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], // S01E01-E03 [ 'ShowTitle - S01E01-E05.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 5] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 5], ], [ 'showTitle S01E01-E03.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ 'ShowTitle - S01E01-E03 - random text.mkv', - ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3] + ['status' => true, 'multi' => true, 'season' => 1, 'start' => 1, 'end' => 3], ], [ '[SubGroup] ShowTitle (2022) - S02E11 - [035] TBA [HDTV-1080p] [JA] [x264 AAC 8bit].mkv', - ['status' => true, 'multi' => false, 'season' => 2, 'start' => 11, 'end' => 11] + ['status' => true, 'multi' => false, 'season' => 2, 'start' => 11, 'end' => 11], ], [ 'ShowTitle - S01E05 - HDTV-720p.mkv', - ['status' => true, 'multi' => false, 'season' => 1, 'start' => 5, 'end' => 5] + ['status' => true, 'multi' => false, 'season' => 1, 'start' => 5, 'end' => 5], ], [ 'ShowTitle - S01E12 - WEBRip-480p - sample text.mkv', - ['status' => true, 'multi' => false, 'season' => 1, 'start' => 12, 'end' => 12] + ['status' => true, 'multi' => false, 'season' => 1, 'start' => 12, 'end' => 12], ], [ 'ShowTitle - S03E02 - REMUX-2160p [HEVC x265] [DTS-5.1].mkv', - ['status' => true, 'multi' => false, 'season' => 3, 'start' => 2, 'end' => 2] + ['status' => true, 'multi' => false, 'season' => 3, 'start' => 2, 'end' => 2], ], ]; diff --git a/tests/Libs/Identities/IdentityProvisionServiceTest.php b/tests/Libs/Identities/IdentityProvisionServiceTest.php index c1da12b9..f418d147 100644 --- a/tests/Libs/Identities/IdentityProvisionServiceTest.php +++ b/tests/Libs/Identities/IdentityProvisionServiceTest.php @@ -33,88 +33,96 @@ protected function setUp(): void file_put_contents( Config::get('backends_file'), - Yaml::dump([ - 'plex_main' => [ - 'type' => 'plex', - 'url' => 'https://new-plex.example.com', - 'token' => 'plex-main-token', - 'uuid' => 'plex-main-uuid-new', - 'user' => 'plex-main-user', - 'import' => ['enabled' => true, 'lastSync' => '2024-01-01T00:00:00+00:00'], - 'export' => ['enabled' => false, 'lastSync' => '2024-01-01T00:00:00+00:00'], - 'options' => [ - Options::ADMIN_TOKEN => 'plex-admin-token-new', - Options::IGNORE => false, - Options::LIBRARY_SEGMENT => 250, + Yaml::dump( + [ + 'plex_main' => [ + 'type' => 'plex', + 'url' => 'https://new-plex.example.com', + 'token' => 'plex-main-token', + 'uuid' => 'plex-main-uuid-new', + 'user' => 'plex-main-user', + 'import' => ['enabled' => true, 'lastSync' => '2024-01-01T00:00:00+00:00'], + 'export' => ['enabled' => false, 'lastSync' => '2024-01-01T00:00:00+00:00'], + 'options' => [ + Options::ADMIN_TOKEN => 'plex-admin-token-new', + Options::IGNORE => false, + Options::LIBRARY_SEGMENT => 250, + ], ], - ], - 'jellyfin_main' => [ - 'type' => 'jellyfin', - 'url' => 'https://new-jellyfin.example.com', - 'token' => 'jellyfin-main-token-new', - 'uuid' => 'jellyfin-main-uuid-new', - 'user' => 'jellyfin-main-user', - 'import' => ['enabled' => true, 'lastSync' => '2024-01-01T00:00:00+00:00'], - 'export' => ['enabled' => true, 'lastSync' => '2024-01-01T00:00:00+00:00'], - 'options' => [ - Options::IGNORE => true, - Options::LIBRARY_SEGMENT => 500, + 'jellyfin_main' => [ + 'type' => 'jellyfin', + 'url' => 'https://new-jellyfin.example.com', + 'token' => 'jellyfin-main-token-new', + 'uuid' => 'jellyfin-main-uuid-new', + 'user' => 'jellyfin-main-user', + 'import' => ['enabled' => true, 'lastSync' => '2024-01-01T00:00:00+00:00'], + 'export' => ['enabled' => true, 'lastSync' => '2024-01-01T00:00:00+00:00'], + 'options' => [ + Options::IGNORE => true, + Options::LIBRARY_SEGMENT => 500, + ], ], ], - ], 5, 2), + 5, + 2, + ), ); file_put_contents( $usersDir . '/servers.yaml', - Yaml::dump([ - 'plex_alice' => [ - 'type' => 'plex', - 'url' => 'https://old-plex.example.com', - 'token' => 'plex-child-token', - 'uuid' => 'plex-child-uuid-old', - 'user' => 'plex-child-user', - 'import' => ['enabled' => false, 'lastSync' => '2025-01-02T03:04:05+00:00'], - 'export' => ['enabled' => true, 'lastSync' => '2025-01-02T03:04:05+00:00'], - 'options' => [ - Options::ALT_NAME => 'plex_main', - Options::ALT_ID => 'plex-main-user-old', - Options::ADMIN_TOKEN => 'plex-admin-token-old', - Options::PLEX_USER_UUID => 'plex-child-user-uuid', - Options::PLEX_USER_NAME => 'alice', - Options::PLEX_USER_PIN => '1234', - Options::PLEX_EXTERNAL_USER => true, - 'custom_option' => 'keep-me', + Yaml::dump( + [ + 'plex_alice' => [ + 'type' => 'plex', + 'url' => 'https://old-plex.example.com', + 'token' => 'plex-child-token', + 'uuid' => 'plex-child-uuid-old', + 'user' => 'plex-child-user', + 'import' => ['enabled' => false, 'lastSync' => '2025-01-02T03:04:05+00:00'], + 'export' => ['enabled' => true, 'lastSync' => '2025-01-02T03:04:05+00:00'], + 'options' => [ + Options::ALT_NAME => 'plex_main', + Options::ALT_ID => 'plex-main-user-old', + Options::ADMIN_TOKEN => 'plex-admin-token-old', + Options::PLEX_USER_UUID => 'plex-child-user-uuid', + Options::PLEX_USER_NAME => 'alice', + Options::PLEX_USER_PIN => '1234', + Options::PLEX_EXTERNAL_USER => true, + 'custom_option' => 'keep-me', + ], ], - ], - 'jellyfin_alice' => [ - 'type' => 'jellyfin', - 'url' => 'https://old-jellyfin.example.com', - 'token' => 'jellyfin-main-token-old', - 'uuid' => 'jellyfin-main-uuid-old', - 'user' => 'jellyfin-child-user', - 'import' => ['enabled' => false, 'lastSync' => '2025-02-03T04:05:06+00:00'], - 'export' => ['enabled' => false, 'lastSync' => '2025-02-03T04:05:06+00:00'], - 'options' => [ - Options::ALT_NAME => 'jellyfin_main', - Options::ALT_ID => 'jellyfin-main-user-old', - Options::IGNORE => false, - Options::LIBRARY_SEGMENT => 50, - 'custom_option' => 'keep-me-too', + 'jellyfin_alice' => [ + 'type' => 'jellyfin', + 'url' => 'https://old-jellyfin.example.com', + 'token' => 'jellyfin-main-token-old', + 'uuid' => 'jellyfin-main-uuid-old', + 'user' => 'jellyfin-child-user', + 'import' => ['enabled' => false, 'lastSync' => '2025-02-03T04:05:06+00:00'], + 'export' => ['enabled' => false, 'lastSync' => '2025-02-03T04:05:06+00:00'], + 'options' => [ + Options::ALT_NAME => 'jellyfin_main', + Options::ALT_ID => 'jellyfin-main-user-old', + Options::IGNORE => false, + Options::LIBRARY_SEGMENT => 50, + 'custom_option' => 'keep-me-too', + ], ], - ], - 'manual_backend' => [ - 'type' => 'jellyfin', - 'url' => 'https://manual.example.com', - 'token' => 'manual-token', - 'uuid' => 'manual-uuid', - 'user' => 'manual-user', - 'import' => ['enabled' => false], - 'export' => ['enabled' => false], - 'options' => [ - 'custom_option' => 'manual', + 'manual_backend' => [ + 'type' => 'jellyfin', + 'url' => 'https://manual.example.com', + 'token' => 'manual-token', + 'uuid' => 'manual-uuid', + 'user' => 'manual-user', + 'import' => ['enabled' => false], + 'export' => ['enabled' => false], + 'options' => [ + 'custom_option' => 'manual', + ], ], ], - ], 6, 2), + 6, + 2, + ), ); } diff --git a/tests/Libs/LogSuppressorTest.php b/tests/Libs/LogSuppressorTest.php index 24de0f56..3fb12c45 100644 --- a/tests/Libs/LogSuppressorTest.php +++ b/tests/Libs/LogSuppressorTest.php @@ -13,8 +13,8 @@ class LogSuppressorTest extends TestCase { - private Logger|null $logger = null; - protected TestHandler|null $handler = null; + private ?Logger $logger = null; + protected ?TestHandler $handler = null; private array $testData = [ 'A7434c91d3440' => [ @@ -33,7 +33,7 @@ class LogSuppressorTest extends TestCase ], ]; - private LogSuppressor|null $suppressor = null; + private ?LogSuppressor $suppressor = null; protected function setUp(): void { @@ -48,19 +48,19 @@ public function test_isSuppressed_type_contains(): void { $this->assertTrue( $this->suppressor->isSuppressed('Random string'), - 'type:contains must match if the entire message is the same as well.' + 'type:contains must match if the entire message is the same as well.', ); $this->assertTrue( $this->suppressor->isSuppressed('Any where Random string is found it will be suppressed'), - 'type:contains must match any where in message.' + 'type:contains must match any where in message.', ); $this->assertTrue( $this->suppressor->isSuppressed('the locator string is a Random string'), - 'type:contains should also match at the end of the message.' + 'type:contains should also match at the end of the message.', ); $this->assertFalse( $this->suppressor->isSuppressed('random string is a random string'), - 'type:contains although the string is present, the case is different.' + 'type:contains although the string is present, the case is different.', ); $this->assertFalse($this->suppressor->isSuppressed('')); @@ -70,19 +70,19 @@ public function test_isSuppressed_type_regex(): void { $this->assertTrue( $this->suppressor->isSuppressed('some random \'123\''), - 'type:regex must match if the entire message is the same as well.' + 'type:regex must match if the entire message is the same as well.', ); $this->assertTrue( $this->suppressor->isSuppressed('Any where some random \'123\' is found it will be suppressed'), - 'type:regex must match any where in message.' + 'type:regex must match any where in message.', ); $this->assertTrue( $this->suppressor->isSuppressed('the locator string is a some random \'123\''), - 'type:regex should also match at the end of the message.' + 'type:regex should also match at the end of the message.', ); $this->assertFalse( $this->suppressor->isSuppressed('some Random \'1234\''), - 'type:regex although the string is present, the case is different.' + 'type:regex although the string is present, the case is different.', ); } @@ -112,14 +112,14 @@ public function test_isHandling() $this->logger->info('test'); $this->assertFalse( $this->suppressor->isHandling($this->handler->getRecords()[0]->with(level: Level::Debug)), - 'Level is below the handler level.' + 'Level is below the handler level.', ); $this->handler->clear(); $this->logger->notice('test'); $this->assertTrue( $this->suppressor->isHandling($this->handler->getRecords()[0]), - 'Level is at or above the handler level.' + 'Level is at or above the handler level.', ); } @@ -130,7 +130,7 @@ public function test_handleBatch() $records = $this->handler->getRecords(); $records[] = $records[0]->with(message: 'Random string'); $records[] = $records[0]->with( - message: r('the locator string is a some random \'{number}\'', ['number' => rand(1, 100)]) + message: r('the locator string is a some random \'{number}\'', ['number' => rand(1, 100)]), ); $this->handler->clear(); $this->assertCount(0, $this->handler->getRecords()); diff --git a/tests/Libs/MessageTest.php b/tests/Libs/MessageTest.php index 5da2bf35..21e8b2ee 100644 --- a/tests/Libs/MessageTest.php +++ b/tests/Libs/MessageTest.php @@ -27,23 +27,23 @@ public function test_message_store_defaults(): void $this->assertSame( 'bar', Message::get('tester.foo'), - 'When message is added, nested lookup returns the stored value.' + 'When message is added, nested lookup returns the stored value.', ); $this->assertSame( 'fallback', Message::get('missing', 'fallback'), - 'When key is not set, scalar defaults are returned.' + 'When key is not set, scalar defaults are returned.', ); $this->assertSame( 'computed', Message::get('missing', fn() => 'computed'), - 'When key is not set, closure defaults are resolved.' + 'When key is not set, closure defaults are resolved.', ); $this->assertNull(Message::get('missing'), 'When key is not set, null is returned by default.'); $this->assertSame( ['tester' => ['foo' => 'bar']], Message::getAll(), - 'Stored messages preserve their nested structure.' + 'Stored messages preserve their nested structure.', ); } @@ -55,7 +55,7 @@ public function test_message_increment_reset(): void $this->assertSame( ['up' => ['foo' => 3]], Message::getAll(), - 'Increment accumulates values at the requested nested key.' + 'Increment accumulates values at the requested nested key.', ); Message::reset(); diff --git a/tests/Libs/Middlewares/AddCorsMiddlewareTest.php b/tests/Libs/Middlewares/AddCorsMiddlewareTest.php index 23491bdc..6a876f70 100644 --- a/tests/Libs/Middlewares/AddCorsMiddlewareTest.php +++ b/tests/Libs/Middlewares/AddCorsMiddlewareTest.php @@ -18,17 +18,17 @@ public function test_response() { $result = new AddCorsMiddleware()->process( request: $this->getRequest(), - handler: $this->getHandler(new Response(Status::OK)) + handler: $this->getHandler(new Response(Status::OK)), ); $this->assertTrue( $result->hasHeader('Access-Control-Allow-Origin'), - 'Access-Control-Allow-Origin is not available' + 'Access-Control-Allow-Origin is not available', ); $this->assertTrue( $result->hasHeader('Access-Control-Allow-Credentials'), - 'Access-Control-Allow-Credentials is not available' + 'Access-Control-Allow-Credentials is not available', ); } } diff --git a/tests/Libs/Middlewares/AuthorizationMiddlewareTest.php b/tests/Libs/Middlewares/AuthorizationMiddlewareTest.php index 90ed88cb..087a9bc2 100644 --- a/tests/Libs/Middlewares/AuthorizationMiddlewareTest.php +++ b/tests/Libs/Middlewares/AuthorizationMiddlewareTest.php @@ -10,8 +10,8 @@ use App\Libs\Enums\Http\Method; use App\Libs\Enums\Http\Status; use App\Libs\Middlewares\AuthorizationMiddleware; -use App\Libs\TokenUtil; use App\Libs\TestCase; +use App\Libs\TokenUtil; use Tests\Support\AuthTokenTestSupport; use Tests\Support\RequestResponseTrait; @@ -29,7 +29,7 @@ public function test_internal_request() { $result = new AuthorizationMiddleware()->process( request: $this->getRequest()->withAttribute('INTERNAL_REQUEST', true), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame(200, $result->getStatusCode(), 'Internal request failed'); } @@ -38,7 +38,7 @@ public function test_options_request() { $result = new AuthorizationMiddleware()->process( request: $this->getRequest(method: Method::OPTIONS), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame(Status::OK, Status::from($result->getStatusCode()), 'Options request failed'); @@ -50,7 +50,7 @@ public function test_open_routes() $routes = [ HealthCheck::URL, - Auth::URL . '/test' + Auth::URL . '/test', ]; $routesSemiOpen = [ @@ -61,7 +61,7 @@ public function test_open_routes() $uri = parse_config_value($route); $result = new AuthorizationMiddleware()->process( request: $this->getRequest(uri: $uri), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame(Status::OK, Status::from($result->getStatusCode()), "Open route '{$uri}' failed"); } @@ -70,7 +70,7 @@ public function test_open_routes() $uri = parse_config_value($route); $result = new AuthorizationMiddleware()->process( request: $this->getRequest(uri: $uri), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame(Status::OK, Status::from($result->getStatusCode()), "Open route '{$uri}' failed"); } @@ -81,12 +81,12 @@ public function test_open_routes() $uri = parse_config_value($route); $result = new AuthorizationMiddleware()->process( request: $this->getRequest(uri: $uri)->withoutHeader('Authorization'), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame( Status::BAD_REQUEST, Status::from($result->getStatusCode()), - "Route '{$uri}' should fail without API key" + "Route '{$uri}' should fail without API key", ); } @@ -94,12 +94,12 @@ public function test_open_routes() $uri = parse_config_value($route); $result = new AuthorizationMiddleware()->process( request: $this->getRequest(uri: $uri)->withHeader('Authorization', 'Bearer api'), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame( Status::UNAUTHORIZED, Status::from($result->getStatusCode()), - "Route '{$uri}' should fail without correct API key" + "Route '{$uri}' should fail without correct API key", ); } @@ -109,14 +109,14 @@ public function test_open_routes() $result = new AuthorizationMiddleware()->process( request: $this->getRequest(uri: $uri, query: ['apikey' => 'api_test_token'])->withHeader( 'X-apikey', - 'api_test_token' + 'api_test_token', ), - handler: $this->getHandler() + handler: $this->getHandler(), ); $this->assertSame( Status::OK, Status::from($result->getStatusCode()), - "Route '{$uri}' should pass with correct API key" + "Route '{$uri}' should pass with correct API key", ); } diff --git a/tests/Libs/Middlewares/ExceptionHandlerMiddlewareTest.php b/tests/Libs/Middlewares/ExceptionHandlerMiddlewareTest.php index eb3a4dee..71bc3d92 100644 --- a/tests/Libs/Middlewares/ExceptionHandlerMiddlewareTest.php +++ b/tests/Libs/Middlewares/ExceptionHandlerMiddlewareTest.php @@ -18,8 +18,8 @@ public function test_response() $result = new ExceptionHandlerMiddleware()->process( request: $this->getRequest(), handler: $this->getHandler( - fn() => throw new \RuntimeException('Test Exception', 404) - ) + fn() => throw new \RuntimeException('Test Exception', 404), + ), ); $json = json_decode($result->getBody()->getContents(), true, flags: JSON_THROW_ON_ERROR); diff --git a/tests/Libs/Middlewares/NoAccessLogMiddlewareTest.php b/tests/Libs/Middlewares/NoAccessLogMiddlewareTest.php index 4c4f7cc0..aca6cddb 100644 --- a/tests/Libs/Middlewares/NoAccessLogMiddlewareTest.php +++ b/tests/Libs/Middlewares/NoAccessLogMiddlewareTest.php @@ -19,12 +19,12 @@ public function test_response_not_internal_request() { $result = new NoAccessLogMiddleware()->process( request: $this->getRequest(), - handler: $this->getHandler(new Response(Status::OK)) + handler: $this->getHandler(new Response(Status::OK)), ); $this->assertFalse( $result->hasHeader('X-No-AccessLog'), - 'If INTERNAL_REQUEST is not set, Logging should be enabled.' + 'If INTERNAL_REQUEST is not set, Logging should be enabled.', ); } @@ -34,23 +34,23 @@ public function test_response_internal_request() $result = new NoAccessLogMiddleware()->process( request: $this->getRequest()->withAttribute('INTERNAL_REQUEST', true), - handler: $this->getHandler(new Response(Status::OK)) + handler: $this->getHandler(new Response(Status::OK)), ); $this->assertFalse( $result->hasHeader('X-No-AccessLog'), - 'If INTERNAL_REQUEST is not set, Logging should be enabled.' + 'If INTERNAL_REQUEST is not set, Logging should be enabled.', ); Config::save('api.logInternal', false); $result = new NoAccessLogMiddleware()->process( request: $this->getRequest()->withAttribute('INTERNAL_REQUEST', true), - handler: $this->getHandler(new Response(Status::OK)) + handler: $this->getHandler(new Response(Status::OK)), ); $this->assertTrue( $result->hasHeader('X-No-AccessLog'), - 'If INTERNAL_REQUEST is set and api.logInternal is true, Logging should be disabled.' + 'If INTERNAL_REQUEST is set and api.logInternal is true, Logging should be disabled.', ); } } diff --git a/tests/Libs/Middlewares/ParseJsonBodyMiddlewareTest.php b/tests/Libs/Middlewares/ParseJsonBodyMiddlewareTest.php index 2e8a3d8e..a96495f1 100644 --- a/tests/Libs/Middlewares/ParseJsonBodyMiddlewareTest.php +++ b/tests/Libs/Middlewares/ParseJsonBodyMiddlewareTest.php @@ -21,26 +21,32 @@ public function test_exceptions() { $this->checkException( closure: fn() => new ParseJsonBodyMiddleware()->process( - request: $this->getRequest(method: 'NOT_OK')->withBody( - Stream::create(json_encode(['key' => 'test'])) - )->withHeader('Content-Type', 'application/json'), - handler: $this->getHandler(new Response(Status::OK)) + request: $this + ->getRequest(method: 'NOT_OK') + ->withBody( + Stream::create(json_encode(['key' => 'test'])), + ) + ->withHeader('Content-Type', 'application/json'), + handler: $this->getHandler(new Response(Status::OK)), ), reason: 'Should throw an exception when the method is not allowed', exception: RuntimeException::class, - exceptionCode: Status::METHOD_NOT_ALLOWED->value + exceptionCode: Status::METHOD_NOT_ALLOWED->value, ); $this->checkException( closure: fn() => new ParseJsonBodyMiddleware()->process( - request: $this->getRequest(Method::POST)->withBody( - Stream::create(json_encode(['key' => 'test']) . 'invalid json') - )->withHeader('Content-Type', 'application/json'), - handler: $this->getHandler() + request: $this + ->getRequest(Method::POST) + ->withBody( + Stream::create(json_encode(['key' => 'test']) . 'invalid json'), + ) + ->withHeader('Content-Type', 'application/json'), + handler: $this->getHandler(), ), reason: 'Should throw an exception when the body is not a valid JSON', exception: RuntimeException::class, - exceptionCode: Status::BAD_REQUEST->value + exceptionCode: Status::BAD_REQUEST->value, ); } @@ -49,13 +55,16 @@ public function test_empty_parsed_body() $mutatedRequest = null; new ParseJsonBodyMiddleware()->process( - request: $this->getRequest(Method::GET)->withBody( - Stream::create(json_encode(['key' => 'test'])) - )->withHeader('Content-Type', 'application/json'), + request: $this + ->getRequest(Method::GET) + ->withBody( + Stream::create(json_encode(['key' => 'test'])), + ) + ->withHeader('Content-Type', 'application/json'), handler: $this->getHandler(function ($request) use (&$mutatedRequest) { $mutatedRequest = $request; return new Response(Status::OK); - }) + }), ); $this->assertCount(0, $mutatedRequest->getParsedBody(), 'Parsed body should be empty.'); @@ -64,13 +73,16 @@ public function test_empty_parsed_body() $mutatedRequest = null; new ParseJsonBodyMiddleware()->process( - request: $this->getRequest(Method::POST)->withBody( - Stream::create('') - )->withHeader('Content-Type', 'application/json'), + request: $this + ->getRequest(Method::POST) + ->withBody( + Stream::create(''), + ) + ->withHeader('Content-Type', 'application/json'), handler: $this->getHandler(function ($request) use (&$mutatedRequest) { $mutatedRequest = $request; return new Response(Status::OK); - }) + }), ); $this->assertCount(0, $mutatedRequest->getParsedBody(), 'Parsed body should be empty.'); @@ -78,37 +90,34 @@ public function test_empty_parsed_body() new ParseJsonBodyMiddleware()->process( request: $this->getRequest(Method::POST)->withBody( - Stream::create(json_encode(['key' => 'test'])) + Stream::create(json_encode(['key' => 'test'])), ), handler: $this->getHandler(function ($request) use (&$mutatedRequest) { $mutatedRequest = $request; return new Response(Status::OK); - }) + }), ); $this->assertCount(0, $mutatedRequest->getParsedBody(), 'Parsed body should have one item.'); - $this->assertSame([], - $mutatedRequest->getParsedBody(), - 'Parsed body should be the same as the request body.' - ); + $this->assertSame([], $mutatedRequest->getParsedBody(), 'Parsed body should be the same as the request body.'); } public function test_correct_mutation() { new ParseJsonBodyMiddleware()->process( - request: $this->getRequest(Method::POST)->withBody( - Stream::create(json_encode(['key' => 'test'])) - )->withHeader('Content-Type', 'application/json'), + request: $this + ->getRequest(Method::POST) + ->withBody( + Stream::create(json_encode(['key' => 'test'])), + ) + ->withHeader('Content-Type', 'application/json'), handler: $this->getHandler(function ($request) use (&$mutatedRequest) { $mutatedRequest = $request; return new Response(Status::OK); - }) + }), ); $this->assertCount(1, $mutatedRequest->getParsedBody(), 'Parsed body should have one item.'); - $this->assertSame(['key' => 'test'], - $mutatedRequest->getParsedBody(), - 'Parsed body should be the same as the request body.' - ); + $this->assertSame(['key' => 'test'], $mutatedRequest->getParsedBody(), 'Parsed body should be the same as the request body.'); } } diff --git a/tests/Libs/Middlewares/RateLimitMiddlewareTest.php b/tests/Libs/Middlewares/RateLimitMiddlewareTest.php index 36fba391..27023716 100644 --- a/tests/Libs/Middlewares/RateLimitMiddlewareTest.php +++ b/tests/Libs/Middlewares/RateLimitMiddlewareTest.php @@ -176,5 +176,4 @@ public function test_identifier_client_ip(): void $this->assertSame(Status::TOO_MANY_REQUESTS->value, $second->getStatusCode()); $this->assertSame(2, $calls); } - } diff --git a/tests/Libs/Middlewares/SignatureMiddlewareTest.php b/tests/Libs/Middlewares/SignatureMiddlewareTest.php index 73675ad1..59ce16ea 100644 --- a/tests/Libs/Middlewares/SignatureMiddlewareTest.php +++ b/tests/Libs/Middlewares/SignatureMiddlewareTest.php @@ -7,8 +7,8 @@ use App\Libs\Config; use App\Libs\Enums\Http\Status; use App\Libs\Middlewares\SignatureMiddleware; -use App\Libs\TokenUtil; use App\Libs\TestCase; +use App\Libs\TokenUtil; use Nyholm\Psr7\Stream; use Tests\Support\AuthTokenTestSupport; use Tests\Support\RequestResponseTrait; diff --git a/tests/Libs/PathTest.php b/tests/Libs/PathTest.php index 211d1301..dd5b2d31 100644 --- a/tests/Libs/PathTest.php +++ b/tests/Libs/PathTest.php @@ -309,7 +309,7 @@ public function test_children_files_match_sidecars(): void $this->assertContainsOnlyInstancesOf(Path::class, $sidecars); $this->assertSame( ['my.movie.title.en.ass', 'my.movie.title.eng.forced.srt', 'my.movie.title.nfo', 'my.movie.title.srt'], - $names + $names, ); } diff --git a/tests/Libs/PerUserDbTest.php b/tests/Libs/PerUserDbTest.php index 4891d38e..96231a29 100644 --- a/tests/Libs/PerUserDbTest.php +++ b/tests/Libs/PerUserDbTest.php @@ -23,9 +23,12 @@ protected function setUp(): void public function test_main_bootstrap(): void { $db = ensure_migration((string) Config::get('database.file')); - $tables = $db->getDBLayer()->query( - "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name" - )->fetchAll(PDO::FETCH_COLUMN); + $tables = $db + ->getDBLayer() + ->query( + "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name", + ) + ->fetchAll(PDO::FETCH_COLUMN); self::assertContains('events', $tables); self::assertContains('migration_version', $tables); @@ -40,9 +43,11 @@ public function test_per_user_db(): void $db = per_user_db('alice'); $dbLayer = $db->getDBLayer(); - $tables = $dbLayer->query( - "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name" - )->fetchAll(PDO::FETCH_COLUMN); + $tables = $dbLayer + ->query( + "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name", + ) + ->fetchAll(PDO::FETCH_COLUMN); self::assertContains('events', $tables); self::assertContains('migration_version', $tables); @@ -57,12 +62,15 @@ public function test_per_user_db(): void 'name' => 'alice', ]); - self::assertSame([ + self::assertSame( [ - 'id' => 1, - 'name' => 'alice', + [ + 'id' => 1, + 'name' => 'alice', + ], ], - ], $dbLayer->query('SELECT id, name FROM sample')->fetchAll(PDO::FETCH_ASSOC)); + $dbLayer->query('SELECT id, name FROM sample')->fetchAll(PDO::FETCH_ASSOC), + ); self::assertSame('sqlite', $dbLayer->getDriver()); } @@ -72,9 +80,12 @@ public function test_per_user_db_skips_main_bootstrap(): void ensure_migration(get_user_db('alice')); $db = per_user_db('alice'); - $tables = $db->getDBLayer()->query( - "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name" - )->fetchAll(PDO::FETCH_COLUMN); + $tables = $db + ->getDBLayer() + ->query( + "SELECT name FROM sqlite_master WHERE type = 'table' ORDER BY name", + ) + ->fetchAll(PDO::FETCH_COLUMN); self::assertFalse(file_exists(self::$tmpPath . '/db/' . PdoFactory::DB_FILE)); self::assertContains('migration_version', $tables); diff --git a/tests/Libs/Playlists/PlaylistStoreTest.php b/tests/Libs/Playlists/PlaylistStoreTest.php index 9e2b64a0..6d8ab525 100644 --- a/tests/Libs/Playlists/PlaylistStoreTest.php +++ b/tests/Libs/Playlists/PlaylistStoreTest.php @@ -107,28 +107,32 @@ public function test_replace_preserves_syncid(): void self::assertSame('title:weekend movies', $all[0]['sync_id']); self::assertNotNull($all[0]['deleted_at']); - $store->replaceBackendPlaylists('test_plex', [ + $store->replaceBackendPlaylists( + 'test_plex', [ - 'id' => 'playlist-2', - 'sync_id' => 'title:weekend movies', - 'title' => 'Weekend Movies', - 'type' => 'video', - 'editable' => true, - 'smart' => false, - 'public' => false, - 'remote_updated_at' => 2000, - 'metadata' => ['sync' => ['eligible' => true]], - 'items' => [ - [ - 'position' => 0, - 'state_id' => 10, - 'backend_item_id' => 'remote-b', - 'item_type' => 'movie', - 'title' => 'Test Movie', + [ + 'id' => 'playlist-2', + 'sync_id' => 'title:weekend movies', + 'title' => 'Weekend Movies', + 'type' => 'video', + 'editable' => true, + 'smart' => false, + 'public' => false, + 'remote_updated_at' => 2000, + 'metadata' => ['sync' => ['eligible' => true]], + 'items' => [ + [ + 'position' => 0, + 'state_id' => 10, + 'backend_item_id' => 'remote-b', + 'item_type' => 'movie', + 'title' => 'Test Movie', + ], ], ], ], - ], ['playlist-2']); + ['playlist-2'], + ); $current = $store->getByBackend('test_plex'); self::assertCount(1, $current); diff --git a/tests/Libs/Playlists/PlaylistSyncServiceTest.php b/tests/Libs/Playlists/PlaylistSyncServiceTest.php index 5cfd3b39..8876b0c8 100644 --- a/tests/Libs/Playlists/PlaylistSyncServiceTest.php +++ b/tests/Libs/Playlists/PlaylistSyncServiceTest.php @@ -314,61 +314,71 @@ private function makeClientMock( $client->method('getContext')->willReturn($context); $client->method('getName')->willReturn($backendName); $client->method('getType')->willReturn('plex'); - $client->method('getPlaylistsList')->willReturnCallback( - static function (array $opts = []) use ($state): array { - return array_values(array_map( - static fn(array $playlist): array => [ - 'id' => $playlist['id'], - 'title' => $playlist['title'], - 'type' => $playlist['type'], - 'remote_updated_at' => $playlist['remote_updated_at'], - ], - $state->playlists, - )); - }, - ); - $client->method('getPlaylist')->willReturnCallback( - static fn(string|int $id, array $opts = []): array => $state->playlists[(string) $id] ?? [], - ); - $client->method('deletePlaylist')->willReturnCallback( - static function (string|int $id, array $opts = []) use ($state): array { - unset($state->playlists[(string) $id]); - $state->deleteCalls++; - - return []; - }, - ); - $client->method('createPlaylist')->willReturnCallback( - static function (string $title, array $itemIds = [], array $opts = []) use ($backendName, $state, $titles): array { - $playlistId = sprintf('%s-playlist-%d', $backendName, $state->nextId++); - $state->playlists[$playlistId] = [ - 'id' => $playlistId, - 'title' => $title, - 'type' => 'video', - 'editable' => true, - 'smart' => false, - 'public' => false, - 'remote_updated_at' => $state->nextUpdatedAt, - 'items' => array_values(array_map( - static fn(string $itemId): array => [ - 'Id' => $itemId, - 'Type' => 'Movie', - 'Name' => $titles[$itemId] ?? $itemId, + $client + ->method('getPlaylistsList') + ->willReturnCallback( + static function (array $opts = []) use ($state): array { + return array_values(array_map( + static fn(array $playlist): array => [ + 'id' => $playlist['id'], + 'title' => $playlist['title'], + 'type' => $playlist['type'], + 'remote_updated_at' => $playlist['remote_updated_at'], ], - $itemIds, - )), - ]; - $state->nextUpdatedAt += 100; - $state->createCalls++; - - return ['id' => $playlistId]; - }, - ); - $client->method('toEntity')->willReturnCallback( - static fn(array $item, array $opts = []): StateEntity => StateEntity::fromArray([ - iState::COLUMN_ID => $entityIds[(string) ag($item, ['ratingKey', 'Id'], '')] ?? null, - ]), - ); + $state->playlists, + )); + }, + ); + $client + ->method('getPlaylist') + ->willReturnCallback( + static fn(string|int $id, array $opts = []): array => $state->playlists[(string) $id] ?? [], + ); + $client + ->method('deletePlaylist') + ->willReturnCallback( + static function (string|int $id, array $opts = []) use ($state): array { + unset($state->playlists[(string) $id]); + $state->deleteCalls++; + + return []; + }, + ); + $client + ->method('createPlaylist') + ->willReturnCallback( + static function (string $title, array $itemIds = [], array $opts = []) use ($backendName, $state, $titles): array { + $playlistId = sprintf('%s-playlist-%d', $backendName, $state->nextId++); + $state->playlists[$playlistId] = [ + 'id' => $playlistId, + 'title' => $title, + 'type' => 'video', + 'editable' => true, + 'smart' => false, + 'public' => false, + 'remote_updated_at' => $state->nextUpdatedAt, + 'items' => array_values(array_map( + static fn(string $itemId): array => [ + 'Id' => $itemId, + 'Type' => 'Movie', + 'Name' => $titles[$itemId] ?? $itemId, + ], + $itemIds, + )), + ]; + $state->nextUpdatedAt += 100; + $state->createCalls++; + + return ['id' => $playlistId]; + }, + ); + $client + ->method('toEntity') + ->willReturnCallback( + static fn(array $item, array $opts = []): StateEntity => StateEntity::fromArray([ + iState::COLUMN_ID => $entityIds[(string) ag($item, ['ratingKey', 'Id'], '')] ?? null, + ]), + ); return $client; } diff --git a/tests/Libs/QueueRequestsTest.php b/tests/Libs/QueueRequestsTest.php index f2f9698e..6cff49c2 100644 --- a/tests/Libs/QueueRequestsTest.php +++ b/tests/Libs/QueueRequestsTest.php @@ -11,7 +11,7 @@ class QueueRequestsTest extends TestCase { - private QueueRequests|null $queue = null; + private ?QueueRequests $queue = null; protected function setUp(): void { @@ -33,18 +33,18 @@ public function test_queue_add_iterate(): void $this->assertCount( count($requests), $this->queue, - 'Count reflects the number of queued requests.' + 'Count reflects the number of queued requests.', ); $this->assertSame( $requests, $this->queue->getQueue(), - 'getQueue exposes the queued requests in insertion order.' + 'getQueue exposes the queued requests in insertion order.', ); $this->assertSame( $requests, iterator_to_array($this->queue), - 'Iteration yields queued requests in insertion order.' + 'Iteration yields queued requests in insertion order.', ); } diff --git a/tests/Libs/ResponseTest.php b/tests/Libs/ResponseTest.php index d2d9c70a..3a001cd8 100644 --- a/tests/Libs/ResponseTest.php +++ b/tests/Libs/ResponseTest.php @@ -17,20 +17,20 @@ public function test_protocol() $this->assertSame( '1.0', $response->getProtocolVersion(), - 'Should return the same protocol version from constructor.' + 'Should return the same protocol version from constructor.', ); $response = $response->withProtocolVersion('1.1'); $this->assertSame( '1.1', $response->getProtocolVersion(), - 'Should return the same protocol version from response.' + 'Should return the same protocol version from response.', ); $this->assertSame( spl_object_id($response), spl_object_id($response->withProtocolVersion('1.1')), - 'withProtocolVersion: should return same object when same version is set.' + 'withProtocolVersion: should return same object when same version is set.', ); } @@ -40,20 +40,20 @@ public function test_status() $this->assertSame( Status::ACCEPTED, Status::tryfrom($response->getStatusCode()), - 'Validate same status code are returned from response.' + 'Validate same status code are returned from response.', ); $this->assertSame( 'OK', $response->getReasonPhrase(), - 'Validate same reason phrase are returned from response.' + 'Validate same reason phrase are returned from response.', ); $response = $response->withStatus(Status::BAD_REQUEST); $this->assertSame( Status::BAD_REQUEST, Status::tryfrom($response->getStatusCode()), - 'Validate same status code are returned from response.' + 'Validate same status code are returned from response.', ); $this->checkException( @@ -71,13 +71,13 @@ public function test_status() $this->assertSame( spl_object_id($response), spl_object_id($response->withStatus(Status::BAD_REQUEST, '')), - 'withStatus: should return same object when same status is set.' + 'withStatus: should return same object when same status is set.', ); $this->assertNotSame( spl_object_id($response), spl_object_id($response->withStatus(Status::BAD_REQUEST, 'OK')), - "withStatus: shouldn't return same object when reason is different but status code the same." + "withStatus: shouldn't return same object when reason is different but status code the same.", ); } @@ -91,62 +91,61 @@ public function test_headers() $this->assertSame( 'has_header', $response->getHeaderLine('X-From-Construct'), - 'Validate constructor headers are returned from response.' + 'Validate constructor headers are returned from response.', ); $this->assertSame( 'a_numeric_header_key', $response->getHeaderLine('123'), - 'Validate constructor headers are returned from response.' + 'Validate constructor headers are returned from response.', ); $response = $response->withHeader('Custom-Headers', 'Custom-Value'); $this->assertSame( 'Custom-Value', $response->getHeaderLine('Custom-Headers'), - 'Validate same headers are returned from response.' + 'Validate same headers are returned from response.', ); $response = $response->withHeader('X-From-With-Header', ['Custom-Value-1', 'Custom-Value-2']); $this->assertSame( 'Custom-Value-1, Custom-Value-2', $response->getHeaderLine('X-From-With-Header'), - 'Validate same headers are returned from response.' + 'Validate same headers are returned from response.', ); $response = $response->withAddedHeader('Custom-Headers', 'Custom-Value-2'); $this->assertSame( 'Custom-Value, Custom-Value-2', $response->getHeaderLine('Custom-Headers'), - 'Validate same headers are returned from response.' + 'Validate same headers are returned from response.', ); $this->assertSame( - [0 => 'Custom-Value', 1 => 'Custom-Value-2',], + [0 => 'Custom-Value', 1 => 'Custom-Value-2'], ag($response->getHeaders(), 'Custom-Headers', []), - 'getHeaders: Validate same headers are returned from response.' + 'getHeaders: Validate same headers are returned from response.', ); $this->assertSame( spl_object_id($response), spl_object_id($response->withoutHeader('X-Not-set')), - 'withoutHeader: should return same object when header is not set.' + 'withoutHeader: should return same object when header is not set.', ); $this->assertSame( 'test', $response->withHeader('Custom-Headers', 'test')->getHeaderLine('Custom-Headers'), - 'Calling withHeader should replace the existing header.' + 'Calling withHeader should replace the existing header.', ); $response = $response->withoutHeader('Custom-Headers'); $this->assertSame( '', $response->getHeaderLine('Custom-Headers'), - 'Validate same headers are returned from response.' + 'Validate same headers are returned from response.', ); - $this->checkException( closure: fn() => $response->withHeader('X-عربي', 'test'), reason: 'Invalid header name', @@ -188,14 +187,14 @@ public function test_body() $this->assertSame( '', $response->getBody()->getContents(), - 'When no body is set, it should create Stream object with empty string.' + 'When no body is set, it should create Stream object with empty string.', ); $response = new Response(Status::OK, body: 'Hello World'); $this->assertSame( 'Hello World', $response->getBody()->getContents(), - 'Validate same body are returned from response.' + 'Validate same body are returned from response.', ); $stream = Stream::create('Hello World'); @@ -204,13 +203,13 @@ public function test_body() $this->assertSame( 'Hello World', $response->getBody()->getContents(), - 'Validate same body are returned from response.' + 'Validate same body are returned from response.', ); $this->assertSame( spl_object_id($response), spl_object_id($response->withBody($stream)), - 'withBody: should return same object when same body is set.' + 'withBody: should return same object when same body is set.', ); } } diff --git a/tests/Libs/ServeStaticTest.php b/tests/Libs/ServeStaticTest.php index a8cc21cd..b6fc7c55 100644 --- a/tests/Libs/ServeStaticTest.php +++ b/tests/Libs/ServeStaticTest.php @@ -13,7 +13,7 @@ class ServeStaticTest extends TestCase { - private ServeStatic|null $server = null; + private ?ServeStatic $server = null; private string $dataPath = __DIR__ . '/../Fixtures/static_data'; protected function setUp(): void @@ -119,20 +119,20 @@ public function test_responses() $response = $this->server->serve($this->createRequest('GET', '/test.html')); $this->assertEquals(Status::OK->value, $response->getStatusCode()); $this->assertEquals('text/html; charset=utf-8', $response->getHeaderLine('Content-Type')); - $this->assertEquals(file_get_contents($this->dataPath . '/test.html'), (string)$response->getBody()); + $this->assertEquals(file_get_contents($this->dataPath . '/test.html'), (string) $response->getBody()); $this->assertSame(filesize($this->dataPath . '/test.html'), $response->getBody()->getSize()); $response = new ServeStatic()->serve($this->createRequest('GET', '/guides/identities.md')); $this->assertEquals(Status::OK->value, $response->getStatusCode()); $this->assertEquals('text/markdown; charset=utf-8', $response->getHeaderLine('Content-Type')); - $this->assertEquals(file_get_contents(__DIR__ . '/../../guides/identities.md'), (string)$response->getBody()); + $this->assertEquals(file_get_contents(__DIR__ . '/../../guides/identities.md'), (string) $response->getBody()); $response = new ServeStatic()->serve($this->createRequest('GET', '/guides/openapi/plex.json')); $this->assertEquals(Status::OK->value, $response->getStatusCode()); $this->assertEquals('application/json; charset=utf-8', $response->getHeaderLine('Content-Type')); $this->assertEquals( file_get_contents(__DIR__ . '/../../src/Backends/Plex/plex-openai-stable.json'), - (string) $response->getBody() + (string) $response->getBody(), ); $response = new ServeStatic()->serve($this->createRequest('HEAD', '/guides/openapi/jellyfin.json')); @@ -147,14 +147,14 @@ public function test_responses() $this->assertEquals('image/jpeg', $response->getHeaderLine('Content-Type')); $this->assertEquals( file_get_contents(__DIR__ . '/../../screenshots/index.jpg'), - (string)$response->getBody() + (string) $response->getBody(), ); // -- There are similar rules for .md files test them. $response = $this->server->serve($this->createRequest('GET', '/README.md')); $this->assertEquals(Status::OK->value, $response->getStatusCode()); $this->assertEquals('text/markdown; charset=utf-8', $response->getHeaderLine('Content-Type')); - $this->assertEquals(file_get_contents(__DIR__ . '/../../README.md'), (string)$response->getBody()); + $this->assertEquals(file_get_contents(__DIR__ . '/../../README.md'), (string) $response->getBody()); // -- Check directory serving. $response = $this->server->serve($this->createRequest('GET', '/test')); @@ -162,7 +162,7 @@ public function test_responses() $this->assertEquals('text/html; charset=utf-8', $response->getHeaderLine('Content-Type')); $this->assertEquals( file_get_contents(__DIR__ . '/../Fixtures/static_data/test/index.html'), - (string)$response->getBody() + (string) $response->getBody(), ); $response = $this->server->serve($this->createRequest('GET', '/test.html', [ @@ -177,13 +177,12 @@ public function test_responses() $this->assertEquals('text/html; charset=utf-8', $response->getHeaderLine('Content-Type')); $this->assertEquals( file_get_contents(__DIR__ . '/../Fixtures/static_data/test/index.html'), - (string)$response->getBody() + (string) $response->getBody(), ); $response = $this->server->serve($this->createRequest('GET', '/test/view/1')); $this->assertEquals(Status::OK->value, $response->getStatusCode()); - $response = $this->server->serve($this->createRequest('GET', '/test.html', [ 'if-modified-since' => '$$ INVALID DATA', ])); @@ -191,7 +190,7 @@ public function test_responses() $this->assertEquals( Status::OK->value, $response->getStatusCode(), - 'If the date is invalid, the file should be served as normal.' + 'If the date is invalid, the file should be served as normal.', ); } } diff --git a/tests/Libs/ShlexTest.php b/tests/Libs/ShlexTest.php index 75d77521..a24185cf 100644 --- a/tests/Libs/ShlexTest.php +++ b/tests/Libs/ShlexTest.php @@ -79,7 +79,11 @@ public function test_split_real_command_shapes(): void 'state:export --backend=plex --dry-run --force' => ['state:export', '--backend=plex', '--dry-run', '--force'], 'state:export --backend="my backend" --option=value' => ['state:export', '--backend=my backend', '--option=value'], 'state:export --data=\'{"key":"value"}\'' => ['state:export', '--data={"key":"value"}'], - 'state:import --file=/tmp/backup.json --output=/var/log/result.log' => ['state:import', '--file=/tmp/backup.json', '--output=/var/log/result.log'], + 'state:import --file=/tmp/backup.json --output=/var/log/result.log' => [ + 'state:import', + '--file=/tmp/backup.json', + '--output=/var/log/result.log', + ], 'state:export --match="*.mkv" --exclude="*.nfo"' => ['state:export', '--match=*.mkv', '--exclude=*.nfo'], 'state:export --title="Movie (2024) - Part 1 & 2"' => ['state:export', '--title=Movie (2024) - Part 1 & 2'], ]; @@ -123,7 +127,7 @@ public function test_join_quotes_unsafe_arguments(): void $this->assertSame("hello world 'foo bar'", Shlex::join(['hello', 'world', 'foo bar'])); $this->assertSame( "cmd --option=value 'arg with spaces' 'test;injection'", - Shlex::join(['cmd', '--option=value', 'arg with spaces', 'test;injection']) + Shlex::join(['cmd', '--option=value', 'arg with spaces', 'test;injection']), ); } diff --git a/tests/Libs/StateEntityTest.php b/tests/Libs/StateEntityTest.php index 0b3338d1..f6f97dda 100644 --- a/tests/Libs/StateEntityTest.php +++ b/tests/Libs/StateEntityTest.php @@ -53,7 +53,7 @@ public function test_init_bad_data(): void $this->assertSame( $entityEmpty->getAll(), $entity->getAll(), - 'When new instance of StateEntity is called with total invalid data, getAll() return empty array' + 'When new instance of StateEntity is called with total invalid data, getAll() return empty array', ); } @@ -65,11 +65,11 @@ public function test_diff_direct_param(): void [ iState::COLUMN_WATCHED => [ 'old' => 1, - 'new' => 0 - ] + 'new' => 0, + ], ], $entity->diff(), - 'When object directly modified and diff() is called, only modified fields are returned in format [field => [old => old_value, new => new_value]]' + 'When object directly modified and diff() is called, only modified fields are returned in format [field => [old => old_value, new => new_value]]', ); } @@ -90,7 +90,7 @@ public function test_diff_array_param(): void $this->assertSame( $arr, $entity->diff(), - 'When array parameter is updated and diff() is called, only modified fields are returned in format [field => [old => old_value, new => new_value]]' + 'When array parameter is updated and diff() is called, only modified fields are returned in format [field => [old => old_value, new => new_value]]', ); } @@ -100,12 +100,12 @@ public function test_getName_as_movie(): void $this->assertSame( 'Movie Title (2020)', $entity->getName(), - 'When entity is movie, getName() returns title and year' + 'When entity is movie, getName() returns title and year', ); $this->assertSame( 'Movie Title (2020)', $entity->getName(asMovie: true), - 'When getName() called with asMovie parameter set to true, getName() returns title and year' + 'When getName() called with asMovie parameter set to true, getName() returns title and year', ); $data = $this->testMovie; @@ -117,7 +117,7 @@ public function test_getName_as_movie(): void $this->assertSame( '?? (0000)', $entity->getName(), - 'When no title and year is set, getName() returns ?? (0000)' + 'When no title and year is set, getName() returns ?? (0000)', ); $entity = new StateEntity($this->testMovie); @@ -126,7 +126,7 @@ public function test_getName_as_movie(): void $this->assertSame( 'Movie Title (2020)', $entity->getName(), - 'getName() should reference initial data, not current object data' + 'getName() should reference initial data, not current object data', ); } @@ -136,12 +136,12 @@ public function test_getName_as_episode(): void $this->assertSame( 'Series Title (2020) - 01x002', $entity->getName(), - 'When entity is episode, getName() returns series title, year, season and episode in format of Series Title (2020) - SSxEEE' + 'When entity is episode, getName() returns series title, year, season and episode in format of Series Title (2020) - SSxEEE', ); $this->assertSame( 'Series Title (2020)', $entity->getName(asMovie: true), - 'When entity is episode, and getName() called with asMovie parameter set to true, getName() returns series title and year' + 'When entity is episode, and getName() called with asMovie parameter set to true, getName() returns series title and year', ); $data = $this->testEpisode; @@ -155,7 +155,7 @@ public function test_getName_as_episode(): void $this->assertSame( '?? (0000) - 00x000', $entity->getName(), - 'When no title, year, season and episode is set, getName() returns ?? (0000) - 00x000' + 'When no title, year, season and episode is set, getName() returns ?? (0000) - 00x000', ); $entity = new StateEntity($this->testEpisode); @@ -166,7 +166,7 @@ public function test_getName_as_episode(): void $this->assertSame( 'Series Title (2020) - 01x002', $entity->getName(), - 'getName() should reference initial data, not current object data' + 'getName() should reference initial data, not current object data', ); } @@ -181,7 +181,7 @@ public function test_getAll(): void $this->assertSame( $base->getAll(), $entity->getAll(), - 'When new instance of StateEntity is called with invalid data, getAll() return only valid data' + 'When new instance of StateEntity is called with invalid data, getAll() return only valid data', ); } @@ -192,15 +192,15 @@ public function test_isChanged(): void $this->assertTrue( $entity->isChanged(), - 'When object directly modified and isChanged() is called, returns true' + 'When object directly modified and isChanged() is called, returns true', ); $this->assertTrue( $entity->isChanged([iState::COLUMN_WATCHED]), - 'When object directly modified and isChanged() is called with fields that contain changed keys, it returns true' + 'When object directly modified and isChanged() is called with fields that contain changed keys, it returns true', ); $this->assertFalse( $entity->isChanged([iState::COLUMN_UPDATED]), - 'When object directly modified and isChanged() is called with fields that do not contain changed keys, it returns false' + 'When object directly modified and isChanged() is called with fields that do not contain changed keys, it returns false', ); } @@ -210,7 +210,7 @@ public function test_hasGuids(): void $this->assertTrue( $entity->hasGuids(), - 'When entity has supported GUIDs, hasGuids() returns true' + 'When entity has supported GUIDs, hasGuids() returns true', ); $data = $this->testMovie; @@ -219,12 +219,12 @@ public function test_hasGuids(): void $entity = $entity::fromArray($data); $this->assertFalse( $entity->hasGuids(), - 'When entity does not have supported GUIDs, hasGuids() returns false' + 'When entity does not have supported GUIDs, hasGuids() returns false', ); $this->assertSame( $data[iState::COLUMN_GUIDS], $entity->getGuids(), - 'getGuids() returns list of all keys including unsupported ones' + 'getGuids() returns list of all keys including unsupported ones', ); } @@ -234,17 +234,14 @@ public function test_getGuids(): void $this->assertSame( $this->testMovie[iState::COLUMN_GUIDS], $entity->getGuids(), - 'When entity has GUIDs, getGuids() returns list of all GUIDs' + 'When entity has GUIDs, getGuids() returns list of all GUIDs', ); $data = $this->testMovie; unset($data[iState::COLUMN_GUIDS]); $entity = $entity::fromArray($data); - $this->assertSame([], - $entity->getGuids(), - 'When entity does not have GUIDs, getGuids() returns empty array' - ); + $this->assertSame([], $entity->getGuids(), 'When entity does not have GUIDs, getGuids() returns empty array'); } public function test_getPointers(): void @@ -266,7 +263,7 @@ public function test_getPointers(): void $this->assertSame( $pointers, $entity->getPointers(), - 'When entity has supported GUIDs, getPointers() returns list of all GUIDs in format of guid_://' + 'When entity has supported GUIDs, getPointers() returns list of all GUIDs in format of guid_://', ); $data = $this->testMovie; @@ -279,7 +276,7 @@ public function test_getPointers(): void $this->assertSame( [], $entity->getPointers(), - 'When entity does not have GUIDs or supported ones, getPointers() returns empty array' + 'When entity does not have GUIDs or supported ones, getPointers() returns empty array', ); } @@ -289,7 +286,7 @@ public function test_hasParentGuid(): void $this->assertTrue( $entity->hasParentGuid(), - 'When entity has supported parent GUIDs, hasParentGuid() returns true' + 'When entity has supported parent GUIDs, hasParentGuid() returns true', ); $data = $this->testEpisode; @@ -298,7 +295,7 @@ public function test_hasParentGuid(): void $entity = $entity::fromArray($data); $this->assertFalse( $entity->hasParentGuid(), - 'When entity does not have supported parent GUIDs, hasParentGuid() returns false' + 'When entity does not have supported parent GUIDs, hasParentGuid() returns false', ); $data = $this->testEpisode; @@ -306,7 +303,7 @@ public function test_hasParentGuid(): void $entity = $entity::fromArray($data); $this->assertTrue( $entity->hasParentGuid(), - 'When entity has parent supported GUIDs even if contains unsupported ones, hasParentGuid() returns true' + 'When entity has parent supported GUIDs even if contains unsupported ones, hasParentGuid() returns true', ); } @@ -316,7 +313,7 @@ public function test_getParentGuids(): void $this->assertSame( $this->testEpisode[iState::COLUMN_PARENT], $entity->getParentGuids(), - 'When entity has parent GUIDs, getParentGuids() returns list of all GUIDs' + 'When entity has parent GUIDs, getParentGuids() returns list of all GUIDs', ); $data = $this->testEpisode; @@ -326,7 +323,7 @@ public function test_getParentGuids(): void $this->assertSame( [], $entity->getParentGuids(), - 'When entity does not have parent GUIDs, getParentGuids() returns empty array' + 'When entity does not have parent GUIDs, getParentGuids() returns empty array', ); $data = $this->testEpisode; @@ -336,7 +333,7 @@ public function test_getParentGuids(): void $this->assertSame( $data[iState::COLUMN_PARENT], $entity->getParentGuids(), - 'When entity has parent GUIDs, getParentGuids() returns list of all GUIDs including unsupported ones' + 'When entity has parent GUIDs, getParentGuids() returns list of all GUIDs including unsupported ones', ); } @@ -367,11 +364,11 @@ public function test_hasRelativeGuid(): void { $this->assertTrue( new StateEntity($this->testEpisode)->hasRelativeGuid(), - 'When entity is episode, and only if has supported GUIDs hasRelativeGuid() returns true' + 'When entity is episode, and only if has supported GUIDs hasRelativeGuid() returns true', ); $this->assertFalse( new StateEntity($this->testMovie)->hasRelativeGuid(), - 'When entity is movie, hasRelativeGuid() returns false regardless' + 'When entity is movie, hasRelativeGuid() returns false regardless', ); $data = $this->testEpisode; @@ -379,7 +376,7 @@ public function test_hasRelativeGuid(): void $entity = StateEntity::fromArray($data); $this->assertFalse( $entity->hasRelativeGuid(), - 'When entity is episode, and does not have season, hasRelativeGuid() returns false' + 'When entity is episode, and does not have season, hasRelativeGuid() returns false', ); $data = $this->testEpisode; @@ -387,7 +384,7 @@ public function test_hasRelativeGuid(): void $entity = StateEntity::fromArray($data); $this->assertFalse( $entity->hasRelativeGuid(), - 'When entity is episode, and does not have episode, hasRelativeGuid() returns false' + 'When entity is episode, and does not have episode, hasRelativeGuid() returns false', ); $data = $this->testEpisode; @@ -395,7 +392,7 @@ public function test_hasRelativeGuid(): void $entity = StateEntity::fromArray($data); $this->assertFalse( $entity->hasRelativeGuid(), - 'When entity is episode, and does not have parent GUIDs, hasRelativeGuid() returns false' + 'When entity is episode, and does not have parent GUIDs, hasRelativeGuid() returns false', ); } @@ -404,23 +401,24 @@ public function test_getRelativeGuids(): void $this->assertSame( [], new StateEntity($this->testMovie)->getRelativeGuids(), - 'When entity is movie, getRelativeGuids() returns empty array regardless' + 'When entity is movie, getRelativeGuids() returns empty array regardless', ); $this->assertSame( [ 'guid_imdb' => 'tt510/1/2', - 'guid_tvdb' => '520/1/2' + 'guid_tvdb' => '520/1/2', ], new StateEntity($this->testEpisode)->getRelativeGuids(), - 'When entity is episode, and has supported GUIDs, getRelativeGuids() returns list of all supported GUIDs' + 'When entity is episode, and has supported GUIDs, getRelativeGuids() returns list of all supported GUIDs', ); $data = $this->testEpisode; unset($data[iState::COLUMN_PARENT]); $entity = new StateEntity($data); - $this->assertSame([], + $this->assertSame( + [], $entity->getRelativeGuids(), - 'When entity is episode, and does not have parent GUIDs, getRelativeGuids() returns empty array' + 'When entity is episode, and does not have parent GUIDs, getRelativeGuids() returns empty array', ); $data = $this->testEpisode; @@ -429,10 +427,10 @@ public function test_getRelativeGuids(): void $this->assertSame( [ 'guid_imdb' => 'tt510/1/2', - 'guid_tvdb' => '520/1/2' + 'guid_tvdb' => '520/1/2', ], $entity->getRelativeGuids(), - 'When entity is episode, and has supported GUIDs, getRelativeGuids() returns list of all supported GUIDs excluding unsupported ones' + 'When entity is episode, and has supported GUIDs, getRelativeGuids() returns list of all supported GUIDs excluding unsupported ones', ); } @@ -452,12 +450,13 @@ public function test_getRelativePointers(): void $this->assertSame( $pointers, $po, - 'When entity is episode, and has supported GUIDs, getRelativePointers() returns list of all supported GUIDs in format of rguid_:////' + 'When entity is episode, and has supported GUIDs, getRelativePointers() returns list of all supported GUIDs in format of rguid_:////', ); - $this->assertSame([], + $this->assertSame( + [], new StateEntity($this->testMovie)->getRelativePointers(), - 'When entity is movie, getRelativePointers() returns empty array regardless.' + 'When entity is movie, getRelativePointers() returns empty array regardless.', ); $data = $this->testEpisode; @@ -467,7 +466,7 @@ public function test_getRelativePointers(): void $this->assertSame( $pointers, $entity->getRelativePointers(), - 'When entity is episode, and has supported GUIDs, getRelativePointers() returns list of all supported GUIDs in format of rguid_://// excluding unsupported ones' + 'When entity is episode, and has supported GUIDs, getRelativePointers() returns list of all supported GUIDs in format of rguid_://// excluding unsupported ones', ); } @@ -480,7 +479,7 @@ public function test_apply(): void $this->assertSame( $updated->getAll(), $entity->getAll(), - 'When entity is updated with itself, nothing should change' + 'When entity is updated with itself, nothing should change', ); $entity = new StateEntity($this->testMovie); @@ -489,7 +488,7 @@ public function test_apply(): void $this->assertSame( [], $entity->diff(), - 'When apply() called with fields that do not contain changed keys, diff() returns empty array' + 'When apply() called with fields that do not contain changed keys, diff() returns empty array', ); $entity = new StateEntity($this->testMovie); @@ -509,7 +508,7 @@ public function test_apply(): void ], ], $entity->diff(), - 'When apply() is called with no fields set, the updated fields from given entity are applied to current entity.' + 'When apply() is called with no fields set, the updated fields from given entity are applied to current entity.', ); $entity = new StateEntity($this->testMovie); @@ -530,12 +529,12 @@ public function test_apply(): void iState::COLUMN_ID => [ 'old' => 121, 'new' => 1234, - ] - ] - ] + ], + ], + ], ], $entity->diff(), - 'When apply() is called with fields that contain changed keys, only those fields are applied to current entity.' + 'When apply() is called with fields that contain changed keys, only those fields are applied to current entity.', ); $data1 = $this->testMovie; @@ -555,7 +554,7 @@ public function test_updateOriginal(): void $this->assertSame( $entity->getOriginalData(), $entity->getAll(), - 'When entity is created, getOriginalData() returns same data as getAll()' + 'When entity is created, getOriginalData() returns same data as getAll()', ); $entity->watched = 0; @@ -563,7 +562,7 @@ public function test_updateOriginal(): void $this->assertSame( $entity->getOriginalData(), $entity->getAll(), - 'When entity is updated, and updateOriginal() is called getOriginalData() returns same data as getAll()' + 'When entity is updated, and updateOriginal() is called getOriginalData() returns same data as getAll()', ); } @@ -573,14 +572,14 @@ public function test_getOriginalData(): void $this->assertSame( $entity->getOriginalData(), $entity->getAll(), - 'When entity is created, getOriginalData() returns same data as getAll()' + 'When entity is created, getOriginalData() returns same data as getAll()', ); $entity->watched = 0; $this->assertNotSame( $entity->getOriginalData(), $entity->getAll(), - 'When entity is updated, getOriginalData() returns different data than getAll()' + 'When entity is updated, getOriginalData() returns different data than getAll()', ); } @@ -589,12 +588,12 @@ public function test_setIsTainted(): void $entity = new StateEntity($this->testMovie); $this->assertFalse( $entity->isTainted(), - 'When entity is created, isTainted() returns false' + 'When entity is created, isTainted() returns false', ); $entity->setIsTainted(true); $this->assertTrue( $entity->isTainted(), - 'When setIsTainted() is called with true, isTainted() returns true' + 'When setIsTainted() is called with true, isTainted() returns true', ); $this->checkException( @@ -622,17 +621,17 @@ public function test_getMetadata(): void $this->assertSame( $this->testMovie[iState::COLUMN_META_DATA], $entity->getMetadata(), - 'getMetadata() returns all stored metadata in format of [ via => [ key => mixed ], via2 => [ key => mixed ] ]' + 'getMetadata() returns all stored metadata in format of [ via => [ key => mixed ], via2 => [ key => mixed ] ]', ); $this->assertSame( $this->testMovie[iState::COLUMN_META_DATA][$entity->via], $entity->getMetadata($entity->via), - 'getMetadata() called with via parameter returns metadata for that via in format of [ key => mixed ]' + 'getMetadata() called with via parameter returns metadata for that via in format of [ key => mixed ]', ); $this->assertSame( [], $entity->getMetadata('not_set'), - 'getMetadata() called with via parameter that does not exist returns empty array' + 'getMetadata() called with via parameter that does not exist returns empty array', ); } @@ -645,12 +644,13 @@ public function test_setMetadata(): void $this->assertSame( $metadata, $entity->getMetadata($entity->via), - 'setMetadata() Should recursively replace given metadata with existing metadata for given via' + 'setMetadata() Should recursively replace given metadata with existing metadata for given via', ); $entity->setMetadata([]); - $this->assertSame([], + $this->assertSame( + [], $entity->getMetadata($entity->via), - 'if setMetadata() called with empty array, getMetadata() returns empty array' + 'if setMetadata() called with empty array, getMetadata() returns empty array', ); unset($this->testMovie[iState::COLUMN_VIA]); @@ -669,17 +669,17 @@ public function test_getExtra(): void $this->assertSame( $this->testMovie[iState::COLUMN_EXTRA], $entity->getExtra(), - 'When getExtra() called with no via parameter, returns all stored extra data in format of [ via => [ key => mixed ], via2 => [ key => mixed ] ]' + 'When getExtra() called with no via parameter, returns all stored extra data in format of [ via => [ key => mixed ], via2 => [ key => mixed ] ]', ); $this->assertSame( $this->testMovie[iState::COLUMN_EXTRA][$entity->via], $entity->getExtra($entity->via), - 'When getExtra() called with via parameter, returns extra data for that via in format of [ key => mixed ]' + 'When getExtra() called with via parameter, returns extra data for that via in format of [ key => mixed ]', ); $this->assertSame( [], $entity->getMetadata('not_set'), - 'When getExtra() called with via parameter that does not exist, returns empty array' + 'When getExtra() called with via parameter that does not exist, returns empty array', ); } @@ -692,14 +692,14 @@ public function test_setExtra(): void $this->assertSame( $extra, $entity->getExtra($entity->via), - 'setExtra() Should recursively replace given extra data with existing extra data for given via' + 'setExtra() Should recursively replace given extra data with existing extra data for given via', ); $entity->setExtra([]); $this->assertSame( [], $entity->getExtra($entity->via), - 'if setExtra() called with empty array, getExtra() returns empty array' + 'if setExtra() called with empty array, getExtra() returns empty array', ); unset($this->testMovie[iState::COLUMN_VIA]); @@ -719,14 +719,14 @@ public function test_shouldMarkAsUnplayed(): void // -- Condition 1: db entity not marked as watched. $this->assertFalse( $entity->shouldMarkAsUnplayed($entity), - 'When entity is not watched, shouldMarkAsUnplayed() returns false' + 'When entity is not watched, shouldMarkAsUnplayed() returns false', ); $entity = new StateEntity($this->testMovie); // -- Condition 2: backend entity not marked as unwatched. $this->assertFalse( $entity->shouldMarkAsUnplayed($entity), - 'When entity is watched, and backend entity is not marked as unwatched, shouldMarkAsUnplayed() returns false' + 'When entity is watched, and backend entity is not marked as unwatched, shouldMarkAsUnplayed() returns false', ); $entity = new StateEntity($this->testMovie); @@ -737,7 +737,7 @@ public function test_shouldMarkAsUnplayed(): void // -- Condition 3: No metadata was set previously on records. $this->assertFalse( $entity->shouldMarkAsUnplayed($updater), - 'When entity is watched, and backend entity is marked as unwatched, and no metadata was set previously on records, shouldMarkAsUnplayed() returns false' + 'When entity is watched, and backend entity is marked as unwatched, and no metadata was set previously on records, shouldMarkAsUnplayed() returns false', ); // -- Condition 4: Required metadata fields is missing. @@ -745,7 +745,7 @@ public function test_shouldMarkAsUnplayed(): void iState::COLUMN_ID, iState::COLUMN_WATCHED, iState::COLUMN_META_DATA_ADDED_AT, - iState::COLUMN_META_DATA_PLAYED_AT + iState::COLUMN_META_DATA_PLAYED_AT, ]; $d = []; @@ -762,19 +762,19 @@ public function test_shouldMarkAsUnplayed(): void $this->assertFalse( StateEntity::fromArray($d[0])->shouldMarkAsUnplayed($updater), - 'When metadata id is missing, shouldMarkAsUnplayed() returns false' + 'When metadata id is missing, shouldMarkAsUnplayed() returns false', ); $this->assertFalse( StateEntity::fromArray($d[1])->shouldMarkAsUnplayed($updater), - 'When metadata watched is missing, shouldMarkAsUnplayed() returns false' + 'When metadata watched is missing, shouldMarkAsUnplayed() returns false', ); $this->assertFalse( StateEntity::fromArray($d[2])->shouldMarkAsUnplayed($updater), - 'When metadata added date is missing, shouldMarkAsUnplayed() returns false' + 'When metadata added date is missing, shouldMarkAsUnplayed() returns false', ); $this->assertFalse( StateEntity::fromArray($d[3])->shouldMarkAsUnplayed($updater), - 'When metadata played date is missing, shouldMarkAsUnplayed() returns false' + 'When metadata played date is missing, shouldMarkAsUnplayed() returns false', ); // -- Condition 3: no metadata for via. @@ -784,7 +784,7 @@ public function test_shouldMarkAsUnplayed(): void $data[iState::COLUMN_WATCHED] = 0; $this->assertFalse( StateEntity::fromArray($data1)->shouldMarkAsUnplayed(StateEntity::fromArray($data)), - 'When no metadata set for a backend, shouldMarkAsUnplayed() returns false' + 'When no metadata set for a backend, shouldMarkAsUnplayed() returns false', ); // -- Condition 5: metadata played is false. @@ -792,7 +792,7 @@ public function test_shouldMarkAsUnplayed(): void $data[iState::COLUMN_META_DATA][$this->testMovie[iState::COLUMN_VIA]][iState::COLUMN_WATCHED] = 0; $this->assertFalse( StateEntity::fromArray($data)->shouldMarkAsUnplayed($updater), - 'When metadata watched is false, shouldMarkAsUnplayed() returns false' + 'When metadata watched is false, shouldMarkAsUnplayed() returns false', ); // -- Condition 7: metadata added date not equal to the updated date. @@ -800,13 +800,13 @@ public function test_shouldMarkAsUnplayed(): void $data[iState::COLUMN_META_DATA][$this->testMovie[iState::COLUMN_VIA]][iState::COLUMN_META_DATA_ADDED_AT] = 124; $this->assertFalse( StateEntity::fromArray($data)->shouldMarkAsUnplayed($updater), - 'When metadata added date is not equal to updated, shouldMarkAsUnplayed() returns false' + 'When metadata added date is not equal to updated, shouldMarkAsUnplayed() returns false', ); // -- Finally, should update. $this->assertTrue( StateEntity::fromArray($this->testMovie)->shouldMarkAsUnplayed($updater), - 'When all 7 conditions are met shouldMarkAsUnplayed() returns true' + 'When all 7 conditions are met shouldMarkAsUnplayed() returns true', ); } @@ -821,43 +821,43 @@ public function test_shouldMarkAsUnplayed_with_disable_flag(): void $userContext = $this->createUserContext( name: 'test_backend', data: [ - 'test_plex.options.' . Options::DISABLE_MARK_UNPLAYED => true - ] + 'test_plex.options.' . Options::DISABLE_MARK_UNPLAYED => true, + ], ); $this->assertFalse( StateEntity::fromArray($this->testMovie)->shouldMarkAsUnplayed($updater, $userContext), - 'When DISABLE_MARK_UNPLAYED flag is set to true, shouldMarkAsUnplayed() returns false' + 'When DISABLE_MARK_UNPLAYED flag is set to true, shouldMarkAsUnplayed() returns false', ); // -- Test with flag set to false (should behave normally) $userContextFalse = $this->createUserContext( name: 'test_backend_false', data: [ - 'test_plex.options.' . Options::DISABLE_MARK_UNPLAYED => false - ] + 'test_plex.options.' . Options::DISABLE_MARK_UNPLAYED => false, + ], ); $this->assertTrue( StateEntity::fromArray($this->testMovie)->shouldMarkAsUnplayed($updater, $userContextFalse), - 'When DISABLE_MARK_UNPLAYED flag is set to false, shouldMarkAsUnplayed() returns true (normal behavior)' + 'When DISABLE_MARK_UNPLAYED flag is set to false, shouldMarkAsUnplayed() returns true (normal behavior)', ); // -- Test with null UserContext (should behave normally) $this->assertTrue( StateEntity::fromArray($this->testMovie)->shouldMarkAsUnplayed($updater, null), - 'When UserContext is null, shouldMarkAsUnplayed() returns true (normal behavior)' + 'When UserContext is null, shouldMarkAsUnplayed() returns true (normal behavior)', ); // -- Test with UserContext but without the flag set (should behave normally) $userContextNoFlag = $this->createUserContext( name: 'test_backend_no_flag', - data: [] + data: [], ); $this->assertTrue( StateEntity::fromArray($this->testMovie)->shouldMarkAsUnplayed($updater, $userContextNoFlag), - 'When DISABLE_MARK_UNPLAYED flag is not set, shouldMarkAsUnplayed() returns true (normal behavior)' + 'When DISABLE_MARK_UNPLAYED flag is not set, shouldMarkAsUnplayed() returns true (normal behavior)', ); } @@ -885,7 +885,7 @@ public function test_markAsUnplayed(): void ], ], $entity->diff(), - 'When markAsUnplayed() is called, three mandatory fields are updated: (updated, watched and via)' + 'When markAsUnplayed() is called, three mandatory fields are updated: (updated, watched and via)', ); } @@ -894,7 +894,7 @@ public function test_hasPlayProgress(): void $entity = new StateEntity($this->testMovie); $this->assertFalse( $entity->hasPlayProgress(), - 'When hasPlayProgress() when valid play progress is set, but the entity is marked as watched returns false' + 'When hasPlayProgress() when valid play progress is set, but the entity is marked as watched returns false', ); $testData = ag_set($this->testMovie, iState::COLUMN_WATCHED, 0); @@ -903,7 +903,7 @@ public function test_hasPlayProgress(): void $this->assertFalse( $entity->hasPlayProgress(), - 'When hasPlayProgress() when valid play progress is set, but the entity server metadata is marked as watched returns false' + 'When hasPlayProgress() when valid play progress is set, but the entity server metadata is marked as watched returns false', ); $testData = ag_set($this->testMovie, 'metadata.test_plex.watched', 0); @@ -911,7 +911,7 @@ public function test_hasPlayProgress(): void $entity = new StateEntity($testData); $this->assertFalse( $entity->hasPlayProgress(), - 'When hasPlayProgress() when all conditions are met except play progress is less than 1s, returns false' + 'When hasPlayProgress() when all conditions are met except play progress is less than 1s, returns false', ); $testData = ag_set($this->testMovie, 'watched', 0); @@ -921,7 +921,7 @@ public function test_hasPlayProgress(): void $this->assertTrue( $entity->hasPlayProgress(), - 'When hasPlayProgress() when valid play progress is set, returns true' + 'When hasPlayProgress() when valid play progress is set, returns true', ); } @@ -933,7 +933,7 @@ public function test_getPlayProgress(): void $this->assertSame( 65000, $entity->getPlayProgress(), - 'When hasPlayProgress() when valid play progress is set, returns true' + 'When hasPlayProgress() when valid play progress is set, returns true', ); $testData = ag_set($this->testMovie, iState::COLUMN_WATCHED, 0); @@ -945,7 +945,7 @@ public function test_getPlayProgress(): void $this->assertSame( 65000, $entity->getPlayProgress(), - 'When hasPlayProgress() when valid play progress is set, returns true' + 'When hasPlayProgress() when valid play progress is set, returns true', ); $testData[iState::COLUMN_WATCHED] = 1; @@ -969,30 +969,30 @@ public function test_context(): void $this->assertSame( 'context', $entity->getContext('test'), - 'When getContext() is called, the same value is returned' + 'When getContext() is called, the same value is returned', ); $this->assertSame( 'iam_default', $entity->getContext(null, 'iam_default'), - 'When getContext() is called with default value, and key is null the default value is returned' + 'When getContext() is called with default value, and key is null the default value is returned', ); $this->assertSame( 'iam_default', $entity->getContext('not_set', 'iam_default'), - 'When getContext() is called with non-existing key, the default value is returned' + 'When getContext() is called with non-existing key, the default value is returned', ); $this->assertSame( ['test' => 'context'], $entity->getContext(), - 'When getContext() is called with no parameters, all context data is returned' + 'When getContext() is called with no parameters, all context data is returned', ); $this->assertTrue( $entity->hasContext('test'), - 'When hasContext() is called with existing key, it returns true' + 'When hasContext() is called with existing key, it returns true', ); $this->assertFalse( $entity->hasContext('not_set'), - 'When hasContext() is called with non-existing key, it returns false' + 'When hasContext() is called with non-existing key, it returns false', ); } @@ -1004,7 +1004,7 @@ public function test_getMeta(): void $this->assertSame( '__not_set', $entity->getMeta('extra.title', '__not_set'), - 'When no via is set, returns the default value' + 'When no via is set, returns the default value', ); $real = $this->testEpisode; @@ -1015,14 +1015,14 @@ public function test_getMeta(): void $this->assertSame( ag($real, 'metadata.test_plex.extra.title'), $entity->getMeta('extra.title'), - 'When quorum is not met returns the entity via backend metadata.' + 'When quorum is not met returns the entity via backend metadata.', ); $entity->via = 'test_emby'; $this->assertNotSame( ag($real, 'metadata.test_plex.extra.title'), $entity->getMeta('extra.title'), - 'When quorum is not met returns the entity via backend metadata.' + 'When quorum is not met returns the entity via backend metadata.', ); $entity = new StateEntity($this->testEpisode); @@ -1030,27 +1030,27 @@ public function test_getMeta(): void $this->assertSame( ag($this->testEpisode, 'metadata.test_jellyfin.extra.title'), $entity->getMeta('extra.title'), - 'When quorum is met for key return that value instead of the default via metadata.' + 'When quorum is met for key return that value instead of the default via metadata.', ); $entity = new StateEntity( - ag_set($this->testEpisode, 'metadata.test_jellyfin.extra.title', 'random') + ag_set($this->testEpisode, 'metadata.test_jellyfin.extra.title', 'random'), ); $this->assertSame( ag($real, 'metadata.test_plex.extra.title'), $entity->getMeta('extra.title'), - 'When no quorum for value reached, return default via metadata.' + 'When no quorum for value reached, return default via metadata.', ); $entity = new StateEntity( - ag_set($this->testEpisode, 'metadata.test_jellyfin.extra.title', null) + ag_set($this->testEpisode, 'metadata.test_jellyfin.extra.title', null), ); $this->assertSame( ag($real, 'metadata.test_plex.extra.title'), $entity->getMeta('extra.title'), - 'Quorum will not be met if one of the values is null.' + 'Quorum will not be met if one of the values is null.', ); } @@ -1066,13 +1066,13 @@ public function test_updated_added_at_columns() $this->assertSame( $this->testMovie[iState::COLUMN_UPDATED], $entity->updated_at, - 'When entity is created with updated_at set to 0, updated_at is set to updated date from metadata' + 'When entity is created with updated_at set to 0, updated_at is set to updated date from metadata', ); $this->assertSame( $this->testMovie[iState::COLUMN_UPDATED], $entity->created_at, - 'When entity is created with created_at set to 0, created_at is set to updated date from metadata' + 'When entity is created with created_at set to 0, created_at is set to updated date from metadata', ); } @@ -1087,30 +1087,19 @@ public function test_decoding_array_fields() $entity = new StateEntity($data); - $this->assertSame([], - $entity->getMetadata(), - 'When array keys are json decode fails, getMetadata() should returns empty array' - ); + $this->assertSame([], $entity->getMetadata(), 'When array keys are json decode fails, getMetadata() should returns empty array'); - $this->assertSame([], - $entity->getGuids(), - 'When array keys are json decode fails, getGuids() should returns empty array' - ); + $this->assertSame([], $entity->getGuids(), 'When array keys are json decode fails, getGuids() should returns empty array'); - $this->assertSame([], + $this->assertSame( + [], $entity->getParentGuids(), - 'When array keys are json decode fails, getParentGuids() should returns empty array' + 'When array keys are json decode fails, getParentGuids() should returns empty array', ); - $this->assertSame([], - $entity->getExtra(), - 'When array keys are json decode fails, getExtra() should returns empty array' - ); + $this->assertSame([], $entity->getExtra(), 'When array keys are json decode fails, getExtra() should returns empty array'); - $this->assertSame([], - $entity->getPointers(), - 'When array keys are json decode fails, getPointers() should returns empty array' - ); + $this->assertSame([], $entity->getPointers(), 'When array keys are json decode fails, getPointers() should returns empty array'); } public function test_episode_guid_disabled(): void @@ -1123,18 +1112,18 @@ public function test_episode_guid_disabled(): void $this->assertSame( [], $entity->getGuids(), - 'getGuids() returns empty array when episode GUIDs are disabled.' + 'getGuids() returns empty array when episode GUIDs are disabled.', ); $this->assertSame( [], $entity->getPointers(), - 'getPointers() returns empty array when episode GUIDs are disabled.' + 'getPointers() returns empty array when episode GUIDs are disabled.', ); Config::save('guid.disable.episode', false); $this->assertTrue( $entity->hasGuids(), - 'hasGuids() returns true when episode GUIDs are enabled and entity has GUIDs' + 'hasGuids() returns true when episode GUIDs are enabled and entity has GUIDs', ); $this->assertSame( $data[iState::COLUMN_GUIDS], @@ -1181,36 +1170,36 @@ public function test_removeMetadata() $this->assertCount( 1, $entity->getMetadata(), - 'When entity is created, getMetadata() returns metadata for the via' + 'When entity is created, getMetadata() returns metadata for the via', ); $this->assertSame( $data[iState::COLUMN_META_DATA][$entity->via], $entity->getMetadata($entity->via), - 'getMetadata() returns metadata for the via' + 'getMetadata() returns metadata for the via', ); $returned = $entity->removeMetadata('non_existing'); $this->assertSame( [], $returned, - 'When removeMetadata() is called with non-existing via, it returns empty array' + 'When removeMetadata() is called with non-existing via, it returns empty array', ); $returned = $entity->removeMetadata($entity->via); $this->assertCount( 0, $entity->getMetadata(), - 'When removeMetadata() is called, getMetadata() returns empty array' + 'When removeMetadata() is called, getMetadata() returns empty array', ); $this->assertSame( [], $entity->getMetadata($entity->via), - 'When removeMetadata() is called, getMetadata() for the via returns empty array' + 'When removeMetadata() is called, getMetadata() for the via returns empty array', ); $this->assertSame( $data[iState::COLUMN_META_DATA][$entity->via], $returned, - 'When removeMetadata() is called, it returns the removed metadata for the via' + 'When removeMetadata() is called, it returns the removed metadata for the via', ); } @@ -1219,10 +1208,10 @@ public function test_isSynced() $entity = new StateEntity($this->testMovie); $this->assertSame( [ - $entity->via => (bool)$entity->watched, + $entity->via => (bool) $entity->watched, ], $entity->isSynced([$entity->via]), - 'When isSynced() is called with backend, it returns true if watched status matches the metadata' + 'When isSynced() is called with backend, it returns true if watched status matches the metadata', ); $this->assertSame( @@ -1230,7 +1219,7 @@ public function test_isSynced() 'non_existing' => null, ], $entity->isSynced(['non_existing']), - 'When isSynced() is called with non-existing via, it returns null for that backend' + 'When isSynced() is called with non-existing via, it returns null for that backend', ); } } diff --git a/tests/Libs/StreamTest.php b/tests/Libs/StreamTest.php index d5fd11ad..7a76e426 100644 --- a/tests/Libs/StreamTest.php +++ b/tests/Libs/StreamTest.php @@ -203,11 +203,11 @@ public function test_typical_read() } $this->assertSame('test', $text, 'Reading from the stream should return the written text'); - $this->assertSame('test', (string)$f, 'Reading from the stream should return the written text'); + $this->assertSame('test', (string) $f, 'Reading from the stream should return the written text'); $this->assertSame( '', $f->getContents(), - 'If the stream is read to the end, getContents should return an empty string' + 'If the stream is read to the end, getContents should return an empty string', ); if ($f->isSeekable()) { @@ -216,12 +216,12 @@ public function test_typical_read() $this->assertSame( 'test', $f->getContents(), - 'After rewinding the stream, getContents should return the full text' + 'After rewinding the stream, getContents should return the full text', ); $this->assertSame( 4, $f->getSize(), - 'The size of the stream should be the length of the written text' + 'The size of the stream should be the length of the written text', ); $this->assertTrue($f->isSeekable(), 'The stream should be seekable'); $this->assertTrue($f->isReadable(), 'The stream should be readable'); @@ -236,7 +236,7 @@ public function test_typical_write() { $f = $this->getStream(); $f->write('test'); - $this->assertSame('test', (string)$f, 'Writing to the stream should write the text'); + $this->assertSame('test', (string) $f, 'Writing to the stream should write the text'); $this->assertSame(4, $f->getSize(), 'The size of the stream should be the length of the written text'); $this->assertTrue($f->isSeekable(), 'The stream should be seekable'); $this->assertTrue($f->isReadable(), 'The stream should not be readable'); diff --git a/tests/Libs/StreamedBodyTest.php b/tests/Libs/StreamedBodyTest.php index d006b80c..37abda6c 100644 --- a/tests/Libs/StreamedBodyTest.php +++ b/tests/Libs/StreamedBodyTest.php @@ -12,7 +12,7 @@ class StreamedBodyTest extends TestCase { - private function getStream(Closure|null $fn = null, bool $isReadable = true): StreamedBody + private function getStream(?Closure $fn = null, bool $isReadable = true): StreamedBody { return new StreamedBody($fn ?? fn() => 'test', isReadable: $isReadable); } @@ -25,25 +25,25 @@ public function test_expectations() $this->assertSame( 'test', $stream->getContents(), - 'getContents(): Must return the same value as the callback' + 'getContents(): Must return the same value as the callback', ); $this->assertSame('', $stream->getContents()); $this->assertSame('test', $this->getStream()->__toString(), 'Must implement __toString'); - $this->assertSame('test', (string)$this->getStream(), 'Must implement __toString'); + $this->assertSame('test', (string) $this->getStream(), 'Must implement __toString'); $this->assertNull( $this->getStream()->getMetadata('key'), - "getMetadata(): Must return null as closure doesn't have metadata" + "getMetadata(): Must return null as closure doesn't have metadata", ); $this->assertNull( $this->getStream()->getSize(), - 'getSize(): Must return null as closure does not have a size' + 'getSize(): Must return null as closure does not have a size', ); $this->assertSame( 't', $this->getStream()->read(1), - 'read(): Must return only the requested buffered chunk length' + 'read(): Must return only the requested buffered chunk length', ); $stream = $this->getStream(); @@ -58,11 +58,11 @@ public function test_expectations() $this->assertTrue($this->getStream()->isReadable(), 'isReadable(): Must return true as closure is readable'); $this->assertFalse( $this->getStream()->isWritable(), - 'isWritable(): Must return false as closure is not writable' + 'isWritable(): Must return false as closure is not writable', ); $this->assertFalse( $this->getStream()->isSeekable(), - 'isSeekable(): Must return false as closure is not seekable' + 'isSeekable(): Must return false as closure is not seekable', ); $this->assertNull($this->getStream()->detach(), 'detach(): Must return null as closure is not detachable'); @@ -78,7 +78,7 @@ public function test_expectations() $this->assertFalse( $this->getStream(isReadable: false)->isReadable(), - 'isReadable(): Must return false as closure is not readable' + 'isReadable(): Must return false as closure is not readable', ); } diff --git a/tests/Libs/UriTest.php b/tests/Libs/UriTest.php index 1983b90b..ef940bc1 100644 --- a/tests/Libs/UriTest.php +++ b/tests/Libs/UriTest.php @@ -33,14 +33,14 @@ public function test_scheme() $this->assertSame( spl_object_id($obj), spl_object_id($obj->withScheme('HTTP')), - 'The object should be the same if the scheme is the same' + 'The object should be the same if the scheme is the same', ); $this->checkException( closure: fn() => $this->getUri()->withScheme(false), reason: 'Exception should be thrown if the scheme is not a string', exception: InvalidArgumentException::class, - exceptionMessage: 'Scheme must be a string' + exceptionMessage: 'Scheme must be a string', ); } @@ -53,21 +53,21 @@ public function test_host() $this->assertSame( spl_object_id($obj), spl_object_id($obj->withHost($this->getUri()->getHost())), - 'The object should be the same if the host is the same' + 'The object should be the same if the host is the same', ); $this->checkException( closure: fn() => new Uri('http://#example.invalid:81/foo/bar'), reason: 'parse_url returns false if the host is invalid', exception: InvalidArgumentException::class, - exceptionMessage: 'Unable to parse URI' + exceptionMessage: 'Unable to parse URI', ); $this->checkException( closure: fn() => $this->getUri()->withHost(false), reason: 'Exception should be thrown if the host is not a string', exception: InvalidArgumentException::class, - exceptionMessage: 'Host must be a string' + exceptionMessage: 'Host must be a string', ); } @@ -78,7 +78,7 @@ public function test_userInfo() $this->assertSame( spl_object_id($obj), spl_object_id($obj->withUserInfo('user', 'pass')), - 'The object should be the same if the user info is the same' + 'The object should be the same if the user info is the same', ); $url2 = $this->getUri()->withUserInfo('user2', 'pass2'); @@ -91,21 +91,21 @@ public function test_userInfo() closure: fn() => new Uri('http://#:foo@example.com'), reason: 'parse_url returns false if the user info is invalid', exception: InvalidArgumentException::class, - exceptionMessage: 'Unable to parse URI' + exceptionMessage: 'Unable to parse URI', ); $this->checkException( closure: fn() => $this->getUri()->withUserInfo('foo', false), reason: 'Exception should be thrown if the user info is not a string', exception: InvalidArgumentException::class, - exceptionMessage: 'must be a string' + exceptionMessage: 'must be a string', ); $this->checkException( closure: fn() => $this->getUri()->withUserInfo(false, 'foo'), reason: 'Exception should be thrown if the user info is not a string', exception: InvalidArgumentException::class, - exceptionMessage: 'must be a string' + exceptionMessage: 'must be a string', ); } @@ -116,7 +116,7 @@ public function test_port() $this->assertSame( spl_object_id($obj), spl_object_id($obj->withPort(81)), - 'The object should be the same if the port is the same' + 'The object should be the same if the port is the same', ); $this->assertSame(8080, $this->getUri()->withPort(8080)->getPort(), 'The port should be 8080'); $this->assertNull($this->getUri()->withPort(null)->getPort(), 'The port should be null'); @@ -130,7 +130,7 @@ public function test_port() closure: fn() => new Uri('http://example.com:65536/foo/bar'), reason: 'parse_url returns false if the port is invalid', exception: InvalidArgumentException::class, - exceptionMessage: 'Unable to parse URI' + exceptionMessage: 'Unable to parse URI', ); } @@ -139,12 +139,12 @@ public function test_authority() $this->assertSame( 'user:pass@host:81', $this->getUri()->getAuthority(), - 'The authority should be user:pass@host:81' + 'The authority should be user:pass@host:81', ); $this->assertSame( '', $this->getUri()->withHost('')->getAuthority(), - 'The authority should be empty if the host is empty' + 'The authority should be empty if the host is empty', ); } @@ -157,33 +157,33 @@ public function test_path() $this->assertSame( spl_object_id($uri), spl_object_id($uri->withPath('/')), - 'The object should be the same if the path is the same' + 'The object should be the same if the path is the same', ); $this->assertSame('/path2', $uri->withPath('/path2')->getPath(), 'The path should be /path2'); $this->assertSame('/path/', $uri->withPath('/path/')->getPath(), 'The path should be /path'); $this->assertSame( '/path/bar', $this->getUri()->withPath('/bar')->getPath(), - 'The path should be /path/bar due to basePath' + 'The path should be /path/bar due to basePath', ); $this->checkException( closure: fn() => $this->getUri()->withPath(false), reason: 'Exception should be thrown if the path is not a string', exception: InvalidArgumentException::class, - exceptionMessage: 'must be a string' + exceptionMessage: 'must be a string', ); $this->assertSame('/path/foo/', $this->getUri()->withHost('')->withPath('///foo/')->getPath()); $this->assertSame('/foo/', $uri->withPath('foo/')->getPath()); $this->assertSame( '/path/foo/', $this->getUri()->withPath('/foo/')->getPath(), - 'withPath should consider the base path if it was given in constructor.' + 'withPath should consider the base path if it was given in constructor.', ); $this->assertSame( 'http://user:pass@host:81/path/foo/?query=string#fragment', - (string)$this->getUri()->withPath('/foo/'), - 'uri string should consider the base path if it was given in constructor.' + (string) $this->getUri()->withPath('/foo/'), + 'uri string should consider the base path if it was given in constructor.', ); } @@ -194,12 +194,12 @@ public function test_query() $this->assertSame( spl_object_id($obj), spl_object_id($obj->withQuery('query=string')), - 'The object should be the same if the query is the same' + 'The object should be the same if the query is the same', ); $this->assertSame( 'query=string2', $this->getUri()->withQuery('query=string2')->getQuery(), - 'The query should be query=string2' + 'The query should be query=string2', ); $this->assertSame('', $this->getUri()->withQuery('')->getQuery(), 'The query should be empty'); @@ -207,7 +207,7 @@ public function test_query() closure: fn() => $this->getUri()->withQuery(false), reason: 'parse_url returns false if the port is invalid', exception: InvalidArgumentException::class, - exceptionMessage: 'must be a string' + exceptionMessage: 'must be a string', ); } @@ -218,12 +218,12 @@ public function test_fragment() $this->assertSame( spl_object_id($obj), spl_object_id($obj->withFragment('fragment')), - 'The object should be the same if the fragment is the same' + 'The object should be the same if the fragment is the same', ); $this->assertSame( 'fragment2', $this->getUri()->withFragment('fragment2')->getFragment(), - 'The fragment should be fragment2' + 'The fragment should be fragment2', ); $this->assertSame('', $this->getUri()->withFragment('')->getFragment(), 'The fragment should be empty'); @@ -231,7 +231,7 @@ public function test_fragment() closure: fn() => $this->getUri()->withFragment(false), reason: 'Exception should be thrown if the fragment is not a string', exception: InvalidArgumentException::class, - exceptionMessage: 'must be a string' + exceptionMessage: 'must be a string', ); } @@ -240,26 +240,28 @@ public function test_toString() $this->assertSame( 'http://user:pass@host:81/path?query=string#fragment', $this->getUri()->__toString(), - 'The string should be http://user:pass@host:81/path?query=string#fragment' + 'The string should be http://user:pass@host:81/path?query=string#fragment', ); $this->assertSame( 'http://user:pass@host:81/path', - (string)new Uri('http://user:pass@host:81')->withPath('path'), - 'The string should be http://user:pass@host:81/path' + (string) new Uri('http://user:pass@host:81')->withPath('path'), + 'The string should be http://user:pass@host:81/path', ); $this->assertSame( 'http:/path', - (string)new Uri('http://host:81')->withHost('')->withPath('//path'), - 'The string should be http:/path' + (string) new Uri('http://host:81') + ->withHost('') + ->withPath('//path'), + 'The string should be http:/path', ); } public function test_customUrls() { foreach ($this->customUrls as $url) { - $this->assertSame($url, (string)new Uri($url), "The URL should be $url"); + $this->assertSame($url, (string) new Uri($url), "The URL should be $url"); } } } diff --git a/tests/Libs/UtilsTest.php b/tests/Libs/UtilsTest.php index e99dfbb9..5ffc1b77 100644 --- a/tests/Libs/UtilsTest.php +++ b/tests/Libs/UtilsTest.php @@ -42,12 +42,15 @@ public function test_flat_array_nested(): void 'items' => ['first', 'second'], ]; - self::assertSame([ - 'user.name' => 'John', - 'user.address.city' => 'New York', - 'items.0' => 'first', - 'items.1' => 'second', - ], flat_array($input)); + self::assertSame( + [ + 'user.name' => 'John', + 'user.address.city' => 'New York', + 'items.0' => 'first', + 'items.1' => 'second', + ], + flat_array($input), + ); } public function test_flat_array_prefix(): void @@ -64,13 +67,16 @@ public function test_flat_array_prefix(): void 'empty' => $emptyObject, ]; - self::assertSame([ - 'app::profile::name' => 'John', - 'app::settings::enabled' => false, - 'app::settings::count' => 0, - 'app::settings::tags' => [], - 'app::empty' => $emptyObject, - ], flat_array($input, 'app', '::')); + self::assertSame( + [ + 'app::profile::name' => 'John', + 'app::settings::enabled' => false, + 'app::settings::count' => 0, + 'app::settings::tags' => [], + 'app::empty' => $emptyObject, + ], + flat_array($input, 'app', '::'), + ); } public function test_validate_servers_valid(): void diff --git a/tests/Libs/VttConverterTest.php b/tests/Libs/VttConverterTest.php index 5dcc435a..5a621477 100644 --- a/tests/Libs/VttConverterTest.php +++ b/tests/Libs/VttConverterTest.php @@ -12,17 +12,17 @@ class VttConverterTest extends TestCase { protected function getData(): string { - return (string)Stream::make(__DIR__ . '/../Fixtures/subtitle.vtt', 'r'); + return (string) Stream::make(__DIR__ . '/../Fixtures/subtitle.vtt', 'r'); } protected function getExportedData(): string { - return (string)Stream::make(__DIR__ . '/../Fixtures/subtitle.exported.vtt', 'r'); + return (string) Stream::make(__DIR__ . '/../Fixtures/subtitle.exported.vtt', 'r'); } protected function getJSON(): array { - return json_decode((string)Stream::make(__DIR__ . '/../Fixtures/subtitle.json', 'r'), true); + return json_decode((string) Stream::make(__DIR__ . '/../Fixtures/subtitle.json', 'r'), true); } public function test_parse() @@ -33,7 +33,7 @@ public function test_parse() $this->assertEquals( trim(preg_replace('/\r\n|\r|\n/', "\r\n", $this->getExportedData())), trim(preg_replace('/\r\n|\r|\n/', "\r\n", VttConverter::export($data))), - 'Failed to export VTT file' + 'Failed to export VTT file', ); } @@ -42,12 +42,12 @@ public function test_exceptions() $this->checkException( closure: function () { $text = << 00:00:21 - test + 00:00:14 --> 00:00:21 + test - VTT; + VTT; return VttConverter::parse($text); }, diff --git a/tests/Libs/envFileTest.php b/tests/Libs/envFileTest.php index 35e1f936..9dbd263a 100644 --- a/tests/Libs/envFileTest.php +++ b/tests/Libs/envFileTest.php @@ -17,12 +17,12 @@ protected function setUp(): void parent::setUp(); $this->initTempDir(); $this->data = [ - "WS_TZ" => "Asia/Kuwait", - "WS_CRON_IMPORT" => "1", - "WS_CRON_EXPORT" => "0", - "WS_CRON_IMPORT_AT" => "16 */1 * * *", - "WS_CRON_EXPORT_AT" => "30 */3 * * *", - "WS_CRON_PUSH_AT" => "*/10 * * * *", + 'WS_TZ' => 'Asia/Kuwait', + 'WS_CRON_IMPORT' => '1', + 'WS_CRON_EXPORT' => '0', + 'WS_CRON_IMPORT_AT' => '16 */1 * * *', + 'WS_CRON_EXPORT_AT' => '30 */3 * * *', + 'WS_CRON_PUSH_AT' => '*/10 * * * *', ]; } @@ -32,7 +32,7 @@ public function test_constructor() closure: fn() => new EnvFile('nonexistent.env', create: false), reason: 'If file does not exist, and autoCreate is set to false, an exception should be thrown.', exception: RuntimeException::class, - exceptionMessage: "does not exist.", + exceptionMessage: 'does not exist.', ); $tmpFile = self::$tmpPath . '/watchstate_test.env'; @@ -54,13 +54,13 @@ public function test_get() $this->assertNull( $envFile->get('nonexistent_key'), - "The value of a nonexistent key should be NULL by default." + 'The value of a nonexistent key should be NULL by default.', ); $this->assertSame( 'default', $envFile->get('nonexistent', 'default'), - "The default value should be returned." + 'The default value should be returned.', ); } @@ -83,20 +83,20 @@ public function test_set() $this->assertNull( $envFile->get('nonexistent_key'), - "The value of a nonexistent key should be NULL by default." + 'The value of a nonexistent key should be NULL by default.', ); $this->assertSame( 'default', $envFile->get('nonexistent', 'default'), - "The default value should be returned." + 'The default value should be returned.', ); $envFile->set('new_key', true); $this->assertTrue( $envFile->get('new_key'), - "Due to unfortunate design, the value of key bool 'new_key' should be true. until we persist it." + "Due to unfortunate design, the value of key bool 'new_key' should be true. until we persist it.", ); $envFile->persist(); @@ -105,7 +105,7 @@ public function test_set() $this->assertSame( '1', $envFile->get('new_key'), - "The value of key 'new_key' should be '1' as we cast bool to string." + "The value of key 'new_key' should be '1' as we cast bool to string.", ); } @@ -141,7 +141,7 @@ public function test_persist() $envFile->persist(); $envFile = new EnvFile($tmpFile); - $this->assertSame($this->data, $envFile->getAll(), "The data should be persisted and retrieved correctly."); + $this->assertSame($this->data, $envFile->getAll(), 'The data should be persisted and retrieved correctly.'); } public function test_getAll() @@ -156,7 +156,7 @@ public function test_getAll() $envFile->persist(); $envFile = new EnvFile($tmpFile); - $this->assertSame($this->data, $envFile->getAll(), "The data should be persisted and retrieved correctly."); + $this->assertSame($this->data, $envFile->getAll(), 'The data should be persisted and retrieved correctly.'); } public function test_remove() diff --git a/tests/Listeners/ProcessProgressEventTest.php b/tests/Listeners/ProcessProgressEventTest.php index d4912f5a..f188c590 100644 --- a/tests/Listeners/ProcessProgressEventTest.php +++ b/tests/Listeners/ProcessProgressEventTest.php @@ -4,8 +4,8 @@ namespace Tests\Listeners; -use App\Backends\Jellyfin\Action\GetSessions; use App\Backends\Common\Response; +use App\Backends\Jellyfin\Action\GetSessions; use App\Libs\Container; use App\Libs\Database\DatabaseInterface as iDB; use App\Libs\Database\PackageMigrationFactory; diff --git a/tests/Listeners/ProcessWebhookEventTest.php b/tests/Listeners/ProcessWebhookEventTest.php index 698a26c6..eee6a6cc 100644 --- a/tests/Listeners/ProcessWebhookEventTest.php +++ b/tests/Listeners/ProcessWebhookEventTest.php @@ -50,7 +50,10 @@ public function test_processes(): void $logger = new Logger('test'); $client = $this->createMock(iClient::class); - $client->expects($this->once())->method('processRequest')->willReturnCallback($this->inspect(...)); + $client + ->expects($this->once()) + ->method('processRequest') + ->willReturnCallback($this->inspect(...)); $client->expects($this->once())->method('parseWebhook')->willReturn($this->movie()); $client->method('withContext')->willReturnSelf(); $client->method('setLogger')->willReturnSelf(); @@ -77,7 +80,10 @@ public function test_tasks_processes(): void $logger = new Logger('test'); $client = $this->createMock(iClient::class); - $client->expects($this->once())->method('processRequest')->willReturnCallback($this->inspect(...)); + $client + ->expects($this->once()) + ->method('processRequest') + ->willReturnCallback($this->inspect(...)); $client->expects($this->once())->method('parseWebhook')->willReturn($this->movie()); $client->method('withContext')->willReturnSelf(); $client->method('setLogger')->willReturnSelf(); @@ -103,12 +109,15 @@ public function test_raw_body(): void $logger = new Logger('test'); $client = $this->createMock(iClient::class); - $client->expects($this->once())->method('processRequest')->willReturnCallback(function (iRequest $request): iRequest { - self::assertNull($request->getParsedBody()); - self::assertSame('raw-body', (string) $request->getBody()); - - return $this->inspect($request); - }); + $client + ->expects($this->once()) + ->method('processRequest') + ->willReturnCallback(function (iRequest $request): iRequest { + self::assertNull($request->getParsedBody()); + self::assertSame('raw-body', (string) $request->getBody()); + + return $this->inspect($request); + }); $client->expects($this->once())->method('parseWebhook')->willReturn($this->movie()); $client->method('withContext')->willReturnSelf(); $client->method('setLogger')->willReturnSelf(); @@ -137,7 +146,10 @@ public function test_disabled_import_means_metadata_only(): void $logger = new Logger('test'); $client = $this->createMock(iClient::class); - $client->expects($this->once())->method('processRequest')->willReturnCallback($this->inspect(...)); + $client + ->expects($this->once()) + ->method('processRequest') + ->willReturnCallback($this->inspect(...)); $client->expects($this->once())->method('parseWebhook')->willReturn($this->movie()); $client->method('withContext')->willReturnSelf(); $client->method('setLogger')->willReturnSelf(); @@ -157,36 +169,43 @@ public function test_orders_full_before_metadata(): void Config::save('supported.plex', FakeBackendClient::class); FakeBackendClient::reset(); - file_put_contents((string) Config::get('backends_file'), Yaml::dump([ - 'metadata_first' => [ - 'type' => 'plex', - 'url' => 'https://example.invalid', - 'token' => 'token-1', - 'user' => '11111111', - 'uuid' => 's00000000000000000000000000000000000000p', - 'import' => [ - 'enabled' => false, - ], - 'export' => [ - 'enabled' => true, - ], - 'options' => [], - ], - 'full_second' => [ - 'type' => 'plex', - 'url' => 'https://example.invalid', - 'token' => 'token-2', - 'user' => '11111111', - 'uuid' => 's00000000000000000000000000000000000000p', - 'import' => [ - 'enabled' => true, + file_put_contents( + (string) Config::get('backends_file'), + Yaml::dump( + [ + 'metadata_first' => [ + 'type' => 'plex', + 'url' => 'https://example.invalid', + 'token' => 'token-1', + 'user' => '11111111', + 'uuid' => 's00000000000000000000000000000000000000p', + 'import' => [ + 'enabled' => false, + ], + 'export' => [ + 'enabled' => true, + ], + 'options' => [], + ], + 'full_second' => [ + 'type' => 'plex', + 'url' => 'https://example.invalid', + 'token' => 'token-2', + 'user' => '11111111', + 'uuid' => 's00000000000000000000000000000000000000p', + 'import' => [ + 'enabled' => true, + ], + 'export' => [ + 'enabled' => true, + ], + 'options' => [], + ], ], - 'export' => [ - 'enabled' => true, - ], - 'options' => [], - ], - ], 8, 2)); + 8, + 2, + ), + ); $cache = Container::get(CacheInterface::class); $logger = new Logger('test'); diff --git a/tests/Mappers/Import/MapperAbstract.php b/tests/Mappers/Import/MapperAbstract.php index 125c61ca..129d92b9 100644 --- a/tests/Mappers/Import/MapperAbstract.php +++ b/tests/Mappers/Import/MapperAbstract.php @@ -4,8 +4,8 @@ namespace Tests\Mappers\Import; -use App\Libs\Container; use App\Libs\Config; +use App\Libs\Container; use App\Libs\Database\DatabaseInterface as iDB; use App\Libs\Entity\StateEntity; use App\Libs\Entity\StateInterface as iState; @@ -23,26 +23,26 @@ use Psr\Log\LoggerInterface; use Psr\SimpleCache\CacheInterface; use Symfony\Component\Cache\Adapter\NullAdapter; +use Symfony\Component\Cache\Psr16Cache; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\NullOutput; use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Cache\Psr16Cache; abstract class MapperAbstract extends TestCase { protected array $testMovie = []; protected array $testEpisode = []; - protected ImportInterface|null $mapper = null; - protected iDB|null $db = null; - protected TestHandler|null $handler = null; + protected ?ImportInterface $mapper = null; + protected ?iDB $db = null; + protected ?TestHandler $handler = null; /** * @var LoggerInterface&Logger|null */ - protected LoggerInterface|null $logger = null; - protected OutputInterface|null $output = null; - protected InputInterface|null $input = null; + protected ?LoggerInterface $logger = null; + protected ?OutputInterface $output = null; + protected ?InputInterface $input = null; abstract protected function setupMapper(): ImportInterface; @@ -85,7 +85,7 @@ public function test_loadData_null_date_conditions(): void $this->assertSame( 0, $this->mapper->getObjectsCount(), - 'getObjectsCount() should return 0 as we have not modified or added new item yet.' + 'getObjectsCount() should return 0 as we have not modified or added new item yet.', ); $this->db->commit([$testEpisode, $testMovie]); @@ -95,7 +95,7 @@ public function test_loadData_null_date_conditions(): void $this->assertSame( 2, $this->mapper->getObjectsCount(), - 'getObjectsCount() should return 2 as we have added 2 items to the db.' + 'getObjectsCount() should return 2 as we have added 2 items to the db.', ); } @@ -114,7 +114,7 @@ public function test_loadData_date_conditions(): void $this->assertSame( 0, $this->mapper->getObjectsCount(), - 'getObjectsCount() should return 0 as we have not modified or added new item yet.' + 'getObjectsCount() should return 0 as we have not modified or added new item yet.', ); $this->db->commit([$testEpisode, $testMovie]); @@ -124,7 +124,7 @@ public function test_loadData_date_conditions(): void $this->assertSame( 1, $this->mapper->getObjectsCount(), - 'getObjectsCount() should return 1 as we have added 2 items to the db, but only 1 is newer than the date provided.' + 'getObjectsCount() should return 1 as we have added 2 items to the db, but only 1 is newer than the date provided.', ); } @@ -137,7 +137,7 @@ public function test_add_conditions(): void $this->assertCount( 0, $this->mapper, - 'Mapper should be empty as we have not modified or added new item yet.' + 'Mapper should be empty as we have not modified or added new item yet.', ); $this->mapper->add($testEpisode)->add($testMovie); @@ -145,7 +145,7 @@ public function test_add_conditions(): void $this->assertCount( 2, $this->mapper, - 'Mapper should have 2 items as we have added 2 items to the mapper.' + 'Mapper should have 2 items as we have added 2 items to the mapper.', ); $this->assertSame( @@ -154,14 +154,14 @@ public function test_add_conditions(): void iState::TYPE_EPISODE => ['added' => 1, 'updated' => 0, 'failed' => 0], ], $this->mapper->commit(), - 'commit() should return an array with the correct counts in format of [movie => [added, updated, failed],movie => [added, updated, failed]].' + 'commit() should return an array with the correct counts in format of [movie => [added, updated, failed],movie => [added, updated, failed]].', ); // -- assert 0 as we have committed the changes to the db, and the state should have been reset. $this->assertCount( 0, $this->mapper, - 'Mapper should be empty as we have committed the changes to the db, and the state should have been reset.' + 'Mapper should be empty as we have committed the changes to the db, and the state should have been reset.', ); $testEpisode->metadata['test_plex'][iState::COLUMN_GUIDS][Guid::GUID_TVRAGE] = '2'; @@ -176,7 +176,7 @@ public function test_add_conditions(): void iState::TYPE_EPISODE => ['added' => 0, 'updated' => 1, 'failed' => 0], ], $this->mapper->commit(), - 'commit() should return an array with the correct counts in format of [movie => [added, updated, failed],movie => [added, updated, failed]].' + 'commit() should return an array with the correct counts in format of [movie => [added, updated, failed],movie => [added, updated, failed]].', ); $this->assertCount(0, $this->mapper); @@ -198,8 +198,8 @@ public function test_update_watch_conditions(): void $this->assertSame(1, $obj->updated, 'updated should be 1'); $this->assertSame( 0, - (int)ag($obj->getMetadata($testMovie->via), iState::COLUMN_WATCHED), - 'metadata.test_plex.watched should be 0' + (int) ag($obj->getMetadata($testMovie->via), iState::COLUMN_WATCHED), + 'metadata.test_plex.watched should be 0', ); // -- update @@ -220,13 +220,13 @@ public function test_update_watch_conditions(): void $this->assertSame(5, $obj->updated, 'updated should be 5'); $this->assertSame( 1, - (int)ag($obj->getMetadata($testMovie->via), iState::COLUMN_WATCHED), - 'metadata.test_plex.watched should be 1' + (int) ag($obj->getMetadata($testMovie->via), iState::COLUMN_WATCHED), + 'metadata.test_plex.watched should be 1', ); $this->assertSame( 5, - (int)ag($obj->getMetadata($testMovie->via), iState::COLUMN_META_DATA_PLAYED_AT), - 'metadata.test_plex.played_at should be 5' + (int) ag($obj->getMetadata($testMovie->via), iState::COLUMN_META_DATA_PLAYED_AT), + 'metadata.test_plex.played_at should be 5', ); } @@ -248,8 +248,8 @@ public function test_update_unwatch_conditions(): void $this->assertSame($obj->updated, $obj->updated, 'updated should be 1'); $this->assertSame( 0, - (int)ag($obj->getMetadata($testMovie->via), iState::COLUMN_WATCHED), - 'metadata.test_plex.watched should be 0' + (int) ag($obj->getMetadata($testMovie->via), iState::COLUMN_WATCHED), + 'metadata.test_plex.watched should be 0', ); } @@ -289,7 +289,7 @@ public function test_unwatch_conflict_no_meta(): void $this->assertTrue( $obj->isWatched(), - 'If implemented correctly, Mapper call to shouldMarkAsUnplayed() will fail due to missing metadata, and the play state should not change.' + 'If implemented correctly, Mapper call to shouldMarkAsUnplayed() will fail due to missing metadata, and the play state should not change.', ); } @@ -321,7 +321,7 @@ public function test_unwatch_conflict_no_date(): void $this->assertTrue( $obj->isWatched(), - 'If implemented correctly, Mapper call to shouldMarkAsUnplayed() will fail due to missing date, and the play state should not change.' + 'If implemented correctly, Mapper call to shouldMarkAsUnplayed() will fail due to missing date, and the play state should not change.', ); } @@ -347,7 +347,7 @@ public function test_get_conditions(): void // -- expect null as we haven't added anything to db yet. $this->assertNull( $this->mapper->get($testEpisode), - 'get() should return null as we haven\'t added anything to db yet.' + 'get() should return null as we haven\'t added anything to db yet.', ); $this->db->commit([$testEpisode, $testMovie]); @@ -360,12 +360,12 @@ public function test_get_conditions(): void $this->assertSame( $testEpisode2->getAll(), $this->mapper->get($testEpisode)->getAll(), - 'get() should return the correct data for the episode.' + 'get() should return the correct data for the episode.', ); $this->assertSame( $testMovie2->getAll(), $this->mapper->get($testMovie)->getAll(), - 'get() should return the correct data for the movie.' + 'get() should return the correct data for the movie.', ); } @@ -416,18 +416,18 @@ public function test_get_fully_loaded_conditions(): void $this->assertNull( $this->mapper->get($testMovie), - 'get() should return null as load data was called with fully loaded.' + 'get() should return null as load data was called with fully loaded.', ); $this->assertNull( $this->mapper->get($testEpisode), - 'get() should return null as load data was called with fully loaded.' + 'get() should return null as load data was called with fully loaded.', ); $this->mapper->loadData(make_date($time - 1)); $this->assertInstanceOf( iState::class, $this->mapper->get($testEpisode), - 'get() should return the correct data as we called loadData with a date that is older than the updated date.' + 'get() should return the correct data as we called loadData with a date that is older than the updated date.', ); } @@ -447,7 +447,7 @@ public function test_commit_conditions(): void iState::TYPE_EPISODE => ['added' => 1, 'updated' => 0, 'failed' => 0], ], $insert, - 'commit() should return an array with the correct counts in format of [ movie => [ added => int, updated => int, failed => int ], episode => [ added => int, updated => int, failed => int ] ].' + 'commit() should return an array with the correct counts in format of [ movie => [ added => int, updated => int, failed => int ], episode => [ added => int, updated => int, failed => int ] ].', ); $testMovie->metadata['test_plex'][iState::COLUMN_GUIDS][Guid::GUID_ANIDB] = '1920'; @@ -465,7 +465,7 @@ public function test_commit_conditions(): void iState::TYPE_EPISODE => ['added' => 0, 'updated' => 1, 'failed' => 0], ], $updated, - 'commit() should return an array with the correct counts in format of [ movie => [ added => int, updated => int, failed => int ], episode => [ added => int, updated => int, failed => int ] ].' + 'commit() should return an array with the correct counts in format of [ movie => [ added => int, updated => int, failed => int ], episode => [ added => int, updated => int, failed => int ] ].', ); } @@ -476,12 +476,12 @@ public function test_remove_conditions(): void $this->assertFalse( $this->mapper->remove($testEpisode), - 'remove() should return false as as the object does not yet exists in db.' + 'remove() should return false as as the object does not yet exists in db.', ); $this->mapper->add($testEpisode)->add($testMovie)->commit(); $this->assertTrue( $this->mapper->remove($testEpisode), - 'remove() should return true as as the object exists in db and was removed.' + 'remove() should return true as as the object exists in db and was removed.', ); } @@ -492,12 +492,12 @@ public function test_has_conditions(): void $testEpisode = new StateEntity($this->testEpisode); $this->assertFalse( $this->mapper->has($testEpisode), - 'has() should return false as the object does not exists db yet.' + 'has() should return false as the object does not exists db yet.', ); $this->db->commit([$testEpisode]); $this->assertTrue( $this->mapper->has($testEpisode), - 'has() should return true as the object exists in db.' + 'has() should return true as the object exists in db.', ); } @@ -515,12 +515,12 @@ public function test_has_fully_loaded_conditions(): void $this->db->commit([$testEpisode, $testMovie]); $this->assertFalse( $this->mapper->has($testEpisode), - 'has() should return false as loadData was called before inserting the records into db.' + 'has() should return false as loadData was called before inserting the records into db.', ); $this->mapper->loadData(make_date($time - 1)); $this->assertTrue( $this->mapper->has($testEpisode), - 'has() should return true as loadData was called with a date that is older than the entity updated' + 'has() should return true as loadData was called with a date that is older than the entity updated', ); } @@ -546,7 +546,7 @@ public function test_getObjects_conditions(): void $this->assertCount( 0, $this->mapper->getObjects(), - 'getObjects() should return 0 as we have not added items yet.' + 'getObjects() should return 0 as we have not added items yet.', ); $this->db->commit([$testMovie, $testEpisode]); @@ -557,7 +557,7 @@ public function test_getObjects_conditions(): void $this->assertCount( 0, $this->mapper->reset()->getObjects(), - 'getObjects() should return 0 as we have called reset on the mapper.' + 'getObjects() should return 0 as we have called reset on the mapper.', ); } @@ -601,7 +601,7 @@ public function test_mapper_add_no_episode(): void $this->assertSame( 0, $this->mapper->getObjectsCount(), - "getObjectsCount() should return 0 as as the episode number is 0 and shouldn't be processed." + "getObjectsCount() should return 0 as as the episode number is 0 and shouldn't be processed.", ); } @@ -611,14 +611,12 @@ public function test_mapper_setOptions() $mapper->setOptions([]); $this->assertEmpty( $mapper->getOptions(), - 'getOptions() should return an empty array as we have not set any options yet.' + 'getOptions() should return an empty array as we have not set any options yet.', ); $mapper->setOptions(['test' => 'test']); - $this->assertSame(['test' => 'test'], - $mapper->getOptions(), - 'getOptions() should return the options we have set.'); + $this->assertSame(['test' => 'test'], $mapper->getOptions(), 'getOptions() should return the options we have set.'); } public function test_mapper_withOptions() @@ -629,25 +627,22 @@ public function test_mapper_withOptions() $this->assertNotSame( spl_object_hash($mapper), spl_object_hash($mapper->withOptions(['test' => 'test'])), - 'withOptions() Any mutation should return a new object. and the spl_object_hash() should not be the same.' + 'withOptions() Any mutation should return a new object. and the spl_object_hash() should not be the same.', ); $this->assertNotSame( spl_object_id($mapper), spl_object_hash($mapper->withOptions(['test' => 'test'])), - 'withOptions() Any mutation should return a new object. and the spl_object_id() should not be the same.' + 'withOptions() Any mutation should return a new object. and the spl_object_id() should not be the same.', ); $this->assertEmpty( $mapper->getOptions(), - 'getOptions() should return an empty array as we have not set any options yet.' + 'getOptions() should return an empty array as we have not set any options yet.', ); $mapper = $mapper->withOptions(['test' => 'test']); - $this->assertSame(['test' => 'test'], - $mapper->getOptions(), - 'getOptions() should return the options we have set.'); + $this->assertSame(['test' => 'test'], $mapper->getOptions(), 'getOptions() should return the options we have set.'); } - } diff --git a/tests/Model/Base/Transformers/TransformersTest.php b/tests/Model/Base/Transformers/TransformersTest.php index 5ef16ed0..7c772520 100644 --- a/tests/Model/Base/Transformers/TransformersTest.php +++ b/tests/Model/Base/Transformers/TransformersTest.php @@ -176,5 +176,4 @@ public function test_serialize_transformer_roundtrip(): void $decoded = $transformer(TransformType::DECODE, $encoded); $this->assertSame($payload, $decoded); } - } diff --git a/tests/Support/FakeBackendClient.php b/tests/Support/FakeBackendClient.php index f280c1ce..aa2f0c84 100644 --- a/tests/Support/FakeBackendClient.php +++ b/tests/Support/FakeBackendClient.php @@ -189,10 +189,13 @@ public function backup(iImport $mapper, ?iStream $writer = null, array $opts = [ && false === (bool) ag($opts, Options::DRY_RUN, false) && true !== (self::$skipBackupWrites[self::exportKey($context->userContext->name, $context->backendName)] ?? false) ) { - $payload = json_encode([ - 'backend' => $context->backendName, - 'user' => $context->userContext->name, - ], JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); + $payload = json_encode( + [ + 'backend' => $context->backendName, + 'user' => $context->userContext->name, + ], + JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE, + ); $writer->write($payload . ','); } @@ -295,8 +298,9 @@ public function getMetadata(string|int $id, array $opts = []): array 'id' => (string) $id, ]); - $response = self::$metadataResponses[self::metadataKey($context->userContext->name, $context->backendName, $id)] - ?? ['Id' => (string) $id]; + $response = self::$metadataResponses[self::metadataKey($context->userContext->name, $context->backendName, $id)] ?? [ + 'Id' => (string) $id, + ]; if ($response instanceof Throwable) { throw $response; diff --git a/tests/Support/RequestResponseTrait.php b/tests/Support/RequestResponseTrait.php index aadf10d6..9ef5fc9e 100644 --- a/tests/Support/RequestResponseTrait.php +++ b/tests/Support/RequestResponseTrait.php @@ -42,8 +42,7 @@ protected function getRequest( array $cookies = [], array $files = [], array $server = [], - iStream|null $body = null - + ?iStream $body = null, ): iRequest { $factory = new Psr17Factory(); $creator = new ServerRequestCreator($factory, $factory, $factory, $factory); @@ -58,10 +57,14 @@ protected function getRequest( 'SERVER_PORT' => 80, 'HTTP_USER_AGENT' => 'WatchState/0.0', ], $server), - headers: array_replace_recursive($server, [ - 'Accept' => 'application/json', - 'Authorization' => 'Bearer api_test_token', - ], $headers), + headers: array_replace_recursive( + $server, + [ + 'Accept' => 'application/json', + 'Authorization' => 'Bearer api_test_token', + ], + $headers, + ), cookie: $cookies, get: $query, post: $post, @@ -69,5 +72,4 @@ protected function getRequest( body: $body, ); } - } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 7e139724..80555e8c 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -18,4 +18,3 @@ } require __DIR__ . '/../vendor/autoload.php'; - diff --git a/tests/fixtures/Prune/AnotherPruner.php b/tests/fixtures/Prune/AnotherPruner.php index 56d85fff..f1fe70d8 100644 --- a/tests/fixtures/Prune/AnotherPruner.php +++ b/tests/fixtures/Prune/AnotherPruner.php @@ -9,7 +9,5 @@ #[Prune(name: 'Another Pruner', cron: '0 5 * * *', desc: 'Another test pruner.', enabled: false)] final class AnotherPruner { - public function __invoke(bool $execute): void - { - } + public function __invoke(bool $execute): void {} }