diff --git a/composer.json b/composer.json index b54f559cf..cdaa347c3 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "laravel/serializable-closure": "^1.2.2", "nikic/iter": "^2.2", "nikic/php-parser": "^4.15.2", - "paragonie/pharaoh": "^0.6", + "paragonie/constant_time_encoding": "^2.6", "phpdocumentor/reflection-docblock": "^5.3", "psr/log": "^3.0", "seld/jsonlint": "^1.9", diff --git a/composer.lock b/composer.lock index 39670c1c3..a841b4a1b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f79c77b813a392137ca4f67387860c2e", + "content-hash": "e5524063b58e7a1820e5ce6c164a41b1", "packages": [ { "name": "amphp/amp", @@ -174,16 +174,16 @@ }, { "name": "amphp/parallel", - "version": "v1.4.1", + "version": "v1.4.2", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "fbc128383c1ffb3823866f71b88d8c4722a25ce9" + "reference": "75853e1623efa5aa5e65e986ec9a97db573a5267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/fbc128383c1ffb3823866f71b88d8c4722a25ce9", - "reference": "fbc128383c1ffb3823866f71b88d8c4722a25ce9", + "url": "https://api.github.com/repos/amphp/parallel/zipball/75853e1623efa5aa5e65e986ec9a97db573a5267", + "reference": "75853e1623efa5aa5e65e986ec9a97db573a5267", "shasum": "" }, "require": { @@ -236,7 +236,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v1.4.1" + "source": "https://github.com/amphp/parallel/tree/v1.4.2" }, "funding": [ { @@ -244,7 +244,7 @@ "type": "github" } ], - "time": "2021-10-25T19:16:02+00:00" + "time": "2022-12-30T00:21:42+00:00" }, { "name": "amphp/parallel-functions", @@ -306,29 +306,30 @@ }, { "name": "amphp/parser", - "version": "v1.0.0", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/amphp/parser.git", - "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1" + "reference": "ff1de4144726c5dad5fab97f66692ebe8de3e151" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1", - "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1", + "url": "https://api.github.com/repos/amphp/parser/zipball/ff1de4144726c5dad5fab97f66692ebe8de3e151", + "reference": "ff1de4144726c5dad5fab97f66692ebe8de3e151", "shasum": "" }, "require": { - "php": ">=7" + "php": ">=7.4" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "amphp/php-cs-fixer-config": "^2", + "phpunit/phpunit": "^9", + "psalm/phar": "^5.4" }, "type": "library", "autoload": { "psr-4": { - "Amp\\Parser\\": "lib" + "Amp\\Parser\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -336,13 +337,13 @@ "MIT" ], "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], "description": "A generator parser to make streaming parsers simple.", @@ -355,9 +356,15 @@ ], "support": { "issues": "https://github.com/amphp/parser/issues", - "source": "https://github.com/amphp/parser/tree/is-valid" + "source": "https://github.com/amphp/parser/tree/v1.1.0" }, - "time": "2017-06-06T05:29:10+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2022-12-30T18:08:47+00:00" }, { "name": "amphp/process", @@ -770,16 +777,16 @@ }, { "name": "fidry/console", - "version": "0.5.3", + "version": "0.5.5", "source": { "type": "git", "url": "https://github.com/theofidry/console.git", - "reference": "16d1993ecde7c4db2b3fe46896e491b079188dc5" + "reference": "bc1fe03f600c63f12ec0a39c6b746c1a1fb77bf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/console/zipball/16d1993ecde7c4db2b3fe46896e491b079188dc5", - "reference": "16d1993ecde7c4db2b3fe46896e491b079188dc5", + "url": "https://api.github.com/repos/theofidry/console/zipball/bc1fe03f600c63f12ec0a39c6b746c1a1fb77bf7", + "reference": "bc1fe03f600c63f12ec0a39c6b746c1a1fb77bf7", "shasum": "" }, "require": { @@ -835,9 +842,14 @@ } ], "description": "Library to create CLI applications", + "keywords": [ + "cli", + "console", + "symfony" + ], "support": { "issues": "https://github.com/theofidry/console/issues", - "source": "https://github.com/theofidry/console/tree/0.5.3" + "source": "https://github.com/theofidry/console/tree/0.5.5" }, "funding": [ { @@ -845,7 +857,7 @@ "type": "github" } ], - "time": "2022-11-03T07:52:24+00:00" + "time": "2022-12-18T10:49:34+00:00" }, { "name": "humbug/php-scoper", @@ -931,16 +943,16 @@ }, { "name": "jetbrains/phpstorm-stubs", - "version": "v2022.2", + "version": "v2022.3", "source": { "type": "git", "url": "https://github.com/JetBrains/phpstorm-stubs.git", - "reference": "01006d9854679672fc8b85c6d5063ea6f25226ac" + "reference": "6b568c153cea002dc6fad96285c3063d07cab18d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/01006d9854679672fc8b85c6d5063ea6f25226ac", - "reference": "01006d9854679672fc8b85c6d5063ea6f25226ac", + "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/6b568c153cea002dc6fad96285c3063d07cab18d", + "reference": "6b568c153cea002dc6fad96285c3063d07cab18d", "shasum": "" }, "require-dev": { @@ -973,9 +985,9 @@ "type" ], "support": { - "source": "https://github.com/JetBrains/phpstorm-stubs/tree/v2022.2" + "source": "https://github.com/JetBrains/phpstorm-stubs/tree/v2022.3" }, - "time": "2022-07-25T13:18:36+00:00" + "time": "2022-10-17T09:21:37+00:00" }, { "name": "justinrainbow/json-schema", @@ -1049,16 +1061,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.2.2", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", - "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", "shasum": "" }, "require": { @@ -1105,7 +1117,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-09-08T13:45:54+00:00" + "time": "2023-01-30T18:31:20+00:00" }, { "name": "nikic/iter", @@ -1159,16 +1171,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.2", + "version": "v4.15.3", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", - "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", "shasum": "" }, "require": { @@ -1209,9 +1221,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" }, - "time": "2022-11-12T15:38:23+00:00" + "time": "2023-01-16T22:05:37+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -1280,66 +1292,6 @@ }, "time": "2022-06-14T06:56:20+00:00" }, - { - "name": "paragonie/pharaoh", - "version": "v0.6.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/pharaoh.git", - "reference": "d33976a45429edc9c4282e7b0f2b6c3a3a5783fc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/pharaoh/zipball/d33976a45429edc9c4282e7b0f2b6c3a3a5783fc", - "reference": "d33976a45429edc9c4282e7b0f2b6c3a3a5783fc", - "shasum": "" - }, - "require": { - "paragonie/constant_time_encoding": "^2", - "paragonie/sodium_compat": "^1.3", - "php": "^7|^8", - "ulrichsg/getopt-php": "^3" - }, - "require-dev": { - "vimeo/psalm": "^1|^2|^3" - }, - "bin": [ - "pharaoh" - ], - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\Pharaoh\\": "src/Pharaoh/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Scott Arciszewski", - "email": "scott@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Developer" - } - ], - "description": "Compare PHARs from the Command Line", - "keywords": [ - "auditing", - "diff", - "phar", - "security", - "tool", - "utility" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/pharaoh/issues", - "source": "https://github.com/paragonie/pharaoh" - }, - "time": "2020-12-03T04:57:05+00:00" - }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -1724,16 +1676,16 @@ }, { "name": "symfony/console", - "version": "v6.1.7", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815" + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a1282bd0c096e0bdb8800b104177e2ce404d8815", - "reference": "a1282bd0c096e0bdb8800b104177e2ce404d8815", + "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", "shasum": "" }, "require": { @@ -1800,7 +1752,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.7" + "source": "https://github.com/symfony/console/tree/v6.2.7" }, "funding": [ { @@ -1816,20 +1768,20 @@ "type": "tidelift" } ], - "time": "2022-10-26T21:42:49+00:00" + "time": "2023-02-25T17:00:03+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918" + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", - "reference": "07f1b9cc2ffee6aaafcf4b710fbc38ff736bd918", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", "shasum": "" }, "require": { @@ -1838,7 +1790,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -1867,7 +1819,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -1883,20 +1835,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-03-01T10:25:55+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448" + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/02ff5eea2f453731cfbc6bc215e456b781480448", - "reference": "02ff5eea2f453731cfbc6bc215e456b781480448", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", "shasum": "" }, "require": { @@ -1909,7 +1861,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -1946,7 +1898,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" }, "funding": [ { @@ -1962,20 +1914,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/filesystem", - "version": "v6.1.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4d216a2beef096edf040a070117c39ca2abce307" + "reference": "82b6c62b959f642d000456f08c6d219d749215b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d216a2beef096edf040a070117c39ca2abce307", - "reference": "4d216a2beef096edf040a070117c39ca2abce307", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", + "reference": "82b6c62b959f642d000456f08c6d219d749215b3", "shasum": "" }, "require": { @@ -2009,7 +1961,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.1.5" + "source": "https://github.com/symfony/filesystem/tree/v6.2.7" }, "funding": [ { @@ -2025,20 +1977,20 @@ "type": "tidelift" } ], - "time": "2022-09-21T20:29:40+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/finder", - "version": "v6.1.3", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", "shasum": "" }, "require": { @@ -2073,7 +2025,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.3" + "source": "https://github.com/symfony/finder/tree/v6.2.7" }, "funding": [ { @@ -2089,7 +2041,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "symfony/polyfill-ctype", @@ -2423,16 +2375,16 @@ }, { "name": "symfony/process", - "version": "v6.1.3", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "url": "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902", "shasum": "" }, "require": { @@ -2464,7 +2416,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.1.3" + "source": "https://github.com/symfony/process/tree/v6.2.7" }, "funding": [ { @@ -2480,20 +2432,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.1.1", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239" + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/925e713fe8fcacf6bc05e936edd8dd5441a21239", - "reference": "925e713fe8fcacf6bc05e936edd8dd5441a21239", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", "shasum": "" }, "require": { @@ -2509,7 +2461,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.1-dev" + "dev-main": "3.3-dev" }, "thanks": { "name": "symfony/contracts", @@ -2549,7 +2501,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.1.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -2565,20 +2517,20 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:18:58+00:00" + "time": "2023-03-01T10:32:47+00:00" }, { "name": "symfony/string", - "version": "v6.1.7", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "823f143370880efcbdfa2dbca946b3358c4707e5" + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/823f143370880efcbdfa2dbca946b3358c4707e5", - "reference": "823f143370880efcbdfa2dbca946b3358c4707e5", + "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", "shasum": "" }, "require": { @@ -2594,6 +2546,7 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -2634,7 +2587,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.7" + "source": "https://github.com/symfony/string/tree/v6.2.7" }, "funding": [ { @@ -2650,20 +2603,20 @@ "type": "tidelift" } ], - "time": "2022-10-10T09:34:31+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.1.6", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f" + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/0f0adde127f24548e23cbde83bcaeadc491c551f", - "reference": "0f0adde127f24548e23cbde83bcaeadc491c551f", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", "shasum": "" }, "require": { @@ -2722,7 +2675,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.1.6" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.7" }, "funding": [ { @@ -2738,7 +2691,7 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:04:03+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "thecodingmachine/safe", @@ -2879,56 +2832,6 @@ }, "time": "2022-10-07T14:02:17+00:00" }, - { - "name": "ulrichsg/getopt-php", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/getopt-php/getopt-php.git", - "reference": "9121d7c2c51a6a59ee407c49a13b4d8cfae71075" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/getopt-php/getopt-php/zipball/9121d7c2c51a6a59ee407c49a13b4d8cfae71075", - "reference": "9121d7c2c51a6a59ee407c49a13b4d8cfae71075", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8", - "squizlabs/php_codesniffer": "^2.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "GetOpt\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ulrich Schmidt-Goertz", - "email": "ulrich@schmidt-goertz.de" - }, - { - "name": "Thomas Flori", - "email": "thflori@gmail.com" - } - ], - "description": "Command line arguments parser for PHP 5.4 - 7.3", - "homepage": "http://getopt-php.github.io/getopt-php", - "support": { - "issues": "https://github.com/getopt-php/getopt-php/issues", - "source": "https://github.com/getopt-php/getopt-php/tree/v3.4.0" - }, - "time": "2020-07-14T06:09:04+00:00" - }, { "name": "webmozart/assert", "version": "1.11.0", @@ -3048,30 +2951,30 @@ }, { "name": "doctrine/instantiator", - "version": "1.4.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", - "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.22" + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" }, "type": "library", "autoload": { @@ -3098,7 +3001,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.1" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -3114,39 +3017,43 @@ "type": "tidelift" } ], - "time": "2022-03-03T08:28:38+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "ergebnis/composer-normalize", - "version": "2.29.0", + "version": "2.30.2", "source": { "type": "git", "url": "https://github.com/ergebnis/composer-normalize.git", - "reference": "fad0e99b16c625817a5bfd910e4d7e31999c53b2" + "reference": "54d58f7dc5517ae183ac2c06f1dcbd616876673c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/fad0e99b16c625817a5bfd910e4d7e31999c53b2", - "reference": "fad0e99b16c625817a5bfd910e4d7e31999c53b2", + "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/54d58f7dc5517ae183ac2c06f1dcbd616876673c", + "reference": "54d58f7dc5517ae183ac2c06f1dcbd616876673c", "shasum": "" }, "require": { "composer-plugin-api": "^2.0.0", - "ergebnis/json-normalizer": "~2.1.0", + "ergebnis/json": "^1.0.1", + "ergebnis/json-normalizer": "^4.0.2", "ergebnis/json-printer": "^3.3.0", + "ext-json": "*", "justinrainbow/json-schema": "^5.2.12", "localheinz/diff": "^1.1.1", - "php": "^8.0" + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "composer/composer": "^2.4.4", + "composer/composer": "^2.5.1", "ergebnis/license": "^2.1.0", - "ergebnis/php-cs-fixer-config": "^5.0.0", - "fakerphp/faker": "^1.20.0", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "~0.18.3", + "ergebnis/php-cs-fixer-config": "^5.3.1", + "fakerphp/faker": "^1.21.0", + "infection/infection": "~0.26.19", + "phpunit/phpunit": "^9.6.3", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.15.18", "symfony/filesystem": "^6.0.13", - "vimeo/psalm": "^5.0.0" + "vimeo/psalm": "^5.7.7" }, "type": "composer-plugin", "extra": { @@ -3183,38 +3090,109 @@ "issues": "https://github.com/ergebnis/composer-normalize/issues", "source": "https://github.com/ergebnis/composer-normalize" }, - "time": "2022-12-01T11:51:19+00:00" + "time": "2023-02-27T17:23:42+00:00" + }, + { + "name": "ergebnis/json", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json.git", + "reference": "d66ea30060856d0729a4aa319a02752519ca63a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json/zipball/d66ea30060856d0729a4aa319a02752519ca63a0", + "reference": "d66ea30060856d0729a4aa319a02752519ca63a0", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.29.0", + "ergebnis/data-provider": "^1.2.0", + "ergebnis/license": "^2.1.0", + "ergebnis/php-cs-fixer-config": "^5.0.0", + "ergebnis/phpstan-rules": "^1.0.0", + "fakerphp/faker": "^1.20.0", + "infection/infection": "~0.26.16", + "phpunit/phpunit": "^9.5.27", + "psalm/plugin-phpunit": "~0.18.4", + "vimeo/psalm": "^5.1.0" + }, + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\Json\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Andreas Möller", + "email": "am@localheinz.com" + } + ], + "description": "Provides a Json value object for representing a valid JSON string.", + "homepage": "https://github.com/ergebnis/json", + "keywords": [ + "json" + ], + "support": { + "issues": "https://github.com/ergebnis/json/issues", + "source": "https://github.com/ergebnis/json" + }, + "time": "2022-12-10T22:38:50+00:00" }, { "name": "ergebnis/json-normalizer", - "version": "2.1.0", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/ergebnis/json-normalizer.git", - "reference": "2039eb11131a243b9204bf51219baa08935e6b1d" + "reference": "15df99fbf454da13b31008795a7397d3d7d73bb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/2039eb11131a243b9204bf51219baa08935e6b1d", - "reference": "2039eb11131a243b9204bf51219baa08935e6b1d", + "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/15df99fbf454da13b31008795a7397d3d7d73bb4", + "reference": "15df99fbf454da13b31008795a7397d3d7d73bb4", "shasum": "" }, "require": { - "ergebnis/json-printer": "^3.2.0", - "ergebnis/json-schema-validator": "^2.0.0", + "ergebnis/json": "^1.0.1", + "ergebnis/json-pointer": "^3.2.0", + "ergebnis/json-printer": "^3.3.0", + "ergebnis/json-schema-validator": "^4.0.0", "ext-json": "*", - "justinrainbow/json-schema": "^5.2.11", - "php": "^7.4 || ^8.0" + "justinrainbow/json-schema": "^5.2.12", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" }, "require-dev": { - "ergebnis/data-provider": "^1.0.0", - "ergebnis/license": "^1.2.0", - "ergebnis/php-cs-fixer-config": "^3.4.0", - "fakerphp/faker": "^1.17.0", - "infection/infection": "~0.25.5", - "phpunit/phpunit": "^9.5.11", - "psalm/plugin-phpunit": "~0.16.1", - "vimeo/psalm": "^4.17.0" + "composer/semver": "^3.2.1", + "ergebnis/data-provider": "^1.3.0", + "ergebnis/license": "^2.1.0", + "ergebnis/php-cs-fixer-config": "^5.3.1", + "fakerphp/faker": "^1.21.0", + "infection/infection": "~0.26.19", + "phpunit/phpunit": "^9.6.3", + "psalm/plugin-phpunit": "~0.18.4", + "rector/rector": "~0.15.18", + "symfony/filesystem": "^6.0.19", + "symfony/finder": "^6.0.19", + "vimeo/psalm": "^5.7.7" + }, + "suggest": { + "composer/semver": "If you want to use ComposerJsonNormalizer or VersionConstraintNormalizer" }, "type": "library", "autoload": { @@ -3242,13 +3220,70 @@ "issues": "https://github.com/ergebnis/json-normalizer/issues", "source": "https://github.com/ergebnis/json-normalizer" }, - "funding": [ + "time": "2023-02-27T17:17:30+00:00" + }, + { + "name": "ergebnis/json-pointer", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/ergebnis/json-pointer.git", + "reference": "861516ff5afa1aa8905fdf3361315909523a1bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/861516ff5afa1aa8905fdf3361315909523a1bf8", + "reference": "861516ff5afa1aa8905fdf3361315909523a1bf8", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.28.3", + "ergebnis/data-provider": "^1.2.0", + "ergebnis/license": "^2.1.0", + "ergebnis/php-cs-fixer-config": "^5.0.0", + "fakerphp/faker": "^1.20.0", + "infection/infection": "~0.26.16", + "phpunit/phpunit": "^9.5.26", + "psalm/plugin-phpunit": "~0.18.3", + "vimeo/psalm": "^4.30" + }, + "type": "library", + "extra": { + "composer-normalize": { + "indent-size": 2, + "indent-style": "space" + } + }, + "autoload": { + "psr-4": { + "Ergebnis\\Json\\Pointer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { - "url": "https://github.com/localheinz", - "type": "github" + "name": "Andreas Möller", + "email": "am@localheinz.com" } ], - "time": "2022-01-04T11:19:55+00:00" + "description": "Provides JSON pointer as a value object.", + "homepage": "https://github.com/ergebnis/json-pointer", + "keywords": [ + "RFC6901", + "json", + "pointer" + ], + "support": { + "issues": "https://github.com/ergebnis/json-pointer/issues", + "source": "https://github.com/ergebnis/json-pointer" + }, + "time": "2022-11-28T17:03:31+00:00" }, { "name": "ergebnis/json-printer", @@ -3309,33 +3344,35 @@ }, { "name": "ergebnis/json-schema-validator", - "version": "2.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json-schema-validator.git", - "reference": "dacd8a47c1cc2c426ec71e952da3609ebe901fac" + "reference": "a6166272ac5691a9bc791f185841e5f92a6d4723" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/dacd8a47c1cc2c426ec71e952da3609ebe901fac", - "reference": "dacd8a47c1cc2c426ec71e952da3609ebe901fac", + "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/a6166272ac5691a9bc791f185841e5f92a6d4723", + "reference": "a6166272ac5691a9bc791f185841e5f92a6d4723", "shasum": "" }, "require": { + "ergebnis/json": "^1.0.0", + "ergebnis/json-pointer": "^3.2.0", "ext-json": "*", - "justinrainbow/json-schema": "^5.2.10", - "php": "^7.4 || ^8.0" + "justinrainbow/json-schema": "^5.2.12", + "php": "^8.0" }, "require-dev": { - "ergebnis/composer-normalize": "^2.18.0", - "ergebnis/data-provider": "^1.0.0", - "ergebnis/license": "^1.1.0", - "ergebnis/php-cs-fixer-config": "~3.4.0", - "fakerphp/faker": "^1.17.0", - "infection/infection": "~0.25.3", - "phpunit/phpunit": "~9.5.10", - "psalm/plugin-phpunit": "~0.16.1", - "vimeo/psalm": "^4.15.0" + "ergebnis/composer-normalize": "^2.21.0", + "ergebnis/data-provider": "^1.2.0", + "ergebnis/license": "^2.1.0", + "ergebnis/php-cs-fixer-config": "~5.0.0", + "fakerphp/faker": "^1.20.0", + "infection/infection": "~0.26.16", + "phpunit/phpunit": "~9.5.27", + "psalm/plugin-phpunit": "~0.18.4", + "vimeo/psalm": "^5.1.0" }, "type": "library", "extra": { @@ -3370,13 +3407,7 @@ "issues": "https://github.com/ergebnis/json-schema-validator/issues", "source": "https://github.com/ergebnis/json-schema-validator" }, - "funding": [ - { - "url": "https://github.com/localheinz", - "type": "github" - } - ], - "time": "2021-12-13T16:54:56+00:00" + "time": "2022-12-10T14:50:15+00:00" }, { "name": "fidry/makefile", @@ -3731,20 +3762,20 @@ }, { "name": "phpspec/prophecy", - "version": "v1.16.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359" + "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be8cac52a0827776ff9ccda8c381ac5b71aeb359", - "reference": "be8cac52a0827776ff9ccda8c381ac5b71aeb359", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/15873c65b207b07765dbc3c95d20fdf4a320cbe2", + "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", + "doctrine/instantiator": "^1.2 || ^2.0", "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", @@ -3752,6 +3783,7 @@ }, "require-dev": { "phpspec/phpspec": "^6.0 || ^7.0", + "phpstan/phpstan": "^1.9", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", @@ -3792,9 +3824,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.16.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.17.0" }, - "time": "2022-11-29T15:06:56+00:00" + "time": "2023-02-02T15:41:36+00:00" }, { "name": "phpspec/prophecy-phpunit", @@ -3850,23 +3882,23 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.19", + "version": "9.2.25", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" + "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", - "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -3915,7 +3947,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" }, "funding": [ { @@ -3923,7 +3955,7 @@ "type": "github" } ], - "time": "2022-11-18T07:47:47+00:00" + "time": "2023-02-25T05:32:00+00:00" }, { "name": "phpunit/php-file-iterator", @@ -4168,20 +4200,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.26", + "version": "9.6.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", - "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -4219,7 +4251,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -4250,7 +4282,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" }, "funding": [ { @@ -4266,7 +4298,7 @@ "type": "tidelift" } ], - "time": "2022-10-28T06:00:21+00:00" + "time": "2023-02-27T13:06:37+00:00" }, { "name": "sebastian/cli-parser", @@ -4634,16 +4666,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -4685,7 +4717,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -4693,7 +4725,7 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", @@ -5007,16 +5039,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -5055,10 +5087,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -5066,7 +5098,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -5125,16 +5157,16 @@ }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -5169,7 +5201,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -5177,7 +5209,7 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -5234,16 +5266,16 @@ }, { "name": "symfony/phpunit-bridge", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "d759e5372de414bef53a688c7aa7e240e4fd8aa2" + "reference": "56965fae0b6b8d271015990eff5240ffff02e185" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/d759e5372de414bef53a688c7aa7e240e4fd8aa2", - "reference": "d759e5372de414bef53a688c7aa7e240e4fd8aa2", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/56965fae0b6b8d271015990eff5240ffff02e185", + "reference": "56965fae0b6b8d271015990eff5240ffff02e185", "shasum": "" }, "require": { @@ -5297,7 +5329,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.5" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.7" }, "funding": [ { @@ -5313,20 +5345,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "symfony/yaml", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", "shasum": "" }, "require": { @@ -5371,7 +5403,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.5" + "source": "https://github.com/symfony/yaml/tree/v6.2.7" }, "funding": [ { @@ -5387,7 +5419,7 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "theseer/tokenizer", diff --git a/src/PharInfo/PharDiff.php b/src/PharInfo/PharDiff.php index 15d81a01a..0fa699693 100644 --- a/src/PharInfo/PharDiff.php +++ b/src/PharInfo/PharDiff.php @@ -14,7 +14,7 @@ namespace KevinGH\Box\PharInfo; -use ParagonIE\Pharaoh\PharDiff as ParagoniePharDiff; +use KevinGH\Box\Pharaoh\PharDiff as ParagoniePharDiff; use SplFileInfo; use Symfony\Component\Finder\Finder; use Symfony\Component\Process\Process; diff --git a/src/PharInfo/Pharaoh.php b/src/PharInfo/Pharaoh.php index 8f507b2b1..279b7d3bf 100644 --- a/src/PharInfo/Pharaoh.php +++ b/src/PharInfo/Pharaoh.php @@ -14,7 +14,7 @@ namespace KevinGH\Box\PharInfo; -use ParagonIE\Pharaoh\Pharaoh as ParagoniePharaoh; +use KevinGH\Box\Pharaoh\Pharaoh as ParagoniePharaoh; use function basename; use function KevinGH\Box\FileSystem\remove; diff --git a/src/Pharaoh/PharDiff.php b/src/Pharaoh/PharDiff.php new file mode 100644 index 000000000..28126e366 --- /dev/null +++ b/src/Pharaoh/PharDiff.php @@ -0,0 +1,313 @@ + + * Théo Fidry + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +/* + * This file originates from https://github.com/paragonie/pharaoh. + * + * For maintenance reasons it had to be in-lined within Box. To simplify the + * configuration for PHP-CS-Fixer, the original license is in-lined as follows: + * + * The MIT License (MIT) + * + * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +namespace KevinGH\Box\Pharaoh; + +use ParagonIE\ConstantTime\Hex; +use ParagonIE_Sodium_File; +use RecursiveDirectoryIterator; +use RecursiveIteratorIterator; +use RegexIterator; +use SodiumException; +use function array_keys; +use function array_merge; +use function array_values; +use function count; +use function escapeshellarg; +use function hash_file; +use function max; +use function preg_match; +use function preg_quote; +use function preg_replace; +use function str_repeat; + +/** + * Class PharDiff. + */ +class PharDiff +{ + /** + * @var array + */ + protected $c = [ + '' => "\033[0;39m", + 'red' => "\033[0;31m", + 'green' => "\033[0;32m", + 'blue' => "\033[1;34m", + 'cyan' => "\033[1;36m", + 'silver' => "\033[0;37m", + 'yellow' => "\033[0;93m", + ]; + + /** @var array */ + private $phars = []; + + /** @var bool */ + private $verbose = false; + + /** + * Constructor uses dependency injection. + * + * @param \ParagonIE\Pharaoh\Pharaoh $pharA + * @param \ParagonIE\Pharaoh\Pharaoh $pharB + */ + public function __construct(Pharaoh $pharA, Pharaoh $pharB) + { + $this->phars = [$pharA, $pharB]; + } + + /** + * Prints a git-formatted diff of the two phars. + * + * @psalm-suppress ForbiddenCode + */ + public function printGitDiff(): int + { + // Lazy way; requires git. Will replace with custom implementaiton later. + + $argA = escapeshellarg($this->phars[0]->tmp); + $argB = escapeshellarg($this->phars[1]->tmp); + /** @var string $diff */ + $diff = shell_exec("git diff --no-index {$argA} {$argB}"); + echo $diff; + if (empty($diff) && $this->verbose) { + echo 'No differences encountered.', PHP_EOL; + + return 0; + } + + return 1; + } + + /** + * Prints a GNU diff of the two phars. + * + * @psalm-suppress ForbiddenCode + */ + public function printGnuDiff(): int + { + // Lazy way. Will replace with custom implementaiton later. + $argA = escapeshellarg($this->phars[0]->tmp); + $argB = escapeshellarg($this->phars[1]->tmp); + /** @var string $diff */ + $diff = shell_exec("diff {$argA} {$argB}"); + echo $diff; + if (empty($diff) && $this->verbose) { + echo 'No differences encountered.', PHP_EOL; + + return 0; + } + + return 1; + } + + /** + * Get hashes of all of the files in the two arrays. + * + * @throws SodiumException + * @return array> + */ + public function hashChildren(string $algo, string $dirA, string $dirB) + { + /** + * @var string $a + * @var string $b + */ + $a = $b = ''; + $filesA = $this->listAllFiles($dirA); + $filesB = $this->listAllFiles($dirB); + $numFiles = max(count($filesA), count($filesB)); + + // Array of two empty arrays + $hashes = [[], []]; + for ($i = 0; $i < $numFiles; ++$i) { + $thisFileA = (string) $filesA[$i]; + $thisFileB = (string) $filesB[$i]; + if (isset($filesA[$i])) { + $a = preg_replace('#^'.preg_quote($dirA, '#').'#', '', $thisFileA); + if (isset($filesB[$i])) { + $b = preg_replace('#^'.preg_quote($dirB, '#').'#', '', $thisFileB); + } else { + $b = $a; + } + } elseif (isset($filesB[$i])) { + $b = preg_replace('#^'.preg_quote($dirB, '#').'#', '', $thisFileB); + $a = $b; + } + + if (isset($filesA[$i])) { + // A exists + if ('blake2b' === mb_strtolower($algo)) { + $hashes[0][$a] = Hex::encode(ParagonIE_Sodium_File::generichash($thisFileA)); + } else { + $hashes[0][$a] = hash_file($algo, $thisFileA); + } + } elseif (isset($filesB[$i])) { + // A doesn't exist, B does + $hashes[0][$a] = ''; + } + + if (isset($filesB[$i])) { + // B exists + if ('blake2b' === mb_strtolower($algo)) { + $hashes[1][$b] = Hex::encode(ParagonIE_Sodium_File::generichash($thisFileB)); + } else { + $hashes[1][$b] = hash_file($algo, $thisFileB); + } + } elseif (isset($filesA[$i])) { + // B doesn't exist, A does + $hashes[1][$b] = ''; + } + } + + return $hashes; + } + + /** + * List all the files in a directory (and subdirectories). + * + * @param string $folder - start searching here + * @param string $extension - extensions to match + * @return array + */ + private function listAllFiles($folder, $extension = '*') + { + /** + * @var array $fileList + * @var string $i + * @var string $file + * @var RecursiveDirectoryIterator $dir + * @var RecursiveIteratorIterator $ite + */ + $dir = new RecursiveDirectoryIterator($folder); + $ite = new RecursiveIteratorIterator($dir); + if ('*' === $extension) { + $pattern = '/.*/'; + } else { + $pattern = '/.*\.'.$extension.'$/'; + } + $files = new RegexIterator($ite, $pattern, RegexIterator::GET_MATCH); + + /** @var array $fileList */ + $fileList = []; + + /** + * @var string[] $fileSub + */ + foreach ($files as $fileSub) { + $fileList = array_merge($fileList, $fileSub); + } + + /** + * @var string $i + * @var string $file + */ + foreach ($fileList as $i => $file) { + if (preg_match('#/\.{1,2}$#', (string) $file)) { + unset($fileList[$i]); + } + } + + return array_values($fileList); + } + + /** + * Prints out all of the differences of checksums of the files contained + * in both PHP archives. + * + * @throws SodiumException + */ + public function listChecksums(string $algo = 'sha384'): int + { + [$pharA, $pharB] = $this->hashChildren( + $algo, + $this->phars[0]->tmp, + $this->phars[1]->tmp + ); + + $diffs = 0; + /** @var string $i */ + foreach (array_keys($pharA) as $i) { + if (isset($pharA[$i], $pharB[$i])) { + // We are NOT concerned about local timing attacks. + if ($pharA[$i] !== $pharB[$i]) { + ++$diffs; + echo "\t", (string) $i, + "\n\t\t", $this->c['red'], $pharA[$i], $this->c[''], + "\t", $this->c['green'], $pharB[$i], $this->c[''], + "\n"; + } elseif (!empty($pharA[$i]) && empty($pharB[$i])) { + ++$diffs; + echo "\t", (string) $i, + "\n\t\t", $this->c['red'], $pharA[$i], $this->c[''], + "\t", str_repeat('-', mb_strlen($pharA[$i])), + "\n"; + } elseif (!empty($pharB[$i]) && empty($pharA[$i])) { + ++$diffs; + echo "\t", (string) $i, + "\n\t\t", str_repeat('-', mb_strlen($pharB[$i])), + "\t", $this->c['green'], $pharB[$i], $this->c[''], + "\n"; + } + } + } + if (0 === $diffs) { + if ($this->verbose) { + echo 'No differences encountered.', PHP_EOL; + } + + return 0; + } + + return 1; + } + + /** + * Verbose mode says something when there are no differences. + * By default, you can just check the return value. + */ + public function setVerbose(bool $value): void + { + $this->verbose = $value; + } +} diff --git a/src/Pharaoh/PharError.php b/src/Pharaoh/PharError.php new file mode 100644 index 000000000..76cf4e760 --- /dev/null +++ b/src/Pharaoh/PharError.php @@ -0,0 +1,53 @@ + + * Théo Fidry + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +/* + * This file originates from https://github.com/paragonie/pharaoh. + * + * For maintenance reasons it had to be in-lined within Box. To simplify the + * configuration for PHP-CS-Fixer, the original license is in-lined as follows: + * + * The MIT License (MIT) + * + * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +namespace KevinGH\Box\Pharaoh; + +use Exception; + +/** + * Class PharError. + */ +class PharError extends Exception +{ +} diff --git a/src/Pharaoh/Pharaoh.php b/src/Pharaoh/Pharaoh.php new file mode 100644 index 000000000..799c9a5d1 --- /dev/null +++ b/src/Pharaoh/Pharaoh.php @@ -0,0 +1,146 @@ + + * Théo Fidry + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +/* + * This file originates from https://github.com/paragonie/pharaoh. + * + * For maintenance reasons it had to be in-lined within Box. To simplify the + * configuration for PHP-CS-Fixer, the original license is in-lined as follows: + * + * The MIT License (MIT) + * + * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +namespace KevinGH\Box\Pharaoh; + +use Error; +use Exception; +use ParagonIE\ConstantTime\Hex; +use Phar; +use function copy; +use function file_put_contents; +use function ini_get; +use function is_dir; +use function is_readable; +use function is_string; +use function mkdir; +use function random_bytes; +use function sys_get_temp_dir; +use function tempnam; +use function unlink; +use const DIRECTORY_SEPARATOR; + +/** + * Class Pharaoh. + */ +class Pharaoh +{ + /** + * @var Phar + */ + public $phar; + + /** + * @var string + */ + public $tmp; + + /** + * @var string + */ + public static $stubfile; + + /** + * Pharaoh constructor. + * @param string $alias + * @throws PharError + * @throws Error + * @throws Exception + */ + public function __construct(string $file, $alias = null) + { + if (!is_readable($file)) { + throw new PharError($file.' cannot be read'); + } + if ('1' == ini_get('phar.readonly')) { + throw new PharError("Pharaoh cannot be used if phar.readonly is enabled in php.ini\n"); + } + + // Set the static variable here + if (empty(self::$stubfile)) { + self::$stubfile = Hex::encode(random_bytes(12)).'.pharstub'; + } + + if (empty($alias)) { + // We have to give every one a different alias, or it pukes. + $alias = Hex::encode(random_bytes(16)).'.phar'; + } + + if (!copy($file, $tmpFile = sys_get_temp_dir().DIRECTORY_SEPARATOR.$alias)) { + throw new Error('Could not create temporary file'); + } + + $this->phar = new Phar($tmpFile); + $this->phar->setAlias($alias); + + // Make a random folder in /tmp + /** @var string|bool $tmp */ + $tmp = tempnam(sys_get_temp_dir(), 'phr_'); + if (!is_string($tmp)) { + throw new Error('Could not create temporary file'); + } + + $this->tmp = $tmp; + unlink($this->tmp); + if (!mkdir($this->tmp, 0o755, true) && !is_dir($this->tmp)) { + throw new Error('Could not create temporary directory'); + } + + // Let's extract to our temporary directory + $this->phar->extractTo($this->tmp); + + // Also extract the stub + file_put_contents( + $this->tmp.'/'.self::$stubfile, + $this->phar->getStub() + ); + } + + public function __destruct() + { + $path = $this->phar->getPath(); + unset($this->phar); + + Phar::unlinkArchive($path); + } +}