From 6bfa43dad938d48af5168ceafe1b8221c23ec0f9 Mon Sep 17 00:00:00 2001 From: Niklas Keller Date: Wed, 30 Jun 2021 00:28:37 +0200 Subject: [PATCH] Update dependencies and code style --- .gitignore | 3 +- .php_cs.dist | 46 +- .travis.yml | 25 - LICENSE | 2 +- composer.json | 31 +- composer.lock | 4200 ++++++++++++++++------ src/AcmeFactory.php | 8 +- src/Commands/Auto.php | 108 +- src/Commands/Check.php | 62 +- src/Commands/Command.php | 3 +- src/Commands/Issue.php | 395 +- src/Commands/Revoke.php | 36 +- src/Commands/Setup.php | 150 +- src/Commands/Status.php | 52 +- src/Commands/Version.php | 44 +- src/ConfigException.php | 3 +- src/Stores/CertificateStore.php | 47 +- src/Stores/CertificateStoreException.php | 3 +- src/Stores/ChallengeStore.php | 32 +- src/Stores/ChallengeStoreException.php | 3 +- src/Stores/KeyStore.php | 27 +- src/Stores/KeyStoreException.php | 3 +- src/functions.php | 36 +- test/FunctionsTest.php | 34 +- 24 files changed, 3704 insertions(+), 1649 deletions(-) delete mode 100644 .travis.yml diff --git a/.gitignore b/.gitignore index 47ec7a5..1a4b0a7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ /info/ /vendor/ /config.test.yml -/.php_cs.cache \ No newline at end of file +/.php_cs.cache +/.phpunit.result.cache \ No newline at end of file diff --git a/.php_cs.dist b/.php_cs.dist index 2b230fb..d146dba 100644 --- a/.php_cs.dist +++ b/.php_cs.dist @@ -1,40 +1,10 @@ setRiskyAllowed(true) - ->setRules([ - "@PSR1" => true, - "@PSR2" => true, - "braces" => [ - "allow_single_line_closure" => true, - "position_after_functions_and_oop_constructs" => "same", - ], - "array_syntax" => ["syntax" => "short"], - "cast_spaces" => true, - "combine_consecutive_unsets" => true, - "function_to_constant" => true, - "native_function_invocation" => true, - "no_multiline_whitespace_before_semicolons" => true, - "no_unused_imports" => true, - "no_useless_else" => true, - "no_useless_return" => true, - "no_whitespace_before_comma_in_array" => true, - "no_whitespace_in_blank_line" => true, - "non_printable_character" => true, - "normalize_index_brace" => true, - "ordered_imports" => true, - "php_unit_construct" => true, - "php_unit_dedicate_assert" => true, - "php_unit_fqcn_annotation" => true, - "phpdoc_summary" => true, - "phpdoc_types" => true, - "psr4" => true, - "return_type_declaration" => ["space_before" => "none"], - "short_scalar_cast" => true, - "single_blank_line_before_namespace" => true, - ]) - ->setFinder( - PhpCsFixer\Finder::create() - ->in(__DIR__ . "/src") - ->in(__DIR__ . "/test") - ); +$config = new Amp\CodeStyle\Config; +$config->getFinder() + ->in(__DIR__ . '/src') + ->in(__DIR__ . '/test'); + +$config->setCacheFile(__DIR__ . '/.php_cs.cache'); + +return $config; diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 563942c..0000000 --- a/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -language: php - -php: - - 7.0 - - 7.1 - - 7.2 - - nightly - -cache: - directories: - - vendor - -install: - - phpenv config-rm xdebug.ini || true - - composer install - -script: - - find -name "*.php" -not -path "./vendor/*" -print0 | xargs -n 1 -0 php -l - - phpdbg -qrr vendor/bin/phpunit --coverage-text --coverage-clover build/logs/clover.xml - - PHP_CS_FIXER_IGNORE_ENV=1 php vendor/bin/php-cs-fixer --diff --dry-run -v fix - -after_script: - - curl -OL https://github.com/php-coveralls/php-coveralls/releases/download/v1.0.0/coveralls.phar - - chmod +x coveralls.phar - - ./coveralls.phar -v diff --git a/LICENSE b/LICENSE index cd356f4..3cfcb82 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2015-2018 Niklas Keller +Copyright (c) 2015-2021 Niklas Keller Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/composer.json b/composer.json index 48396e7..eb0e59f 100644 --- a/composer.json +++ b/composer.json @@ -11,21 +11,22 @@ "tls" ], "require": { - "php": ">=7", + "php": ">=7.2", "ext-openssl": "*", - "amphp/process": "^0.3.3", - "amphp/parallel": "^0.2.5", - "kelunik/acme": "^0.5", + "amphp/process": "^1.1", + "amphp/parallel": "^v1.4", + "kelunik/acme": "^1-dev", "kelunik/certificate": "^1", - "league/climate": "^3.2", - "rdlowrey/auryn": "^1.4.2", - "webmozart/assert": "^1.2", - "symfony/yaml": "^3.0", - "amphp/log": "^1.0" + "league/climate": "^3.4", + "rdlowrey/auryn": "^1.4.4", + "webmozart/assert": "^1.3", + "symfony/yaml": "^5.3.2", + "amphp/log": "^1.0", + "ext-posix": "*" }, "require-dev": { - "phpunit/phpunit": "^6", - "friendsofphp/php-cs-fixer": "^2.9", + "phpunit/phpunit": "^8 || ^9", + "amphp/php-cs-fixer-config": "dev-master", "macfja/phar-builder": "^0.2.6" }, "license": "MIT", @@ -45,7 +46,7 @@ }, "config": { "platform": { - "php": "7.0.0" + "php": "7.2.5" } }, "extra": { @@ -53,7 +54,11 @@ "compression": "GZip", "name": "acme-client.phar", "output-dir": "build", - "include": ["info", "src", "vendor/kelunik/acme/res"], + "include": [ + "info", + "src", + "vendor/kelunik/acme/res" + ], "include-dev": false, "skip-shebang": false, "entry-point": "bin/acme", diff --git a/composer.lock b/composer.lock index 7059cdf..fb83cd9 100644 --- a/composer.lock +++ b/composer.lock @@ -1,39 +1,41 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2eaf21a959712e9286b2819ca08ecb96", + "content-hash": "47bd3ca57a6a56d5b79fbe4915078e3f", "packages": [ { "name": "amphp/amp", - "version": "v2.0.7", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43" + "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/d561cc9736bc18dd94a2fc9cdae98b616bd92c43", - "reference": "d561cc9736bc18dd94a2fc9cdae98b616bd92c43", + "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9", + "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9", "shasum": "" }, "require": { "php": ">=7" }, "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpstan/phpstan": "^0.8.5", - "phpunit/phpunit": "^6.0.9", + "ext-json": "*", + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6.0.9 | ^7", + "psalm/phar": "^3.11@dev", "react/promise": "^2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -50,14 +52,6 @@ "MIT" ], "authors": [ - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, { "name": "Daniel Lowrey", "email": "rdlowrey@php.net" @@ -65,6 +59,14 @@ { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], "description": "A non-blocking concurrency framework for PHP applications.", @@ -80,91 +82,51 @@ "non-blocking", "promise" ], - "time": "2018-04-30T20:49:57+00:00" + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/amp/issues", + "source": "https://github.com/amphp/amp/tree/v2.5.2" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-01-10T17:06:37+00:00" }, { - "name": "amphp/artax", - "version": "v3.0.14", + "name": "amphp/byte-stream", + "version": "v1.8.1", "source": { "type": "git", - "url": "https://github.com/amphp/artax.git", - "reference": "84ba8e2014a81e399541f3dc3a6352bab09c980c" + "url": "https://github.com/amphp/byte-stream.git", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/artax/zipball/84ba8e2014a81e399541f3dc3a6352bab09c980c", - "reference": "84ba8e2014a81e399541f3dc3a6352bab09c980c", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", "shasum": "" }, "require": { "amphp/amp": "^2", - "amphp/byte-stream": "^1.1.6", - "amphp/file": "^0.2 || ^0.3", - "amphp/socket": "^0.10.5", - "amphp/uri": "^0.1", - "kelunik/certificate": "^1.1", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { - "amphp/phpunit-util": "^1", + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.4", "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "jetbrains/phpstorm-stubs": "^2019.3", + "phpunit/phpunit": "^6 || ^7 || ^8", + "psalm/phar": "^3.11.4" }, "type": "library", - "autoload": { - "psr-4": { - "Amp\\Artax\\": "lib" + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" } }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@gmail.com" - } - ], - "description": "Asynchronous parallel HTTP/1.1 client built on the Amp concurrency framework", - "homepage": "https://github.com/amphp/artax", - "keywords": [ - "async", - "client", - "http", - "non-blocking", - "parallel", - "rest" - ], - "time": "2018-02-01T20:29:48+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/1b75b122e6f069e7d102eef065dc192119d99ca7", - "reference": "1b75b122e6f069e7d102eef065dc192119d99ca7", - "shasum": "" - }, - "require": { - "amphp/amp": "^2" - }, - "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "type": "library", "autoload": { "psr-4": { "Amp\\ByteStream\\": "lib" @@ -178,13 +140,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 stream abstraction to make working with non-blocking I/O simple.", @@ -197,29 +159,48 @@ "non-blocking", "stream" ], - "time": "2018-04-04T05:33:09+00:00" + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/byte-stream/issues", + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" }, { "name": "amphp/cache", - "version": "v1.2.0", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/amphp/cache.git", - "reference": "ab2339e465d9d383dc748f288d530fd7cd7aadea" + "reference": "2b6b5dbb70e54cc914df9952ba7c012bc4cbcd28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/cache/zipball/ab2339e465d9d383dc748f288d530fd7cd7aadea", - "reference": "ab2339e465d9d383dc748f288d530fd7cd7aadea", + "url": "https://api.github.com/repos/amphp/cache/zipball/2b6b5dbb70e54cc914df9952ba7c012bc4cbcd28", + "reference": "2b6b5dbb70e54cc914df9952ba7c012bc4cbcd28", "shasum": "" }, "require": { - "amphp/amp": "^2" + "amphp/amp": "^2", + "amphp/serialization": "^1", + "amphp/sync": "^1.2", + "php": ">=7.1" + }, + "conflict": { + "amphp/file": "<0.2 || >=3" }, "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "amphp/file": "^1 || ^2", + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "phpunit/phpunit": "^6 | ^7 | ^8 | ^9", + "vimeo/psalm": "^4" }, "type": "library", "autoload": { @@ -243,38 +224,48 @@ ], "description": "A promise-aware caching API for Amp.", "homepage": "https://github.com/amphp/cache", - "time": "2017-10-04T19:22:12+00:00" + "support": { + "irc": "irc://irc.freenode.org/amphp", + "issues": "https://github.com/amphp/cache/issues", + "source": "https://github.com/amphp/cache/tree/v1.5.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-06-29T17:12:43+00:00" }, { "name": "amphp/dns", - "version": "v0.9.13", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/amphp/dns.git", - "reference": "4647e5f58263ffdeff7da5c269f517cb48cff84f" + "reference": "852292532294d7972c729a96b49756d781f7c59d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/dns/zipball/4647e5f58263ffdeff7da5c269f517cb48cff84f", - "reference": "4647e5f58263ffdeff7da5c269f517cb48cff84f", + "url": "https://api.github.com/repos/amphp/dns/zipball/852292532294d7972c729a96b49756d781f7c59d", + "reference": "852292532294d7972c729a96b49756d781f7c59d", "shasum": "" }, "require": { "amphp/amp": "^2", "amphp/byte-stream": "^1.1", "amphp/cache": "^1.2", - "amphp/file": "^0.2 || ^0.3", "amphp/parser": "^1", - "amphp/uri": "^0.1", "amphp/windows-registry": "^0.3", "daverandom/libdns": "^2.0.1", "ext-filter": "*", + "ext-json": "*", "php": ">=7.0" }, "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "phpunit/phpunit": "^6 || ^7 || ^8 || ^9" }, "type": "library", "autoload": { @@ -291,20 +282,20 @@ ], "authors": [ { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Chris Wright", + "email": "addr@daverandom.com" }, { "name": "Daniel Lowrey", "email": "rdlowrey@php.net" }, { - "name": "Chris Wright", - "email": "addr@daverandom.com" + "name": "Bob Weinand", + "email": "bobwei9@hotmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" }, { "name": "Aaron Piotrowski", @@ -321,39 +312,58 @@ "dns", "resolve" ], - "time": "2018-05-01T18:08:54+00:00" + "support": { + "issues": "https://github.com/amphp/dns/issues", + "source": "https://github.com/amphp/dns/tree/v1.2.3" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2020-07-21T19:04:57+00:00" }, { "name": "amphp/file", - "version": "v0.3.1", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/amphp/file.git", - "reference": "7bb476921b67cd7da361cf0d6bf9d80ec130421d" + "reference": "08c651cc58610c3d1241551d2e16d1c0401d19f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/file/zipball/7bb476921b67cd7da361cf0d6bf9d80ec130421d", - "reference": "7bb476921b67cd7da361cf0d6bf9d80ec130421d", + "url": "https://api.github.com/repos/amphp/file/zipball/08c651cc58610c3d1241551d2e16d1c0401d19f1", + "reference": "08c651cc58610c3d1241551d2e16d1c0401d19f1", "shasum": "" }, "require": { - "amphp/amp": "^2", - "amphp/byte-stream": "^1", - "amphp/parallel": "^0.2" + "amphp/amp": "^2.5.2", + "amphp/byte-stream": "^1.8.1", + "amphp/parallel": "^1.4", + "amphp/sync": "^1.4", + "php": ">=7.1" }, "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "ext-eio": "^2", + "ext-uv": "^0.3 || ^0.2", + "phpunit/phpunit": "^9 || ^8 || ^7" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, "autoload": { "psr-4": { - "Amp\\File\\": "lib" + "Amp\\File\\": "src" }, "files": [ - "lib/functions.php" + "src/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -361,10 +371,6 @@ "MIT" ], "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, { "name": "Daniel Lowrey", "email": "rdlowrey@php.net" @@ -372,6 +378,10 @@ { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], "description": "Allows non-blocking access to the filesystem for Amp.", @@ -387,32 +397,274 @@ "non-blocking", "static" ], - "time": "2018-03-17T12:24:35+00:00" + "support": { + "issues": "https://github.com/amphp/file/issues", + "source": "https://github.com/amphp/file/tree/v2.0.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-06-21T19:35:15+00:00" }, { - "name": "amphp/log", - "version": "v1.0.0", + "name": "amphp/hpack", + "version": "v3.1.1", "source": { "type": "git", - "url": "https://github.com/amphp/log.git", - "reference": "728678d6e751abeb54a4d2fc6e76ef977de3f43b" + "url": "https://github.com/amphp/hpack.git", + "reference": "cf4f1663e9fd58f60258c06177098655ca6377a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/log/zipball/728678d6e751abeb54a4d2fc6e76ef977de3f43b", - "reference": "728678d6e751abeb54a4d2fc6e76ef977de3f43b", + "url": "https://api.github.com/repos/amphp/hpack/zipball/cf4f1663e9fd58f60258c06177098655ca6377a5", + "reference": "cf4f1663e9fd58f60258c06177098655ca6377a5", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "http2jp/hpack-test-case": "^1", + "phpunit/phpunit": "^6 | ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@php.net" + }, + { + "name": "Bob Weinand" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + } + ], + "description": "HTTP/2 HPack implementation.", + "homepage": "https://github.com/amphp/hpack", + "keywords": [ + "headers", + "hpack", + "http-2" + ], + "support": { + "issues": "https://github.com/amphp/hpack/issues", + "source": "https://github.com/amphp/hpack/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-06-11T20:03:34+00:00" + }, + { + "name": "amphp/http", + "version": "v1.6.3", + "source": { + "type": "git", + "url": "https://github.com/amphp/http.git", + "reference": "e2b75561011a9596e4574cc867e07a706d56394b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/http/zipball/e2b75561011a9596e4574cc867e07a706d56394b", + "reference": "e2b75561011a9596e4574cc867e07a706d56394b", + "shasum": "" + }, + "require": { + "amphp/hpack": "^3", + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "phpunit/phpunit": "^7 || ^6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\Http\\": "src" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Basic HTTP primitives which can be shared by servers and clients.", + "support": { + "issues": "https://github.com/amphp/http/issues", + "source": "https://github.com/amphp/http/tree/v1.6.3" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2020-11-28T17:04:34+00:00" + }, + { + "name": "amphp/http-client", + "version": "v4.6.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/http-client.git", + "reference": "039059413110990c5a65ddeab4a58e0d3fa5f051" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/http-client/zipball/039059413110990c5a65ddeab4a58e0d3fa5f051", + "reference": "039059413110990c5a65ddeab4a58e0d3fa5f051", + "shasum": "" + }, + "require": { + "amphp/amp": "^2.4", + "amphp/byte-stream": "^1.6", + "amphp/hpack": "^3", + "amphp/http": "^1.6", + "amphp/socket": "^1", + "amphp/sync": "^1.3", + "league/uri": "^6", + "php": ">=7.2", + "psr/http-message": "^1" + }, + "conflict": { + "amphp/file": "<0.2 || >=3" + }, + "require-dev": { + "amphp/file": "^0.2 || ^0.3 || ^1 || ^2", + "amphp/http-server": "^2", + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "amphp/react-adapter": "^2.1", + "clue/socks-react": "^1.0", + "ext-json": "*", + "kelunik/link-header-rfc5988": "^1.0", + "laminas/laminas-diactoros": "^2.3", + "phpunit/phpunit": "^7 || ^8 || ^9", + "vimeo/psalm": "^4" + }, + "suggest": { + "amphp/file": "Required for file request bodies and HTTP archive logging", + "ext-json": "Required for logging HTTP archives", + "ext-zlib": "Allows using compression for response bodies." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Amp\\Http\\Client\\": "src" + }, + "files": [ + "src/Internal/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Lowrey", + "email": "rdlowrey@gmail.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + }, + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + } + ], + "description": "Asynchronous concurrent HTTP/2 and HTTP/1.1 client built on the Amp concurrency framework", + "homepage": "https://github.com/amphp/http-client", + "keywords": [ + "async", + "client", + "concurrent", + "http", + "non-blocking", + "rest" + ], + "support": { + "issues": "https://github.com/amphp/http-client/issues", + "source": "https://github.com/amphp/http-client/tree/v4.6.0" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-06-29T18:43:18+00:00" + }, + { + "name": "amphp/log", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/amphp/log.git", + "reference": "25dcd3b58622bd22ffa7129288edb85e0c17081a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/log/zipball/25dcd3b58622bd22ffa7129288edb85e0c17081a", + "reference": "25dcd3b58622bd22ffa7129288edb85e0c17081a", "shasum": "" }, "require": { "amphp/amp": "^2", "amphp/byte-stream": "^1.3", - "monolog/monolog": "^1.23" + "monolog/monolog": "^2 || ^1.23", + "php": ">=7.1" }, "require-dev": { - "amphp/file": "^0.3", - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "phpunit/phpunit": "^8 || ^7" }, "type": "library", "autoload": { @@ -428,13 +680,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": "Non-blocking logging for PHP based on Amp and Monolog.", @@ -448,36 +700,39 @@ "logging", "non-blocking" ], - "time": "2018-03-22T19:39:52+00:00" + "support": { + "issues": "https://github.com/amphp/log/issues", + "source": "https://github.com/amphp/log/tree/master" + }, + "time": "2019-09-04T15:31:40+00:00" }, { "name": "amphp/parallel", - "version": "v0.2.5", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "732694688461936bec02c0ccf020dfee10c4f7ee" + "reference": "2c1039bf7ca137eae4d954b14c09a7535d7d4e1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/732694688461936bec02c0ccf020dfee10c4f7ee", - "reference": "732694688461936bec02c0ccf020dfee10c4f7ee", + "url": "https://api.github.com/repos/amphp/parallel/zipball/2c1039bf7ca137eae4d954b14c09a7535d7d4e1c", + "reference": "2c1039bf7ca137eae4d954b14c09a7535d7d4e1c", "shasum": "" }, "require": { "amphp/amp": "^2", - "amphp/byte-stream": "^1.2", + "amphp/byte-stream": "^1.6.1", "amphp/parser": "^1", - "amphp/process": "^0.2 || ^0.3", - "amphp/sync": "^1.0.1" + "amphp/process": "^1", + "amphp/serialization": "^1", + "amphp/sync": "^1.0.1", + "php": ">=7.1" }, "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "suggest": { - "ext-pthreads": "Required for thread contexts" + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "phpunit/phpunit": "^8 || ^7" }, "type": "library", "autoload": { @@ -485,6 +740,8 @@ "Amp\\Parallel\\": "lib" }, "files": [ + "lib/Context/functions.php", + "lib/Sync/functions.php", "lib/Worker/functions.php" ] }, @@ -493,13 +750,13 @@ "MIT" ], "authors": [ - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" } ], "description": "Parallel processing component for Amp.", @@ -511,7 +768,11 @@ "multi-processing", "multi-threading" ], - "time": "2018-03-21T14:37:51+00:00" + "support": { + "issues": "https://github.com/amphp/parallel/issues", + "source": "https://github.com/amphp/parallel/tree/master" + }, + "time": "2020-04-27T15:12:37+00:00" }, { "name": "amphp/parser", @@ -562,30 +823,34 @@ "parser", "stream" ], + "support": { + "issues": "https://github.com/amphp/parser/issues", + "source": "https://github.com/amphp/parser/tree/is-valid" + }, "time": "2017-06-06T05:29:10+00:00" }, { "name": "amphp/process", - "version": "v0.3.3", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/amphp/process.git", - "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc" + "reference": "b88c6aef75c0b22f6f021141dd2d5e7c5db4c124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/b795d20a7f6d5a0637128a02be613f520f1705fc", - "reference": "b795d20a7f6d5a0637128a02be613f520f1705fc", + "url": "https://api.github.com/repos/amphp/process/zipball/b88c6aef75c0b22f6f021141dd2d5e7c5db4c124", + "reference": "b88c6aef75c0b22f6f021141dd2d5e7c5db4c124", "shasum": "" }, "require": { "amphp/amp": "^2", - "amphp/byte-stream": "^1", + "amphp/byte-stream": "^1.4", "php": ">=7" }, "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", "phpunit/phpunit": "^6" }, "type": "library", @@ -594,7 +859,7 @@ "Amp\\Process\\": "lib" }, "files": [ - "lib/constants.php" + "lib/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -606,46 +871,122 @@ "name": "Bob Weinand", "email": "bobwei9@hotmail.com" }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], "description": "Asynchronous process manager.", "homepage": "https://github.com/amphp/process", - "time": "2018-04-08T18:55:42+00:00" + "support": { + "issues": "https://github.com/amphp/process/issues", + "source": "https://github.com/amphp/process/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T20:04:22+00:00" }, { - "name": "amphp/socket", - "version": "v0.10.9", + "name": "amphp/serialization", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/amphp/socket.git", - "reference": "6e9686b62b87c2cad235139a44be5121fe34edbb" + "url": "https://github.com/amphp/serialization.git", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/socket/zipball/6e9686b62b87c2cad235139a44be5121fe34edbb", - "reference": "6e9686b62b87c2cad235139a44be5121fe34edbb", + "url": "https://api.github.com/repos/amphp/serialization/zipball/693e77b2fb0b266c3c7d622317f881de44ae94a1", + "reference": "693e77b2fb0b266c3c7d622317f881de44ae94a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", + "phpunit/phpunit": "^9 || ^8 || ^7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\Serialization\\": "src" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Aaron Piotrowski", + "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" + } + ], + "description": "Serialization tools for IPC and data storage in PHP.", + "homepage": "https://github.com/amphp/serialization", + "keywords": [ + "async", + "asynchronous", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/amphp/serialization/issues", + "source": "https://github.com/amphp/serialization/tree/master" + }, + "time": "2020-03-25T21:39:07+00:00" + }, + { + "name": "amphp/socket", + "version": "v1.1.3", + "source": { + "type": "git", + "url": "https://github.com/amphp/socket.git", + "reference": "b9064b98742d12f8f438eaf73369bdd7d8446331" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amphp/socket/zipball/b9064b98742d12f8f438eaf73369bdd7d8446331", + "reference": "b9064b98742d12f8f438eaf73369bdd7d8446331", "shasum": "" }, "require": { "amphp/amp": "^2", - "amphp/byte-stream": "^1.1", - "amphp/dns": "^0.9", - "amphp/uri": "^0.1", - "php": ">=7.0" + "amphp/byte-stream": "^1.6", + "amphp/dns": "^1 || ^0.9", + "ext-openssl": "*", + "kelunik/certificate": "^1.1", + "league/uri-parser": "^1.4", + "php": ">=7.1" }, "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "phpunit/phpunit": "^6 || ^7 || ^8", + "vimeo/psalm": "^3.9@dev" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, "autoload": { "psr-4": { "Amp\\Socket\\": "src" @@ -660,10 +1001,6 @@ "MIT" ], "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, { "name": "Daniel Lowrey", "email": "rdlowrey@gmail.com" @@ -671,6 +1008,10 @@ { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Niklas Keller", + "email": "me@kelunik.com" } ], "description": "Async socket connection / server tools for Amp.", @@ -684,37 +1025,43 @@ "tcp", "tls" ], - "time": "2018-05-01T21:14:10+00:00" + "support": { + "issues": "https://github.com/amphp/socket/issues", + "source": "https://github.com/amphp/socket/tree/master" + }, + "time": "2020-06-25T18:55:28+00:00" }, { "name": "amphp/sync", - "version": "v1.0.1", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/amphp/sync.git", - "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90" + "reference": "613047ac54c025aa800a9cde5b05c3add7327ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/sync/zipball/a1d8f244eb19e3e2a96abc4686cebc80995bbc90", - "reference": "a1d8f244eb19e3e2a96abc4686cebc80995bbc90", + "url": "https://api.github.com/repos/amphp/sync/zipball/613047ac54c025aa800a9cde5b05c3add7327ed4", + "reference": "613047ac54c025aa800a9cde5b05c3add7327ed4", "shasum": "" }, "require": { - "amphp/amp": "^2" + "amphp/amp": "^2.2", + "php": ">=7.1" }, "require-dev": { - "amphp/phpunit-util": "^1", - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" + "amphp/php-cs-fixer-config": "dev-master", + "amphp/phpunit-util": "^1.1", + "phpunit/phpunit": "^9 || ^8 || ^7" }, "type": "library", "autoload": { "psr-4": { - "Amp\\Sync\\": "lib" + "Amp\\Sync\\": "src" }, "files": [ - "lib/functions.php" + "src/functions.php", + "src/ConcurrentIterator/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -722,13 +1069,13 @@ "MIT" ], "authors": [ - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - }, { "name": "Aaron Piotrowski", "email": "aaron@trowski.com" + }, + { + "name": "Stephen Coakley", + "email": "me@stephencoakley.com" } ], "description": "Mutex, Semaphore, and other synchronization tools for Amp.", @@ -740,72 +1087,33 @@ "semaphore", "synchronization" ], - "time": "2017-11-29T21:48:53+00:00" - }, - { - "name": "amphp/uri", - "version": "v0.1.3", - "source": { - "type": "git", - "url": "https://github.com/amphp/uri.git", - "reference": "b857ba4df3cf0852302ba1637fccce4ce1205241" + "support": { + "issues": "https://github.com/amphp/sync/issues", + "source": "https://github.com/amphp/sync/tree/v1.4.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/uri/zipball/b857ba4df3cf0852302ba1637fccce4ce1205241", - "reference": "b857ba4df3cf0852302ba1637fccce4ce1205241", - "shasum": "" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Uri\\": "src" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Daniel Lowrey" - } - ], - "description": "Uri Parser and Resolver.", - "homepage": "https://github.com/amphp/uri", - "time": "2017-10-23T12:40:35+00:00" + "time": "2020-05-07T18:57:50+00:00" }, { "name": "amphp/windows-registry", - "version": "v0.3.1", + "version": "v0.3.3", "source": { "type": "git", "url": "https://github.com/amphp/windows-registry.git", - "reference": "46ba1463dfffc8081b4b483fac05d3f51ecb1d87" + "reference": "0f56438b9197e224325e88f305346f0221df1f71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/windows-registry/zipball/46ba1463dfffc8081b4b483fac05d3f51ecb1d87", - "reference": "46ba1463dfffc8081b4b483fac05d3f51ecb1d87", + "url": "https://api.github.com/repos/amphp/windows-registry/zipball/0f56438b9197e224325e88f305346f0221df1f71", + "reference": "0f56438b9197e224325e88f305346f0221df1f71", "shasum": "" }, "require": { "amphp/amp": "^2", - "amphp/process": "^0.2 || ^0.3" + "amphp/byte-stream": "^1.4", + "amphp/process": "^1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.3" + "amphp/php-cs-fixer-config": "dev-master" }, "type": "library", "autoload": { @@ -824,20 +1132,30 @@ } ], "description": "Windows Registry Reader.", - "time": "2017-12-11T08:35:51+00:00" + "support": { + "issues": "https://github.com/amphp/windows-registry/issues", + "source": "https://github.com/amphp/windows-registry/tree/master" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2020-07-10T16:13:29+00:00" }, { "name": "daverandom/libdns", - "version": "v2.0.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/DaveRandom/LibDNS.git", - "reference": "1ecd825b6fa9bb3fddc07751997e29dc78749b95" + "reference": "e8b6d6593d18ac3a6a14666d8a68a4703b2e05f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/1ecd825b6fa9bb3fddc07751997e29dc78749b95", - "reference": "1ecd825b6fa9bb3fddc07751997e29dc78749b95", + "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/e8b6d6593d18ac3a6a14666d8a68a4703b2e05f9", + "reference": "e8b6d6593d18ac3a6a14666d8a68a4703b2e05f9", "shasum": "" }, "require": { @@ -864,45 +1182,55 @@ "keywords": [ "dns" ], - "time": "2018-01-10T15:56:17+00:00" + "support": { + "issues": "https://github.com/DaveRandom/LibDNS/issues", + "source": "https://github.com/DaveRandom/LibDNS/tree/v2.0.2" + }, + "time": "2019-12-03T09:12:46+00:00" }, { "name": "kelunik/acme", - "version": "v0.5.2", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/kelunik/acme.git", - "reference": "26bfdbe167d295c046240b419a78a0cb6b3f9c1d" + "reference": "23cdff20996d1d1ae08b4b200dfee5fa82396630" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kelunik/acme/zipball/26bfdbe167d295c046240b419a78a0cb6b3f9c1d", - "reference": "26bfdbe167d295c046240b419a78a0cb6b3f9c1d", + "url": "https://api.github.com/repos/kelunik/acme/zipball/23cdff20996d1d1ae08b4b200dfee5fa82396630", + "reference": "23cdff20996d1d1ae08b4b200dfee5fa82396630", "shasum": "" }, "require": { "amphp/amp": "^2", - "amphp/artax": "^3", - "namshi/jose": "^7", - "psr/log": "^1.0", + "amphp/file": "^2.0", + "amphp/http-client": "^4", + "ext-json": "*", + "ext-openssl": "*", + "kelunik/certificate": "^1.1", + "php": ">=7.2", + "psr/log": "^1", "sabre/uri": "^1" }, "require-dev": { + "amphp/php-cs-fixer-config": "dev-master", "amphp/phpunit-util": "^1.0", - "phpunit/phpunit": "^6" + "phpunit/phpunit": "^8 || ^9" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "0.5-dev" + "dev-master": "1-dev" } }, "autoload": { "psr-4": { - "Kelunik\\Acme\\": "lib" + "Kelunik\\Acme\\": "src" }, "files": [ - "lib/functions.php" + "src/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -925,25 +1253,29 @@ "ssl", "tls" ], - "time": "2018-06-08T12:28:30+00:00" + "support": { + "issues": "https://github.com/kelunik/acme/issues", + "source": "https://github.com/kelunik/acme/tree/master" + }, + "time": "2021-06-29T22:02:08+00:00" }, { "name": "kelunik/certificate", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/kelunik/certificate.git", - "reference": "524fa432ed1b5f50efbe7749f3c19e28a9866bc7" + "reference": "56542e62d51533d04d0a9713261fea546bff80f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kelunik/certificate/zipball/524fa432ed1b5f50efbe7749f3c19e28a9866bc7", - "reference": "524fa432ed1b5f50efbe7749f3c19e28a9866bc7", + "url": "https://api.github.com/repos/kelunik/certificate/zipball/56542e62d51533d04d0a9713261fea546bff80f6", + "reference": "56542e62d51533d04d0a9713261fea546bff80f6", "shasum": "" }, "require": { "ext-openssl": "*", - "php": "^5.4 | ^7.0" + "php": ">=5.4" }, "require-dev": { "fabpot/php-cs-fixer": "^1.9", @@ -974,24 +1306,28 @@ "pem", "x509" ], - "time": "2017-07-04T19:37:30+00:00" + "support": { + "issues": "https://github.com/kelunik/certificate/issues", + "source": "https://github.com/kelunik/certificate/tree/v1.1.2" + }, + "time": "2019-05-29T19:02:31+00:00" }, { "name": "league/climate", - "version": "3.4.1", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/climate.git", - "reference": "d657a19837c1f79a891381fb128b755aa3386381" + "reference": "61eecbde7645528a855a3afef65c5354093b27b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/climate/zipball/d657a19837c1f79a891381fb128b755aa3386381", - "reference": "d657a19837c1f79a891381fb128b755aa3386381", + "url": "https://api.github.com/repos/thephpleague/climate/zipball/61eecbde7645528a855a3afef65c5354093b27b2", + "reference": "61eecbde7645528a855a3afef65c5354093b27b2", "shasum": "" }, "require": { - "php": "^5.6|^7.0", + "php": "^7.2", "psr/log": "^1.0", "seld/cli-prompt": "^1.0" }, @@ -1014,17 +1350,17 @@ "MIT" ], "authors": [ - { - "name": "Craig Duncan", - "email": "git@duncanc.co.uk", - "homepage": "https://github.com/duncan3dc", - "role": "Developer" - }, { "name": "Joe Tannenbaum", "email": "hey@joe.codes", "homepage": "http://joe.codes/", "role": "Developer" + }, + { + "name": "Craig Duncan", + "email": "git@duncanc.co.uk", + "homepage": "https://github.com/duncan3dc", + "role": "Developer" } ], "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.", @@ -1035,25 +1371,265 @@ "php", "terminal" ], - "time": "2018-04-29T16:43:54+00:00" + "support": { + "issues": "https://github.com/thephpleague/climate/issues", + "source": "https://github.com/thephpleague/climate/tree/3.6.0" + }, + "time": "2020-10-04T16:02:59+00:00" }, { - "name": "monolog/monolog", - "version": "1.23.0", + "name": "league/uri", + "version": "6.4.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + "url": "https://github.com/thephpleague/uri.git", + "reference": "09da64118eaf4c5d52f9923a1e6a5be1da52fd9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", - "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/09da64118eaf4c5d52f9923a1e6a5be1da52fd9a", + "reference": "09da64118eaf4c5d52f9923a1e6a5be1da52fd9a", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "ext-json": "*", + "league/uri-interfaces": "^2.1", + "php": ">=7.2", + "psr/http-message": "^1.0" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^8.0 || ^9.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-fileinfo": "Needed to create Data URI from a filepath", + "ext-intl": "Needed to improve host validation", + "league/uri-components": "Needed to easily manipulate URI objects", + "psr/http-factory": "Needed to use the URI factory" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "http://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri/issues", + "source": "https://github.com/thephpleague/uri/tree/6.4.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2020-11-22T14:29:11+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "reference": "00e7e2943f76d8cb50c7dfdc2f6dee356e15e383", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19", + "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan-phpunit": "^0.12.19", + "phpstan/phpstan-strict-rules": "^0.12.9", + "phpunit/phpunit": "^8.5.15 || ^9.5" + }, + "suggest": { + "ext-intl": "to use the IDNA feature", + "symfony/intl": "to use the IDNA feature via Symfony Polyfill" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interface for URI representation", + "homepage": "http://github.com/thephpleague/uri-interfaces", + "keywords": [ + "rfc3986", + "rfc3987", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-interfaces/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/2.3.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2021-06-28T04:27:21+00:00" + }, + { + "name": "league/uri-parser", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-parser.git", + "reference": "671548427e4c932352d9b9279fdfa345bf63fa00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-parser/zipball/671548427e4c932352d9b9279fdfa345bf63fa00", + "reference": "671548427e4c932352d9b9279fdfa345bf63fa00", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "phpstan/phpstan": "^0.9.2", + "phpstan/phpstan-phpunit": "^0.9.4", + "phpstan/phpstan-strict-rules": "^0.9.0", + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-intl": "Allow parsing RFC3987 compliant hosts", + "league/uri-schemes": "Allow validating and normalizing URI parsing results" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "src" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "userland URI parser RFC 3986 compliant", + "homepage": "https://github.com/thephpleague/uri-parser", + "keywords": [ + "parse_url", + "parser", + "rfc3986", + "rfc3987", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/thephpleague/uri-parser/issues", + "source": "https://github.com/thephpleague/uri-parser/tree/master" + }, + "time": "2018-11-22T07:55:51+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1" }, "provide": { "psr/log-implementation": "1.0.0" @@ -1061,33 +1637,37 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.59", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -1103,93 +1683,44 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ], - "time": "2017-06-19T01:22:40+00:00" - }, - { - "name": "namshi/jose", - "version": "7.2.3", - "source": { - "type": "git", - "url": "https://github.com/namshi/jose.git", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.2.0" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/namshi/jose/zipball/89a24d7eb3040e285dd5925fcad992378b82bcff", - "reference": "89a24d7eb3040e285dd5925fcad992378b82bcff", - "shasum": "" - }, - "require": { - "ext-date": "*", - "ext-hash": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-spl": "*", - "php": ">=5.5", - "symfony/polyfill-php56": "^1.0" - }, - "require-dev": { - "phpseclib/phpseclib": "^2.0", - "phpunit/phpunit": "^4.5|^5.0", - "satooshi/php-coveralls": "^1.0" - }, - "suggest": { - "ext-openssl": "Allows to use OpenSSL as crypto engine.", - "phpseclib/phpseclib": "Allows to use Phpseclib as crypto engine, use version ^2.0." - }, - "type": "library", - "autoload": { - "psr-4": { - "Namshi\\JOSE\\": "src/Namshi/JOSE/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Alessandro Nadalin", - "email": "alessandro.nadalin@gmail.com" + "url": "https://github.com/Seldaek", + "type": "github" }, { - "name": "Alessandro Cinelli (cirpo)", - "email": "alessandro.cinelli@gmail.com" + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" } ], - "description": "JSON Object Signing and Encryption library for PHP.", - "keywords": [ - "JSON Web Signature", - "JSON Web Token", - "JWS", - "json", - "jwt", - "token" - ], - "time": "2016-12-05T07:27:31+00:00" + "time": "2020-12-14T13:15:25+00:00" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "psr/http-message", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { @@ -1201,6 +1732,59 @@ "dev-master": "1.0.x-dev" } }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, "autoload": { "psr-4": { "Psr\\Log\\": "Psr/Log/" @@ -1213,7 +1797,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -1223,20 +1807,23 @@ "psr", "psr-3" ], - "time": "2016-10-10T12:19:37+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" }, { "name": "rdlowrey/auryn", - "version": "v1.4.2", + "version": "v1.4.4", "source": { "type": "git", "url": "https://github.com/rdlowrey/auryn.git", - "reference": "8c4dc07943599ba84f4f89eab8cf43efeef80395" + "reference": "dae57592229d313b59414a2c8334e61e6eb00928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rdlowrey/auryn/zipball/8c4dc07943599ba84f4f89eab8cf43efeef80395", - "reference": "8c4dc07943599ba84f4f89eab8cf43efeef80395", + "url": "https://api.github.com/repos/rdlowrey/auryn/zipball/dae57592229d313b59414a2c8334e61e6eb00928", + "reference": "dae57592229d313b59414a2c8334e61e6eb00928", "shasum": "" }, "require": { @@ -1245,7 +1832,7 @@ "require-dev": { "athletic/athletic": "~0.1", "fabpot/php-cs-fixer": "~1.9", - "phpunit/phpunit": "^4.7" + "phpunit/phpunit": "^4.8" }, "type": "library", "autoload": { @@ -1259,10 +1846,10 @@ ], "authors": [ { - "name": "Dan Ackroyd", - "email": "Danack@basereality.com", - "homepage": "http://www.basereality.com", - "role": "Developer" + "name": "Daniel Lowrey", + "email": "rdlowrey@gmail.com", + "homepage": "https://github.com/rdlowrey", + "role": "Creator / Main Developer" }, { "name": "Levi Morrison", @@ -1271,10 +1858,10 @@ "role": "Developer" }, { - "name": "Daniel Lowrey", - "email": "rdlowrey@gmail.com", - "homepage": "https://github.com/rdlowrey", - "role": "Creator / Main Developer" + "name": "Dan Ackroyd", + "email": "Danack@basereality.com", + "homepage": "http://www.basereality.com", + "role": "Developer" } ], "description": "Auryn is a dependency injector for bootstrapping object-oriented PHP applications.", @@ -1284,7 +1871,11 @@ "dic", "ioc" ], - "time": "2017-05-15T06:26:46+00:00" + "support": { + "issues": "https://github.com/rdlowrey/auryn/issues", + "source": "https://github.com/rdlowrey/auryn/tree/v1.4.4" + }, + "time": "2021-03-04T20:26:52+00:00" }, { "name": "sabre/uri", @@ -1335,25 +1926,33 @@ "uri", "url" ], + "support": { + "forum": "https://groups.google.com/group/sabredav-discuss", + "issues": "https://github.com/sabre-io/uri/issues", + "source": "https://github.com/fruux/sabre-uri" + }, "time": "2017-02-20T19:59:28+00:00" }, { "name": "seld/cli-prompt", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/Seldaek/cli-prompt.git", - "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd" + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/a19a7376a4689d4d94cab66ab4f3c816019ba8dd", - "reference": "a19a7376a4689d4d94cab66ab4f3c816019ba8dd", + "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5", + "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5", "shasum": "" }, "require": { "php": ">=5.3" }, + "require-dev": { + "phpstan/phpstan": "^0.12.63" + }, "type": "library", "extra": { "branch-alias": { @@ -1383,38 +1982,42 @@ "input", "prompt" ], - "time": "2017-03-18T11:32:45+00:00" + "support": { + "issues": "https://github.com/Seldaek/cli-prompt/issues", + "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4" + }, + "time": "2020-12-15T21:32:01+00:00" }, { - "name": "symfony/polyfill-php56", - "version": "v1.8.0", + "name": "symfony/deprecation-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "af98553c84912459db3f636329567809d639a8f6" + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/af98553c84912459db3f636329567809d639a8f6", - "reference": "af98553c84912459db3f636329567809d639a8f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" - }, "files": [ - "bootstrap.php" + "function.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1431,43 +2034,64 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2018-04-26T10:06:28+00:00" + "time": "2021-03-23T23:28:01+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.8.0", + "name": "symfony/polyfill-ctype", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "1a5ad95d9436cbff3296034fe9f8d586dce3fb3a" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/1a5ad95d9436cbff3296034fe9f8d586dce3fb3a", - "reference": "1a5ad95d9436cbff3296034fe9f8d586dce3fb3a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1475,53 +2099,73 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ - "compat", "compatibility", + "ctype", "polyfill", - "shim" + "portable" ], - "time": "2018-04-26T10:06:28+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" }, { "name": "symfony/yaml", - "version": "v3.3.6", + "version": "v5.3.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "ddc23324e6cfe066f3dd34a37ff494fa80b617ed" + "reference": "71719ab2409401711d619765aa255f9d352a59b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ddc23324e6cfe066f3dd34a37ff494fa80b617ed", - "reference": "ddc23324e6cfe066f3dd34a37ff494fa80b617ed", + "url": "https://api.github.com/repos/symfony/yaml/zipball/71719ab2409401711d619765aa255f9d352a59b2", + "reference": "71719ab2409401711d619765aa255f9d352a59b2", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "~1.8" + }, + "conflict": { + "symfony/console": "<4.4" }, "require-dev": { - "symfony/console": "~2.8|~3.0" + "symfony/console": "^4.4|^5.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" }, + "bin": [ + "Resources/bin/yaml-lint" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Yaml\\": "" @@ -1544,35 +2188,56 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Yaml Component", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", - "time": "2017-07-23T12:43:26+00:00" + "support": { + "source": "https://github.com/symfony/yaml/tree/v5.3.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-06-06T09:51:56+00:00" }, { "name": "webmozart/assert", - "version": "1.3.0", + "version": "1.10.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "url": "https://github.com/webmozarts/assert.git", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", + "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.2 || ^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^8.5.13" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -1596,35 +2261,91 @@ "check", "validate" ], - "time": "2018-01-29T19:49:41+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.10.0" + }, + "time": "2021-03-09T10:59:23+00:00" } ], "packages-dev": [ { - "name": "composer/semver", - "version": "1.4.2", + "name": "amphp/php-cs-fixer-config", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" + "url": "https://github.com/amphp/php-cs-fixer-config.git", + "reference": "2be2bee66105ace3276c573d41ab71d487bc4b64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", - "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", + "url": "https://api.github.com/repos/amphp/php-cs-fixer-config/zipball/2be2bee66105ace3276c573d41ab71d487bc4b64", + "reference": "2be2bee66105ace3276c573d41ab71d487bc4b64", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0" + "friendsofphp/php-cs-fixer": "^2.12", + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + "php-coveralls/php-coveralls": "^1.0.2", + "phpunit/phpunit": "^6.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "Amp\\CodeStyle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sascha-Oliver Prolic", + "email": "saschaprolic@googlemail.com" + } + ], + "description": "PHP CS Fixer config for AMP", + "support": { + "issues": "https://github.com/amphp/php-cs-fixer-config/issues", + "source": "https://github.com/amphp/php-cs-fixer-config/tree/master" + }, + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-01-11T22:22:36+00:00" + }, + { + "name": "composer/semver", + "version": "3.2.5", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/31f3ea725711245195f62e54ffa402d8ef2fdba9", + "reference": "31f3ea725711245195f62e54ffa402d8ef2fdba9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.54", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -1660,28 +2381,48 @@ "validation", "versioning" ], - "time": "2016-08-30T16:08:34+00:00" + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.2.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-05-24T12:41:47+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.1.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08" + "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08", - "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", + "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0", + "php": "^5.3.2 || ^7.0 || ^8.0", "psr/log": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "autoload": { @@ -1699,41 +2440,60 @@ "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Restarts a process without xdebug.", + "description": "Restarts a process without Xdebug.", "keywords": [ "Xdebug", "performance" ], - "time": "2018-04-11T15:42:36+00:00" + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/2.0.1" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-05-05T19:37:51+00:00" }, { "name": "doctrine/annotations", - "version": "v1.4.0", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", - "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", + "reference": "e6e7b7d5b45a2f2abc5460cc6396480b2b1d321f", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^5.6 || ^7.0" + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.7" + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^6.0 || ^8.1", + "phpstan/phpstan": "^0.12.20", + "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", + "symfony/cache": "^4.4 || ^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" @@ -1744,6 +2504,10 @@ "MIT" ], "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, { "name": "Roman Borschel", "email": "roman@code-factory.org" @@ -1752,10 +2516,6 @@ "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -1766,44 +2526,45 @@ } ], "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ "annotations", "docblock", "parser" ], - "time": "2017-02-24T16:22:25+00:00" + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.1" + }, + "time": "2021-05-16T18:07:53+00:00" }, { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", + "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1 || ^8.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -1817,43 +2578,66 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", "keywords": [ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T18:47:58+00:00" }, { "name": "doctrine/lexer", - "version": "v1.0.1", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { - "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" } }, "notification-url": "https://packagist.org/downloads/", @@ -1861,77 +2645,99 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ + "annotations", + "docblock", "lexer", - "parser" + "parser", + "php" ], - "time": "2014-09-09T13:34:57+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.12.0", + "version": "v2.19.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "a53f39a72cf0baa03909fae779a4de6d3772c74f" + "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/a53f39a72cf0baa03909fae779a4de6d3772c74f", - "reference": "a53f39a72cf0baa03909fae779a4de6d3772c74f", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/d5b8a9d852b292c2f8a035200fa6844b1f82300b", + "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b", "shasum": "" }, "require": { - "composer/semver": "^1.4", - "composer/xdebug-handler": "^1.0", + "composer/semver": "^1.4 || ^2.0 || ^3.0", + "composer/xdebug-handler": "^1.2 || ^2.0", "doctrine/annotations": "^1.2", "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.6 || >=7.0 <7.3", + "php": "^5.6 || ^7.0 || ^8.0", "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.2 || ^4.0", - "symfony/event-dispatcher": "^3.0 || ^4.0", - "symfony/filesystem": "^3.0 || ^4.0", - "symfony/finder": "^3.0 || ^4.0", - "symfony/options-resolver": "^3.0 || ^4.0", + "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", "symfony/polyfill-php70": "^1.0", "symfony/polyfill-php72": "^1.4", - "symfony/process": "^3.0 || ^4.0", - "symfony/stopwatch": "^3.0 || ^4.0" - }, - "conflict": { - "hhvm": "*" + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" }, "require-dev": { - "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", "justinrainbow/json-schema": "^5.0", - "keradus/cli-executor": "^1.1", + "keradus/cli-executor": "^1.4", "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.1", + "php-coveralls/php-coveralls": "^2.4.2", "php-cs-fixer/accessible-object": "^1.0", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.0", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.8 || ^7.1", - "phpunitgoodpractices/traits": "^1.4", - "symfony/phpunit-bridge": "^4.0" + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy-phpunit": "^1.1 || ^2.0", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1", + "symfony/phpunit-bridge": "^5.2.1", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" }, "suggest": { - "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." @@ -1942,7 +2748,7 @@ "type": "application", "extra": { "branch-alias": { - "dev-master": "2.12-dev" + "dev-master": "2.19-dev" } }, "autoload": { @@ -1958,6 +2764,8 @@ "tests/Test/IntegrationCaseFactory.php", "tests/Test/IntegrationCaseFactoryInterface.php", "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/Test/TokensWithObservedTransformers.php", "tests/TestCase.php" ] }, @@ -1966,30 +2774,509 @@ "MIT" ], "authors": [ - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - }, { "name": "Fabien Potencier", "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], "description": "A tool to automatically fix PHP code style", - "time": "2018-06-02T17:33:35+00:00" + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.0" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2021-05-03T21:43:24+00:00" }, { - "name": "league/event", - "version": "2.1.2", + "name": "hoa/consistency", + "version": "1.17.05.02", "source": { "type": "git", - "url": "https://github.com/thephpleague/event.git", - "reference": "e4bfc88dbcb60c8d8a2939a71f9813e141bbe4cd" + "url": "https://github.com/hoaproject/Consistency.git", + "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/event/zipball/e4bfc88dbcb60c8d8a2939a71f9813e141bbe4cd", - "reference": "e4bfc88dbcb60c8d8a2939a71f9813e141bbe4cd", + "url": "https://api.github.com/repos/hoaproject/Consistency/zipball/fd7d0adc82410507f332516faf655b6ed22e4c2f", + "reference": "fd7d0adc82410507f332516faf655b6ed22e4c2f", + "shasum": "" + }, + "require": { + "hoa/exception": "~1.0", + "php": ">=5.5.0" + }, + "require-dev": { + "hoa/stream": "~1.0", + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Consistency\\": "." + }, + "files": [ + "Prelude.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Consistency library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "autoloader", + "callable", + "consistency", + "entity", + "flex", + "keyword", + "library" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Consistency", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Consistency/issues", + "source": "https://central.hoa-project.net/Resource/Library/Consistency" + }, + "time": "2017-05-02T12:18:12+00:00" + }, + { + "name": "hoa/event", + "version": "1.17.01.13", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Event.git", + "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Event/zipball/6c0060dced212ffa3af0e34bb46624f990b29c54", + "reference": "6c0060dced212ffa3af0e34bb46624f990b29c54", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" + }, + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Event\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Event library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "event", + "library", + "listener", + "observer" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Event", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Event/issues", + "source": "https://central.hoa-project.net/Resource/Library/Event" + }, + "time": "2017-01-13T15:30:50+00:00" + }, + { + "name": "hoa/exception", + "version": "1.17.01.16", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Exception.git", + "reference": "091727d46420a3d7468ef0595651488bfc3a458f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Exception/zipball/091727d46420a3d7468ef0595651488bfc3a458f", + "reference": "091727d46420a3d7468ef0595651488bfc3a458f", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/event": "~1.0" + }, + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Exception\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Exception library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "exception", + "library" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Exception", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Exception/issues", + "source": "https://central.hoa-project.net/Resource/Library/Exception" + }, + "time": "2017-01-16T07:53:27+00:00" + }, + { + "name": "hoa/file", + "version": "1.17.07.11", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/File.git", + "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/File/zipball/35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", + "reference": "35cb979b779bc54918d2f9a4e02ed6c7a1fa67ca", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/event": "~1.0", + "hoa/exception": "~1.0", + "hoa/iterator": "~2.0", + "hoa/stream": "~1.0" + }, + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\File\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\File library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "Socket", + "directory", + "file", + "finder", + "library", + "link", + "temporary" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/File", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/File/issues", + "source": "https://central.hoa-project.net/Resource/Library/File" + }, + "time": "2017-07-11T07:42:15+00:00" + }, + { + "name": "hoa/iterator", + "version": "2.17.01.10", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Iterator.git", + "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Iterator/zipball/d1120ba09cb4ccd049c86d10058ab94af245f0cc", + "reference": "d1120ba09cb4ccd049c86d10058ab94af245f0cc", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" + }, + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Iterator\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Iterator library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "iterator", + "library" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Iterator", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Iterator/issues", + "source": "https://central.hoa-project.net/Resource/Library/Iterator" + }, + "time": "2017-01-10T10:34:47+00:00" + }, + { + "name": "hoa/protocol", + "version": "1.17.01.14", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Protocol.git", + "reference": "5c2cf972151c45f373230da170ea015deecf19e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Protocol/zipball/5c2cf972151c45f373230da170ea015deecf19e2", + "reference": "5c2cf972151c45f373230da170ea015deecf19e2", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/exception": "~1.0" + }, + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Protocol\\": "." + }, + "files": [ + "Wrapper.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Protocol library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "library", + "protocol", + "resource", + "stream", + "wrapper" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Protocol", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Protocol/issues", + "source": "https://central.hoa-project.net/Resource/Library/Protocol" + }, + "time": "2017-01-14T12:26:10+00:00" + }, + { + "name": "hoa/stream", + "version": "1.17.02.21", + "source": { + "type": "git", + "url": "https://github.com/hoaproject/Stream.git", + "reference": "3293cfffca2de10525df51436adf88a559151d82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hoaproject/Stream/zipball/3293cfffca2de10525df51436adf88a559151d82", + "reference": "3293cfffca2de10525df51436adf88a559151d82", + "shasum": "" + }, + "require": { + "hoa/consistency": "~1.0", + "hoa/event": "~1.0", + "hoa/exception": "~1.0", + "hoa/protocol": "~1.0" + }, + "require-dev": { + "hoa/test": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Hoa\\Stream\\": "." + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ivan Enderlin", + "email": "ivan.enderlin@hoa-project.net" + }, + { + "name": "Hoa community", + "homepage": "https://hoa-project.net/" + } + ], + "description": "The Hoa\\Stream library.", + "homepage": "https://hoa-project.net/", + "keywords": [ + "Context", + "bucket", + "composite", + "filter", + "in", + "library", + "out", + "protocol", + "stream", + "wrapper" + ], + "support": { + "docs": "https://central.hoa-project.net/Documentation/Library/Stream", + "email": "support@hoa-project.net", + "forum": "https://users.hoa-project.net/", + "irc": "irc://chat.freenode.net/hoaproject", + "issues": "https://github.com/hoaproject/Stream/issues", + "source": "https://central.hoa-project.net/Resource/Library/Stream" + }, + "time": "2017-02-21T16:01:06+00:00" + }, + { + "name": "league/event", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/event.git", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/event/zipball/d2cc124cf9a3fab2bb4ff963307f60361ce4d119", + "reference": "d2cc124cf9a3fab2bb4ff963307f60361ce4d119", "shasum": "" }, "require": { @@ -1997,7 +3284,7 @@ }, "require-dev": { "henrikbjorn/phpspec-code-coverage": "~1.0.1", - "phpspec/phpspec": "~2.0.0" + "phpspec/phpspec": "^2.2" }, "type": "library", "extra": { @@ -2026,30 +3313,35 @@ "event", "listener" ], - "time": "2015-05-21T12:24:47+00:00" + "support": { + "issues": "https://github.com/thephpleague/event/issues", + "source": "https://github.com/thephpleague/event/tree/master" + }, + "time": "2018-11-26T11:52:41+00:00" }, { "name": "macfja/phar-builder", - "version": "0.2.7", + "version": "0.2.8", "source": { "type": "git", "url": "https://github.com/MacFJA/PharBuilder.git", - "reference": "630b908ed22fae8611dfd2dff72930f7f395d8b6" + "reference": "4de607ddc765b95d1f9cd80d0ec0052e643cad66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MacFJA/PharBuilder/zipball/630b908ed22fae8611dfd2dff72930f7f395d8b6", - "reference": "630b908ed22fae8611dfd2dff72930f7f395d8b6", + "url": "https://api.github.com/repos/MacFJA/PharBuilder/zipball/4de607ddc765b95d1f9cd80d0ec0052e643cad66", + "reference": "4de607ddc765b95d1f9cd80d0ec0052e643cad66", "shasum": "" }, "require": { "league/event": "^2.1", - "macfja/symfony-console-filechooser": "~0.2", + "macfja/symfony-console-filechooser": "~0.2 || ~1", "neutron/signal-handler": "^1.0", "php": ">=5.4.0", "rych/bytesize": "~1.0", - "symfony/console": "~2.7 || ^3.0", - "symfony/process": "^2.7 || ^3.0", + "symfony/console": "~2.7 || ^3.0 || ^4.0", + "symfony/finder": "^4.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0", "webignition/readable-duration": "^0.2" }, "require-dev": { @@ -2090,25 +3382,29 @@ } ], "description": "CLI tool for create phar of your composer based project", - "time": "2018-05-07T09:29:55+00:00" + "support": { + "issues": "https://github.com/MacFJA/PharBuilder/issues", + "source": "https://github.com/MacFJA/PharBuilder/tree/master" + }, + "time": "2018-11-01T18:36:31+00:00" }, { "name": "macfja/symfony-console-filechooser", - "version": "0.2", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/MacFJA/Symfony-Console-Filechooser.git", - "reference": "abed2593d4a75130b4472cb9de62936a8498e096" + "reference": "f27248a6993718fcc469d442e305e1d83f5e1eb5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/MacFJA/Symfony-Console-Filechooser/zipball/abed2593d4a75130b4472cb9de62936a8498e096", - "reference": "abed2593d4a75130b4472cb9de62936a8498e096", + "url": "https://api.github.com/repos/MacFJA/Symfony-Console-Filechooser/zipball/f27248a6993718fcc469d442e305e1d83f5e1eb5", + "reference": "f27248a6993718fcc469d442e305e1d83f5e1eb5", "shasum": "" }, "require": { - "symfony/console": "~2.6 || ^3.0", - "symfony/finder": "~2.6 || ^3.0" + "hoa/file": "~1", + "symfony/console": "~2.6 || ^3.0 || ^4.0" }, "type": "library", "autoload": { @@ -2125,7 +3421,7 @@ "name": "MacFJA" } ], - "description": "Filechooser Helper for Symfony2 console (with autocompletion support)", + "description": "Filechooser Helper for Symfony console (with autocompletion support)", "keywords": [ "autocomplete", "autocompletion", @@ -2136,29 +3432,36 @@ "interactive", "symfony" ], - "time": "2017-08-05T19:16:50+00:00" + "support": { + "issues": "https://github.com/MacFJA/Symfony-Console-Filechooser/issues", + "source": "https://github.com/MacFJA/Symfony-Console-Filechooser/tree/1.0.0" + }, + "time": "2018-10-21T12:14:48+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.7.0", + "version": "1.10.2", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { @@ -2181,7 +3484,17 @@ "object", "object graph" ], - "time": "2017-10-19T19:58:43+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" }, { "name": "neutron/signal-handler", @@ -2224,81 +3537,37 @@ "keywords": [ "signal" ], + "support": { + "issues": "https://github.com/romainneutron/signal-handler/issues", + "source": "https://github.com/romainneutron/signal-handler/tree/master" + }, "time": "2014-01-15T17:24:13+00:00" }, - { - "name": "paragonie/random_compat", - "version": "v2.0.15", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/10bcb46e8f3d365170f6de9d05245aa066b81f09", - "reference": "10bcb46e8f3d365170f6de9d05245aa066b81f09", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "autoload": { - "files": [ - "lib/random.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "time": "2018-06-08T15:26:40+00:00" - }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2328,24 +3597,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, + "time": "2020-06-27T14:33:11+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -2375,27 +3648,31 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" }, { "name": "php-cs-fixer/diff", - "version": "v1.3.0", + "version": "v1.3.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", - "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", + "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", "symfony/process": "^3.3" }, "type": "library", @@ -2409,14 +3686,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, { "name": "SpacePossum" } @@ -2426,39 +3703,38 @@ "keywords": [ "diff" ], - "time": "2018-02-15T16:58:55+00:00" + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" + }, + "time": "2020-10-14T08:39:05+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2480,44 +3756,45 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + }, + "time": "2020-06-27T09:03:43+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "version": "5.2.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", + "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "~1.3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2528,44 +3805,49 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2020-09-03T19:13:55+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2578,42 +3860,47 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + }, + "time": "2020-09-17T18:55:26+00:00" }, { "name": "phpspec/prophecy", - "version": "1.7.6", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "Prophecy\\": "src/Prophecy" } }, "notification-url": "https://packagist.org/downloads/", @@ -2641,44 +3928,48 @@ "spy", "stub" ], - "time": "2018-04-18T13:57:24+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.3.2", + "version": "7.0.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac" + "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", - "reference": "c89677919c5dd6d3b3852f230a663118762218ac", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", + "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", + "php": ">=7.2", + "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-token-stream": "^3.1.1 || ^4.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^4.2.2", "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "theseer/tokenizer": "^1.1.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^8.2.2" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3.x-dev" + "dev-master": "7.0-dev" } }, "autoload": { @@ -2704,29 +3995,42 @@ "testing", "xunit" ], - "time": "2018-04-06T15:36:58+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-12-02T13:39:03+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", + "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2741,7 +4045,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2751,7 +4055,17 @@ "filesystem", "iterator" ], - "time": "2017-11-27T13:52:08+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:25:21+00:00" }, { "name": "phpunit/php-text-template", @@ -2792,32 +4106,36 @@ "keywords": [ "template" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1" + }, "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -2832,7 +4150,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2841,33 +4159,43 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:20:02+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.2", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "reference": "472b687829041c24b25f475e14c2f38a09edf1c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2", + "reference": "472b687829041c24b25f475e14c2f38a09edf1c2", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2890,57 +4218,67 @@ "keywords": [ "tokenizer" ], - "time": "2017-11-27T05:48:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2020-11-30T08:38:46+00:00" }, { "name": "phpunit/phpunit", - "version": "6.5.8", + "version": "8.5.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b" + "reference": "79067856d85421c56d413bd238d4e2cd6b0e54da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4f21a3c6b97c42952fd5c2837bb354ec0199b97b", - "reference": "4f21a3c6b97c42952fd5c2837bb354ec0199b97b", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/79067856d85421c56d413bd238d4e2cd6b0e54da", + "reference": "79067856d85421c56d413bd238d4e2cd6b0e54da", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.3", - "phpunit/php-file-iterator": "^1.4.3", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.0", + "phar-io/manifest": "^2.0.1", + "phar-io/version": "^3.0.2", + "php": ">=7.2", + "phpspec/prophecy": "^1.10.3", + "phpunit/php-code-coverage": "^7.0.12", + "phpunit/php-file-iterator": "^2.0.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.5", - "sebastian/comparator": "^2.1", - "sebastian/diff": "^2.0", - "sebastian/environment": "^3.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^2.0", + "phpunit/php-timer": "^2.1.2", + "sebastian/comparator": "^3.0.2", + "sebastian/diff": "^3.0.2", + "sebastian/environment": "^4.2.3", + "sebastian/exporter": "^3.1.2", + "sebastian/global-state": "^3.0.0", "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^1.0", + "sebastian/resource-operations": "^2.0.1", + "sebastian/type": "^1.1.3", "sebastian/version": "^2.0.1" }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" - }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0.0" }, "bin": [ "phpunit" @@ -2948,7 +4286,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5.x-dev" + "dev-master": "8.5-dev" } }, "autoload": { @@ -2974,66 +4312,118 @@ "testing", "xunit" ], - "time": "2018-04-10T11:38:34+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.17" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-23T05:12:43+00:00" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "5.0.7", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/3eaf040f20154d27d6da59ca2c6e28ac8fd56dce", - "reference": "3eaf040f20154d27d6da59ca2c6e28ac8fd56dce", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.1" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.5" - }, - "suggest": { - "ext-soap": "*" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Cache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "Common interface for caching libraries", "keywords": [ - "mock", - "xunit" + "cache", + "psr", + "psr-6" ], - "time": "2018-05-29T13:50:43+00:00" + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.1" + }, + "time": "2021-03-05T17:36:06+00:00" }, { "name": "rych/bytesize", @@ -3078,27 +4468,31 @@ "keywords": [ "filesize" ], + "support": { + "issues": "https://github.com/rchouinard/bytesize/issues", + "source": "https://github.com/rchouinard/bytesize/tree/master" + }, "time": "2014-04-04T18:06:18+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -3123,34 +4517,44 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:15:22+00:00" }, { "name": "sebastian/comparator", - "version": "2.1.3", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", - "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0 || ^3.0", + "php": ">=7.1", + "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.4" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3163,6 +4567,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -3174,10 +4582,6 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -3187,32 +4591,43 @@ "compare", "equality" ], - "time": "2018-02-01T13:46:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T08:04:30+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3225,46 +4640,62 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:59:04+00:00" }, { "name": "sebastian/environment", - "version": "3.1.0", + "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", - "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^6.1" + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.2-dev" } }, "autoload": { @@ -3289,24 +4720,34 @@ "environment", "hhvm" ], - "time": "2017-07-01T08:51:00+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:53:42+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", + "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { @@ -3329,6 +4770,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -3337,17 +4782,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -3356,27 +4797,40 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:47:53+00:00" }, { "name": "sebastian/global-state", - "version": "2.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", - "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", + "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "ext-dom": "*", + "phpunit/phpunit": "^8.0" }, "suggest": { "ext-uopz": "*" @@ -3384,7 +4838,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3407,24 +4861,34 @@ "keywords": [ "global state" ], - "time": "2017-04-27T15:39:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:43:24+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", - "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, @@ -3454,24 +4918,34 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-08-03T12:35:26+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:40:27+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "773f97c67f28de00d397be301821b06708fca0be" + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", - "reference": "773f97c67f28de00d397be301821b06708fca0be", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -3499,24 +4973,34 @@ ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2017-03-29T09:07:27+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:37:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", - "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", + "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -3537,14 +5021,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -3552,29 +5036,39 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2017-03-03T06:23:57+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:34:24+00:00" }, { "name": "sebastian/resource-operations", - "version": "1.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -3594,7 +5088,73 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:30:19+00:00" + }, + { + "name": "sebastian/type", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-30T07:25:11+00:00" }, { "name": "sebastian/version", @@ -3637,51 +5197,58 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/master" + }, "time": "2016-10-03T07:35:21+00:00" }, { "name": "symfony/console", - "version": "v3.3.6", + "version": "v4.4.25", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "b0878233cb5c4391347e5495089c7af11b8e6201" + "reference": "a62acecdf5b50e314a4f305cd01b5282126f3095" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b0878233cb5c4391347e5495089c7af11b8e6201", - "reference": "b0878233cb5c4391347e5495089c7af11b8e6201", + "url": "https://api.github.com/repos/symfony/console/zipball/a62acecdf5b50e314a4f305cd01b5282126f3095", + "reference": "a62acecdf5b50e314a4f305cd01b5282126f3095", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.1.3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4", + "symfony/event-dispatcher": "<4.3|>=5", + "symfony/lock": "<4.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~3.3", - "symfony/dependency-injection": "~3.3", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/filesystem": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/event-dispatcher": "^4.3", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^3.4|^4.0|^5.0", + "symfony/var-dumper": "^4.3|^5.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", - "symfony/filesystem": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -3704,103 +5271,67 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", - "time": "2017-07-29T21:27:59+00:00" - }, - { - "name": "symfony/debug", - "version": "v3.3.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "7c13ae8ce1e2adbbd574fc39de7be498e1284e13" + "support": { + "source": "https://github.com/symfony/console/tree/v4.4.25" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/7c13ae8ce1e2adbbd574fc39de7be498e1284e13", - "reference": "7c13ae8ce1e2adbbd574fc39de7be498e1284e13", - "shasum": "" - }, - "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" - }, - "require-dev": { - "symfony/http-kernel": "~2.8|~3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://symfony.com/sponsor", + "type": "custom" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com", - "time": "2017-07-28T15:27:31+00:00" + "time": "2021-05-26T11:20:16+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.3.6", + "version": "v4.4.25", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e" + "reference": "047773e7016e4fd45102cedf4bd2558ae0d0c32f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67535f1e3fd662bdc68d7ba317c93eecd973617e", - "reference": "67535f1e3fd662bdc68d7ba317c93eecd973617e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/047773e7016e4fd45102cedf4bd2558ae0d0c32f", + "reference": "047773e7016e4fd45102cedf4bd2558ae0d0c32f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1.3", + "symfony/event-dispatcher-contracts": "^1.1" }, "conflict": { - "symfony/dependency-injection": "<3.3" + "symfony/dependency-injection": "<3.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "1.1" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~3.3", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "^3.4|^4.0|^5.0", + "symfony/dependency-injection": "^3.4|^4.0|^5.0", + "symfony/error-handler": "~3.4|~4.4", + "symfony/expression-language": "^3.4|^4.0|^5.0", + "symfony/http-foundation": "^3.4|^4.0|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^3.4|^4.0|^5.0" }, "suggest": { "symfony/dependency-injection": "", "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -3823,33 +5354,125 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", - "time": "2017-06-09T14:53:08+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v4.4.25" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-26T17:39:37+00:00" }, { - "name": "symfony/filesystem", - "version": "v3.3.6", + "name": "symfony/event-dispatcher-contracts", + "version": "v1.1.9", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "427987eb4eed764c3b6e38d52a0f87989e010676" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/427987eb4eed764c3b6e38d52a0f87989e010676", - "reference": "427987eb4eed764c3b6e38d52a0f87989e010676", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", + "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1.3" + }, + "suggest": { + "psr/event-dispatcher": "", + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "1.1-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v1.1.9" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-07-06T13:19:58+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "348116319d7fb7d1faa781d26a48922428013eb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/348116319d7fb7d1faa781d26a48922428013eb2", + "reference": "348116319d7fb7d1faa781d26a48922428013eb2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" @@ -3872,33 +5495,45 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "time": "2017-07-11T07:17:58+00:00" + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/finder", - "version": "v3.3.6", + "version": "v4.4.25", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4" + "reference": "ed33314396d968a8936c95f5bd1b88bd3b3e94a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/baea7f66d30854ad32988c11a09d7ffd485810c4", - "reference": "baea7f66d30854ad32988c11a09d7ffd485810c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/ed33314396d968a8936c95f5bd1b88bd3b3e94a3", + "reference": "ed33314396d968a8936c95f5bd1b88bd3b3e94a3", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1.3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -3921,33 +5556,48 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "time": "2017-06-01T21:01:25+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v4.4.25" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-26T11:20:16+00:00" }, { "name": "symfony/options-resolver", - "version": "v3.3.6", + "version": "v5.3.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0" + "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/ff48982d295bcac1fd861f934f041ebc73ae40f0", - "reference": "ff48982d295bcac1fd861f934f041ebc73ae40f0", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/162e886ca035869866d233a2bfef70cc28f9bbe5", + "reference": "162e886ca035869866d233a2bfef70cc28f9bbe5", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.15" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\OptionsResolver\\": "" @@ -3970,31 +5620,48 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony OptionsResolver Component", + "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", "keywords": [ "config", "configuration", "options" ], - "time": "2017-04-12T14:14:56+00:00" + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-26T17:43:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.8.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "3296adf6a6454a050679cde90f95350ad604b171" + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", - "reference": "3296adf6a6454a050679cde90f95350ad604b171", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1", + "reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "suggest": { "ext-mbstring": "For best performance" @@ -4002,7 +5669,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4036,42 +5707,51 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" }, { "name": "symfony/polyfill-php70", - "version": "v1.8.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6" + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/77454693d8f10dd23bb24955cffd2d82db1007a6", - "reference": "77454693d8f10dd23bb24955cffd2d82db1007a6", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0", - "php": ">=5.3.3" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "1.8-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php70\\": "" + "dev-main": "1.20-dev" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4095,29 +5775,50 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-23T14:02:19+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.8.0", + "version": "v1.23.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46" + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/a4576e282d782ad82397f3e4ec1df8e0f0cafb46", - "reference": "a4576e282d782ad82397f3e4ec1df8e0f0cafb46", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { @@ -4150,31 +5851,205 @@ "portable", "shim" ], - "time": "2018-04-26T10:06:28+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" }, { - "name": "symfony/process", - "version": "v3.3.6", + "name": "symfony/polyfill-php73", + "version": "v1.23.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/07432804942b9f6dd7b7377faf9920af5f95d70a", - "reference": "07432804942b9f6dd7b7377faf9920af5f95d70a", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "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 backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.23.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/process", + "version": "v4.4.25", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "cd61e6dd273975c6625316de9d141ebd197f93c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/cd61e6dd273975c6625316de9d141ebd197f93c9", + "reference": "cd61e6dd273975c6625316de9d141ebd197f93c9", + "shasum": "" + }, + "require": { + "php": ">=7.1.3" + }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -4197,33 +6072,125 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2017-07-13T13:05:09+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v4.4.25" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-26T11:20:16+00:00" }, { - "name": "symfony/stopwatch", - "version": "v3.3.6", + "name": "symfony/service-contracts", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "602a15299dc01556013b07167d4f5d3a60e90d15" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/602a15299dc01556013b07167d4f5d3a60e90d15", - "reference": "602a15299dc01556013b07167d4f5d3a60e90d15", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "suggest": { + "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-main": "2.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-04-01T10:43:52+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "313d02f59d6543311865007e5ff4ace05b35ee65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/313d02f59d6543311865007e5ff4ace05b35ee65", + "reference": "313d02f59d6543311865007e5ff4ace05b35ee65", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", "autoload": { "psr-4": { "Symfony\\Component\\Stopwatch\\": "" @@ -4246,29 +6213,46 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Stopwatch Component", + "description": "Provides a way to profile code", "homepage": "https://symfony.com", - "time": "2017-04-12T14:14:56+00:00" + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-26T17:43:10+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -4288,7 +6272,17 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" }, { "name": "webignition/readable-duration", @@ -4331,20 +6325,28 @@ "readable", "time" ], + "support": { + "issues": "https://github.com/webignition/readable-duration/issues", + "source": "https://github.com/webignition/readable-duration/tree/master" + }, "time": "2013-03-28T15:26:25+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "kelunik/acme": 20, + "amphp/php-cs-fixer-config": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7", + "php": ">=7.2", "ext-openssl": "*" }, "platform-dev": [], "platform-overrides": { - "php": "7.0.0" - } + "php": "7.2.5" + }, + "plugin-api-version": "2.0.0" } diff --git a/src/AcmeFactory.php b/src/AcmeFactory.php index 09bc1f1..36fcc5f 100644 --- a/src/AcmeFactory.php +++ b/src/AcmeFactory.php @@ -11,8 +11,10 @@ use Kelunik\Acme\Crypto\PrivateKey; use Monolog\Logger; use Monolog\Processor\PsrLogMessageProcessor; -class AcmeFactory { - public function build(string $directory, PrivateKey $keyPair): AcmeService { +class AcmeFactory +{ + public function build(string $directory, PrivateKey $keyPair): AcmeService + { $logger = null; if (\getenv('ACME_LOG')) { $logger = new Logger('acme'); @@ -23,6 +25,6 @@ class AcmeFactory { $logger->pushHandler($handler); } - return new AcmeService(new AcmeClient($directory, $keyPair, null, null, $logger)); + return new AcmeService(new AcmeClient($directory, $keyPair, null, null, null, $logger)); } } diff --git a/src/Commands/Auto.php b/src/Commands/Auto.php index f78dce0..74c6fd6 100644 --- a/src/Commands/Auto.php +++ b/src/Commands/Auto.php @@ -2,7 +2,6 @@ namespace Kelunik\AcmeClient\Commands; -use Amp\ByteStream\Message; use Amp\File; use Amp\File\FilesystemException; use Amp\Process\Process; @@ -14,32 +13,65 @@ use League\CLImate\Argument\Manager; use League\CLImate\CLImate; use Symfony\Component\Yaml\Exception\ParseException; use Symfony\Component\Yaml\Yaml; +use function Amp\ByteStream\buffer; use function Amp\call; -class Auto implements Command { - const EXIT_CONFIG_ERROR = 1; - const EXIT_SETUP_ERROR = 2; - const EXIT_ISSUANCE_ERROR = 3; - const EXIT_ISSUANCE_PARTIAL = 4; - const EXIT_ISSUANCE_OK = 5; +class Auto implements Command +{ + private const EXIT_CONFIG_ERROR = 1; + private const EXIT_SETUP_ERROR = 2; + private const EXIT_ISSUANCE_ERROR = 3; + private const EXIT_ISSUANCE_PARTIAL = 4; + private const EXIT_ISSUANCE_OK = 5; - const STATUS_NO_CHANGE = 0; - const STATUS_RENEWED = 1; + private const STATUS_NO_CHANGE = 0; + private const STATUS_RENEWED = 1; + + public static function getDefinition(): array + { + $server = AcmeClient\getArgumentDescription('server'); + $storage = AcmeClient\getArgumentDescription('storage'); + + $server['required'] = false; + $storage['required'] = false; + + $args = [ + 'server' => $server, + 'storage' => $storage, + 'config' => [ + 'prefix' => 'c', + 'longPrefix' => 'config', + 'description' => 'Configuration file to read.', + 'required' => true, + ], + ]; + + $configPath = AcmeClient\getConfigPath(); + + if ($configPath) { + $args['config']['required'] = false; + $args['config']['defaultValue'] = $configPath; + } + + return $args; + } private $climate; - public function __construct(CLImate $climate) { + public function __construct(CLImate $climate) + { $this->climate = $climate; } - public function execute(Manager $args): Promise { + public function execute(Manager $args): Promise + { return call(function () use ($args) { $configPath = $args->get('config'); try { /** @var array $config */ $config = Yaml::parse( - yield File\get($configPath) + yield File\read($configPath) ); } catch (FilesystemException $e) { $this->climate->error("Config file ({$configPath}) not found."); @@ -112,8 +144,8 @@ class Auto implements Command { if ($exit !== 0) { $this->climate->error("Registration failed ({$exit})"); - $this->climate->br()->out(yield new Message($process->getStdout())); - $this->climate->br()->error(yield new Message($process->getStderr())); + $this->climate->br()->out(yield buffer($process->getStdout())); + $this->climate->br()->error(yield buffer($process->getStderr())); return self::EXIT_SETUP_ERROR; } @@ -147,7 +179,10 @@ class Auto implements Command { foreach ($values as $i => $value) { if ($value === self::STATUS_RENEWED) { $certificate = $config['certificates'][$i]; - $this->climate->info('Certificate for ' . \implode(', ', \array_keys($this->toDomainPathMap($certificate['paths']))) . ' successfully renewed.'); + $this->climate->info('Certificate for ' . \implode( + ', ', + \array_keys($this->toDomainPathMap($certificate['paths'])) + ) . ' successfully renewed.'); } } } @@ -155,7 +190,10 @@ class Auto implements Command { if ($status['failure'] > 0) { foreach ($errors as $i => $error) { $certificate = $config['certificates'][$i]; - $this->climate->error('Issuance for the following domains failed: ' . \implode(', ', \array_keys($this->toDomainPathMap($certificate['paths'])))); + $this->climate->error('Issuance for the following domains failed: ' . \implode( + ', ', + \array_keys($this->toDomainPathMap($certificate['paths'])) + )); $this->climate->error("Reason: {$error}"); } @@ -182,7 +220,12 @@ class Auto implements Command { * @throws AcmeException if something does wrong * @throws \Throwable */ - private function checkAndIssue(array $certificate, string $server, string $storage, int $concurrency = null): \Generator { + private function checkAndIssue( + array $certificate, + string $server, + string $storage, + int $concurrency = null + ): \Generator { $domainPathMap = $this->toDomainPathMap($certificate['paths']); $domains = \array_keys($domainPathMap); $commonName = \reset($domains); @@ -261,7 +304,8 @@ class Auto implements Command { throw new AcmeException("Unexpected exit code ({$exit}) for '{$process->getCommand()}'."); } - private function toDomainPathMap(array $paths) { + private function toDomainPathMap(array $paths) + { $result = []; foreach ($paths as $path => $domains) { @@ -314,32 +358,4 @@ MESSAGE; return $result; } - - public static function getDefinition(): array { - $server = AcmeClient\getArgumentDescription('server'); - $storage = AcmeClient\getArgumentDescription('storage'); - - $server['required'] = false; - $storage['required'] = false; - - $args = [ - 'server' => $server, - 'storage' => $storage, - 'config' => [ - 'prefix' => 'c', - 'longPrefix' => 'config', - 'description' => 'Configuration file to read.', - 'required' => true, - ], - ]; - - $configPath = AcmeClient\getConfigPath(); - - if ($configPath) { - $args['config']['required'] = false; - $args['config']['defaultValue'] = $configPath; - } - - return $args; - } } diff --git a/src/Commands/Check.php b/src/Commands/Check.php index 8bc2df1..07ced29 100644 --- a/src/Commands/Check.php +++ b/src/Commands/Check.php @@ -10,15 +10,43 @@ use Kelunik\Certificate\Certificate; use League\CLImate\Argument\Manager; use League\CLImate\CLImate; use function Amp\call; +use function Kelunik\AcmeClient\getArgumentDescription; + +class Check implements Command +{ + public static function getDefinition(): array + { + return [ + 'server' => getArgumentDescription('server'), + 'storage' => getArgumentDescription('storage'), + 'name' => [ + 'longPrefix' => 'name', + 'description' => 'Common name of the certificate to check.', + 'required' => true, + ], + 'ttl' => [ + 'longPrefix' => 'ttl', + 'description' => 'Minimum valid time in days.', + 'defaultValue' => 30, + 'castTo' => 'int', + ], + 'names' => [ + 'longPrefix' => 'names', + 'description' => 'Names that must be covered by the certificate identified based on the common name. Names have to be separated by commas.', + 'required' => false, + ], + ]; + } -class Check implements Command { private $climate; - public function __construct(CLImate $climate) { + public function __construct(CLImate $climate) + { $this->climate = $climate; } - public function execute(Manager $args): Promise { + public function execute(Manager $args): Promise + { return call(function () use ($args) { $server = AcmeClient\resolveServer($args->get('server')); $server = AcmeClient\serverToKeyname($server); @@ -44,7 +72,10 @@ class Check implements Command { $missingNames = \array_diff($names, $cert->getNames()); if ($missingNames) { - $this->climate->comment(' The following names are not covered: ' . \implode(', ', $missingNames))->br(); + $this->climate->comment(' The following names are not covered: ' . \implode( + ', ', + $missingNames + ))->br(); return 1; } @@ -59,27 +90,4 @@ class Check implements Command { return 1; }); } - - public static function getDefinition(): array { - return [ - 'server' => \Kelunik\AcmeClient\getArgumentDescription('server'), - 'storage' => \Kelunik\AcmeClient\getArgumentDescription('storage'), - 'name' => [ - 'longPrefix' => 'name', - 'description' => 'Common name of the certificate to check.', - 'required' => true, - ], - 'ttl' => [ - 'longPrefix' => 'ttl', - 'description' => 'Minimum valid time in days.', - 'defaultValue' => 30, - 'castTo' => 'int', - ], - 'names' => [ - 'longPrefix' => 'names', - 'description' => 'Names that must be covered by the certificate identified based on the common name. Names have to be separated by commas.', - 'required' => false, - ], - ]; - } } diff --git a/src/Commands/Command.php b/src/Commands/Command.php index 621486f..37dca42 100644 --- a/src/Commands/Command.php +++ b/src/Commands/Command.php @@ -5,7 +5,8 @@ namespace Kelunik\AcmeClient\Commands; use Amp\Promise; use League\CLImate\Argument\Manager; -interface Command { +interface Command +{ public function execute(Manager $args): Promise; public static function getDefinition(): array; diff --git a/src/Commands/Issue.php b/src/Commands/Issue.php index e6d8594..04a4a5d 100644 --- a/src/Commands/Issue.php +++ b/src/Commands/Issue.php @@ -21,196 +21,18 @@ use League\CLImate\Argument\Manager; use League\CLImate\CLImate; use function Amp\call; use function Kelunik\Acme\generateKeyAuthorization; +use function Kelunik\AcmeClient\getArgumentDescription; +use function Kelunik\AcmeClient\normalizePath; +use function Kelunik\AcmeClient\resolveServer; +use function Kelunik\AcmeClient\serverToKeyname; -class Issue implements Command { - private $climate; - private $acmeFactory; - - public function __construct(CLImate $climate, AcmeFactory $acmeFactory) { - $this->climate = $climate; - $this->acmeFactory = $acmeFactory; - } - - public function execute(Manager $args): Promise { - return call(function () use ($args) { - $user = null; - - if (0 !== \stripos(PHP_OS, 'WIN')) { - if (\posix_geteuid() !== 0) { - $processUser = \posix_getpwnam(\posix_geteuid()); - $currentUsername = $processUser['name']; - $user = $args->get('user') ?: $currentUsername; - - if ($currentUsername !== $user) { - throw new AcmeException('Running this script with --user only works as root!'); - } - } else { - $user = $args->get('user') ?: 'www-data'; - } - } - - $domains = \array_map('trim', \explode(':', \str_replace([',', ';'], ':', $args->get('domains')))); - yield from $this->checkDnsRecords($domains); - - $docRoots = \explode(PATH_SEPARATOR, \str_replace("\\", '/', $args->get('path'))); - $docRoots = \array_map(function ($root) { - return \rtrim($root, '/'); - }, $docRoots); - - if (\count($domains) < \count($docRoots)) { - throw new AcmeException('Specified more document roots than domains.'); - } - - if (\count($domains) > \count($docRoots)) { - $docRoots = \array_merge( - $docRoots, - \array_fill(\count($docRoots), \count($domains) - \count($docRoots), \end($docRoots)) - ); - } - - $keyStore = new KeyStore(\Kelunik\AcmeClient\normalizePath($args->get('storage'))); - - $server = \Kelunik\AcmeClient\resolveServer($args->get('server')); - $keyFile = \Kelunik\AcmeClient\serverToKeyname($server); - - try { - $key = yield $keyStore->get("accounts/{$keyFile}.pem"); - } catch (KeyStoreException $e) { - throw new AcmeException("Account key not found, did you run 'bin/acme setup'?", 0, $e); - } - - $this->climate->br(); - - $acme = $this->acmeFactory->build($server, $key); - $concurrency = \min(20, \max($args->get('challenge-concurrency'), 1)); - - /** @var \Throwable[] $errors */ - list($errors) = yield AcmeClient\concurrentMap($concurrency, $domains, function ($domain, $i) use ($acme, $key, $docRoots, $user) { - return $this->solveChallenge($acme, $key, $domain, $docRoots[$i], $user); - }); - - if ($errors) { - foreach ($errors as $error) { - $this->climate->error($error->getMessage()); - } - - throw new AcmeException('Issuance failed, not all challenges could be solved.'); - } - - $keyPath = 'certs/' . $keyFile . '/' . \reset($domains) . '/key.pem'; - $bits = $args->get('bits'); - - $regenerateKey = $args->get('rekey'); - - try { - $key = yield $keyStore->get($keyPath); - } catch (KeyStoreException $e) { - $regenerateKey = true; - } - - if ($regenerateKey) { - $this->climate->whisper(' Generating new key pair ...'); - $key = (new RsaKeyGenerator($bits))->generateKey(); - } - - $this->climate->br(); - $this->climate->whisper(' Requesting certificate ...'); - - $csr = yield (new OpensslCsrGenerator)->generateCsr($key, $domains); - - $location = yield $acme->requestCertificate($csr); - $certificates = yield $acme->pollForCertificate($location); - - $path = AcmeClient\normalizePath($args->get('storage')) . '/certs/' . $keyFile; - $certificateStore = new CertificateStore($path); - - yield $keyStore->put($keyPath, $key); - yield $certificateStore->put($certificates); - - $this->climate->info(' Successfully issued certificate.'); - $this->climate->info(" See {$path}/" . \reset($domains)); - $this->climate->br(); - - return 0; - }); - } - - private function solveChallenge(AcmeService $acme, PrivateKey $key, string $domain, string $path, string $user = null): \Generator { - list($location, $challenges) = yield $acme->requestChallenges($domain); - $goodChallenges = $this->findSuitableCombination($challenges); - - if (empty($goodChallenges)) { - throw new AcmeException("Couldn't find any combination of challenges which this client can solve!"); - } - - $challenge = $challenges->challenges[\reset($goodChallenges)]; - $token = $challenge->token; - - if (!\preg_match('#^[a-zA-Z0-9-_]+$#', $token)) { - throw new AcmeException('Protocol violation: Invalid Token!'); - } - - $payload = generateKeyAuthorization($key, $token, new OpensslBackend); - - $this->climate->whisper(" Providing payload at http://{$domain}/.well-known/acme-challenge/{$token}"); - - $challengeStore = new ChallengeStore($path); - - try { - yield $challengeStore->put($token, $payload, $user); - - yield (new Http01)->verifyChallenge($domain, $token, $payload); - yield $acme->answerChallenge($challenge->uri, $payload); - yield $acme->pollForChallenge($location); - - $this->climate->comment(" {$domain} is now authorized."); - } finally { - yield $challengeStore->delete($token); - } - } - - private function checkDnsRecords(array $domains): \Generator { - $promises = AcmeClient\concurrentMap(10, $domains, function (string $domain): Promise { - return Dns\resolve($domain); - }); - - list($errors) = yield Promise\any($promises); - - if ($errors) { - $failedDomains = \implode(', ', \array_keys($errors)); - $reasons = \implode("\n\n", \array_map(function ($exception) { - /** @var \Throwable $exception */ - return \get_class($exception) . ': ' . $exception->getMessage(); - }, $errors)); - - throw new AcmeException("Couldn't resolve the following domains to an IPv4 nor IPv6 record: {$failedDomains}\n\n{$reasons}"); - } - } - - private function findSuitableCombination(\stdClass $response): array { - $challenges = $response->challenges ?? []; - $combinations = $response->combinations ?? []; - $goodChallenges = []; - - foreach ($challenges as $i => $challenge) { - if ($challenge->type === 'http-01') { - $goodChallenges[] = $i; - } - } - - foreach ($goodChallenges as $i => $challenge) { - if (!\in_array([$challenge], $combinations, true)) { - unset($goodChallenges[$i]); - } - } - - return $goodChallenges; - } - - public static function getDefinition(): array { +class Issue implements Command +{ + public static function getDefinition(): array + { return [ - 'server' => AcmeClient\getArgumentDescription('server'), - 'storage' => AcmeClient\getArgumentDescription('storage'), + 'server' => getArgumentDescription('server'), + 'storage' => getArgumentDescription('storage'), 'domains' => [ 'prefix' => 'd', 'longPrefix' => 'domains', @@ -247,4 +69,201 @@ class Issue implements Command { ], ]; } + + private $climate; + private $acmeFactory; + + public function __construct(CLImate $climate, AcmeFactory $acmeFactory) + { + $this->climate = $climate; + $this->acmeFactory = $acmeFactory; + } + + public function execute(Manager $args): Promise + { + return call(function () use ($args) { + $user = null; + + if (0 !== \stripos(PHP_OS, 'WIN')) { + if (\posix_geteuid() !== 0) { + $processUser = \posix_getpwnam(\posix_geteuid()); + $currentUsername = $processUser['name']; + $user = $args->get('user') ?: $currentUsername; + + if ($currentUsername !== $user) { + throw new AcmeException('Running this script with --user only works as root!'); + } + } else { + $user = $args->get('user') ?: 'www-data'; + } + } + + $domains = \array_map('trim', \explode(':', \str_replace([',', ';'], ':', $args->get('domains')))); + yield from $this->checkDnsRecords($domains); + + $docRoots = \explode(PATH_SEPARATOR, \str_replace("\\", '/', $args->get('path'))); + $docRoots = \array_map(function ($root) { + return \rtrim($root, '/'); + }, $docRoots); + + if (\count($domains) < \count($docRoots)) { + throw new AcmeException('Specified more document roots than domains.'); + } + + if (\count($domains) > \count($docRoots)) { + $docRoots = \array_merge( + $docRoots, + \array_fill(\count($docRoots), \count($domains) - \count($docRoots), \end($docRoots)) + ); + } + + $keyStore = new KeyStore(normalizePath($args->get('storage'))); + + $server = resolveServer($args->get('server')); + $keyFile = serverToKeyname($server); + + try { + $key = yield $keyStore->get("accounts/{$keyFile}.pem"); + } catch (KeyStoreException $e) { + throw new AcmeException("Account key not found, did you run 'bin/acme setup'?", 0, $e); + } + + $this->climate->br(); + + $acme = $this->acmeFactory->build($server, $key); + $concurrency = \min(20, \max($args->get('challenge-concurrency'), 1)); + + /** @var \Throwable[] $errors */ + [$errors] = yield AcmeClient\concurrentMap( + $concurrency, + $domains, + function ($domain, $i) use ($acme, $key, $docRoots, $user) { + return $this->solveChallenge($acme, $key, $domain, $docRoots[$i], $user); + } + ); + + if ($errors) { + foreach ($errors as $error) { + $this->climate->error($error->getMessage()); + } + + throw new AcmeException('Issuance failed, not all challenges could be solved.'); + } + + $keyPath = 'certs/' . $keyFile . '/' . \reset($domains) . '/key.pem'; + $bits = $args->get('bits'); + + $regenerateKey = $args->get('rekey'); + + try { + $key = yield $keyStore->get($keyPath); + } catch (KeyStoreException $e) { + $regenerateKey = true; + } + + if ($regenerateKey) { + $this->climate->whisper(' Generating new key pair ...'); + $key = (new RsaKeyGenerator($bits))->generateKey(); + } + + $this->climate->br(); + $this->climate->whisper(' Requesting certificate ...'); + + $csr = yield (new OpensslCsrGenerator)->generateCsr($key, $domains); + + $location = yield $acme->requestCertificate($csr); + $certificates = yield $acme->pollForCertificate($location); + + $path = normalizePath($args->get('storage')) . '/certs/' . $keyFile; + $certificateStore = new CertificateStore($path); + + yield $keyStore->put($keyPath, $key); + yield $certificateStore->put($certificates); + + $this->climate->info(' Successfully issued certificate.'); + $this->climate->info(" See {$path}/" . \reset($domains)); + $this->climate->br(); + + return 0; + }); + } + + private function solveChallenge( + AcmeService $acme, + PrivateKey $key, + string $domain, + string $path, + string $user = null + ): \Generator { + [$location, $challenges] = yield $acme->requestChallenges($domain); + $goodChallenges = $this->findSuitableCombination($challenges); + + if (empty($goodChallenges)) { + throw new AcmeException("Couldn't find any combination of challenges which this client can solve!"); + } + + $challenge = $challenges->challenges[\reset($goodChallenges)]; + $token = $challenge->token; + + if (!\preg_match('#^[a-zA-Z0-9-_]+$#', $token)) { + throw new AcmeException('Protocol violation: Invalid Token!'); + } + + $payload = generateKeyAuthorization($key, $token, new OpensslBackend); + + $this->climate->whisper(" Providing payload at http://{$domain}/.well-known/acme-challenge/{$token}"); + + $challengeStore = new ChallengeStore($path); + + try { + yield $challengeStore->put($token, $payload, $user); + + yield (new Http01)->verifyChallenge($domain, $token, $payload); + yield $acme->answerChallenge($challenge->uri, $payload); + yield $acme->pollForChallenge($location); + + $this->climate->comment(" {$domain} is now authorized."); + } finally { + yield $challengeStore->delete($token); + } + } + + private function checkDnsRecords(array $domains): \Generator + { + $promises = AcmeClient\concurrentMap(10, $domains, function (string $domain): Promise { + return Dns\resolve($domain); + }); + + [$errors] = yield Promise\any($promises); + + if ($errors) { + $failedDomains = \implode(', ', \array_keys($errors)); + $reasons = \implode("\n\n", \array_map(static function (\Throwable $exception) { + return \get_class($exception) . ': ' . $exception->getMessage(); + }, $errors)); + + throw new AcmeException("Couldn't resolve the following domains to an IPv4 nor IPv6 record: {$failedDomains}\n\n{$reasons}"); + } + } + + private function findSuitableCombination(\stdClass $response): array + { + $challenges = $response->challenges ?? []; + $combinations = $response->combinations ?? []; + $goodChallenges = []; + + foreach ($challenges as $i => $challenge) { + if ($challenge->type === 'http-01') { + $goodChallenges[] = $i; + } + } + + foreach ($goodChallenges as $i => $challenge) { + if (!\in_array([$challenge], $combinations, true)) { + unset($goodChallenges[$i]); + } + } + + return $goodChallenges; + } } diff --git a/src/Commands/Revoke.php b/src/Commands/Revoke.php index c9da6d7..2a7d99b 100644 --- a/src/Commands/Revoke.php +++ b/src/Commands/Revoke.php @@ -14,16 +14,32 @@ use League\CLImate\Argument\Manager; use League\CLImate\CLImate; use function Amp\call; -class Revoke implements Command { +class Revoke implements Command +{ + public static function getDefinition(): array + { + return [ + 'server' => AcmeClient\getArgumentDescription('server'), + 'storage' => AcmeClient\getArgumentDescription('storage'), + 'name' => [ + 'longPrefix' => 'name', + 'description' => 'Common name of the certificate to be revoked.', + 'required' => true, + ], + ]; + } + private $climate; private $acmeFactory; - public function __construct(CLImate $climate, AcmeFactory $acmeFactory) { + public function __construct(CLImate $climate, AcmeFactory $acmeFactory) + { $this->climate = $climate; $this->acmeFactory = $acmeFactory; } - public function execute(Manager $args): Promise { + public function execute(Manager $args): Promise + { return call(function () use ($args) { $keyStore = new KeyStore(AcmeClient\normalizePath($args->get('storage'))); @@ -39,7 +55,7 @@ class Revoke implements Command { $path = AcmeClient\normalizePath($args->get('storage')) . '/certs/' . $keyFile . '/' . $args->get('name') . '/cert.pem'; try { - $pem = yield File\get($path); + $pem = yield File\read($path); $cert = new Certificate($pem); } catch (FilesystemException $e) { throw new \RuntimeException("There's no such certificate (" . $path . ')'); @@ -63,16 +79,4 @@ class Revoke implements Command { return 0; }); } - - public static function getDefinition(): array { - return [ - 'server' => AcmeClient\getArgumentDescription('server'), - 'storage' => AcmeClient\getArgumentDescription('storage'), - 'name' => [ - 'longPrefix' => 'name', - 'description' => 'Common name of the certificate to be revoked.', - 'required' => true, - ], - ]; - } } diff --git a/src/Commands/Setup.php b/src/Commands/Setup.php index 06ece95..9d2e3fa 100644 --- a/src/Commands/Setup.php +++ b/src/Commands/Setup.php @@ -5,11 +5,10 @@ namespace Kelunik\AcmeClient\Commands; use Amp\Dns; use Amp\Dns\NoRecordException; use Amp\Dns\Record; -use Amp\Dns\ResolutionException; use Amp\Promise; use Kelunik\Acme\AcmeException; use Kelunik\Acme\Crypto\RsaKeyGenerator; -use Kelunik\Acme\Registration; +use Kelunik\Acme\Domain\Registration; use Kelunik\AcmeClient; use Kelunik\AcmeClient\AcmeFactory; use Kelunik\AcmeClient\Stores\KeyStore; @@ -18,73 +17,14 @@ use League\CLImate\Argument\Manager; use League\CLImate\CLImate; use Symfony\Component\Yaml\Yaml; use function Amp\call; +use function Kelunik\AcmeClient\normalizePath; +use function Kelunik\AcmeClient\resolveServer; +use function Kelunik\AcmeClient\serverToKeyname; -class Setup implements Command { - private $climate; - private $acmeFactory; - - public function __construct(CLImate $climate, AcmeFactory $acmeFactory) { - $this->climate = $climate; - $this->acmeFactory = $acmeFactory; - } - - public function execute(Manager $args): Promise { - return call(function () use ($args) { - $email = $args->get('email'); - yield from $this->checkEmail($email); - - $server = AcmeClient\resolveServer($args->get('server')); - $keyFile = AcmeClient\serverToKeyname($server); - - $path = "accounts/{$keyFile}.pem"; - $bits = 4096; - - $keyStore = new KeyStore(\Kelunik\AcmeClient\normalizePath($args->get('storage'))); - - $this->climate->br(); - - try { - $keyPair = yield $keyStore->get($path); - $this->climate->whisper(' Using existing private key ...'); - } catch (KeyStoreException $e) { - $this->climate->whisper(' No private key found, generating new one ...'); - - $keyPair = (new RsaKeyGenerator($bits))->generateKey(); - $keyPair = yield $keyStore->put($path, $keyPair); - - $this->climate->whisper(" Generated new private key with {$bits} bits."); - } - - $acme = $this->acmeFactory->build($server, $keyPair); - - $this->climate->whisper(' Registering with ' . \substr($server, 8) . ' ...'); - - /** @var Registration $registration */ - $registration = yield $acme->register($email); - $this->climate->info(' Registration successful. Contacts: ' . \implode(', ', $registration->getContact())); - $this->climate->br(); - - return 0; - }); - } - - private function checkEmail(string $email) { - $host = \substr($email, \strrpos($email, '@') + 1); - - if (!$host) { - throw new AcmeException("Invalid contact email: '{$email}'"); - } - - try { - yield Dns\query($host, Record::MX); - } catch (NoRecordException $e) { - throw new AcmeException("No MX record defined for '{$host}'"); - } catch (ResolutionException $e) { - throw new AcmeException("Dns query for an MX record on '{$host}' failed for the following reason: " . $e->getMessage(), null, $e); - } - } - - public static function getDefinition(): array { +class Setup implements Command +{ + public static function getDefinition(): array + { $args = [ 'server' => AcmeClient\getArgumentDescription('server'), 'storage' => AcmeClient\getArgumentDescription('storage'), @@ -108,4 +48,78 @@ class Setup implements Command { return $args; } + + private $climate; + private $acmeFactory; + + public function __construct(CLImate $climate, AcmeFactory $acmeFactory) + { + $this->climate = $climate; + $this->acmeFactory = $acmeFactory; + } + + public function execute(Manager $args): Promise + { + return call(function () use ($args) { + $email = $args->get('email'); + yield from $this->checkEmail($email); + + $server = resolveServer($args->get('server')); + $keyFile = serverToKeyname($server); + + $path = "accounts/{$keyFile}.pem"; + $bits = 4096; + + $keyStore = new KeyStore(normalizePath($args->get('storage'))); + + $this->climate->br(); + + try { + $keyPair = yield $keyStore->get($path); + $this->climate->whisper(' Using existing private key ...'); + } catch (KeyStoreException $e) { + $this->climate->whisper(' No private key found, generating new one ...'); + + $keyPair = (new RsaKeyGenerator($bits))->generateKey(); + $keyPair = yield $keyStore->put($path, $keyPair); + + $this->climate->whisper(" Generated new private key with {$bits} bits."); + } + + $acme = $this->acmeFactory->build($server, $keyPair); + + $this->climate->whisper(' Registering with ' . \substr($server, 8) . ' ...'); + + /** @var Registration $registration */ + $registration = yield $acme->register($email); + $this->climate->info(' Registration successful. Contacts: ' . \implode( + ', ', + $registration->getContact() + )); + $this->climate->br(); + + return 0; + }); + } + + private function checkEmail(string $email) + { + $host = \substr($email, \strrpos($email, '@') + 1); + + if (!$host) { + throw new AcmeException("Invalid contact email: '{$email}'"); + } + + try { + yield Dns\query($host, Record::MX); + } catch (NoRecordException $e) { + throw new AcmeException("No MX record defined for '{$host}'"); + } catch (Dns\DnsException $e) { + throw new AcmeException( + "Dns query for an MX record on '{$host}' failed for the following reason: " . $e->getMessage(), + null, + $e + ); + } + } } diff --git a/src/Commands/Status.php b/src/Commands/Status.php index 833b095..1b0e6b1 100644 --- a/src/Commands/Status.php +++ b/src/Commands/Status.php @@ -12,20 +12,40 @@ use League\CLImate\Argument\Manager; use League\CLImate\CLImate; use function Amp\call; use function Kelunik\AcmeClient\getArgumentDescription; +use function Kelunik\AcmeClient\normalizePath; +use function Kelunik\AcmeClient\resolveServer; +use function Kelunik\AcmeClient\serverToKeyname; + +class Status +{ + public static function getDefinition(): array + { + return [ + 'server' => getArgumentDescription('server'), + 'storage' => getArgumentDescription('storage'), + 'ttl' => [ + 'longPrefix' => 'ttl', + 'description' => 'Minimum valid time in days, shows ⭮ if renewal is required.', + 'defaultValue' => 30, + 'castTo' => 'int', + ], + ]; + } -class Status { private $climate; - public function __construct(CLImate $climate) { + public function __construct(CLImate $climate) + { $this->climate = $climate; } - public function execute(Manager $args): Promise { + public function execute(Manager $args): Promise + { return call(function () use ($args) { - $server = \Kelunik\AcmeClient\resolveServer($args->get('server')); - $keyName = \Kelunik\AcmeClient\serverToKeyname($server); + $server = resolveServer($args->get('server')); + $keyName = serverToKeyname($server); - $storage = \Kelunik\AcmeClient\normalizePath($args->get('storage')); + $storage = normalizePath($args->get('storage')); try { $keyStore = new KeyStore($storage); @@ -44,15 +64,16 @@ class Status { $certificateStore = new CertificateStore($storage . "/certs/{$keyName}"); /** @var array $domains */ - $domains = yield File\scandir($storage . "/certs/{$keyName}"); + $domains = yield File\listFiles($storage . "/certs/{$keyName}"); foreach ($domains as $domain) { $pem = yield $certificateStore->get($domain); $cert = new Certificate($pem); - $symbol = \time() > $cert->getValidTo() ? '' : ''; + $validTo = $cert->getValidTo(); + $symbol = \time() > $validTo ? '' : ''; - if (\time() < $cert->getValidTo() && \time() + $args->get('ttl') * 24 * 60 * 60 > $cert->getValidTo()) { + if (\time() < $validTo && \time() + $args->get('ttl') * 24 * 60 * 60 > $validTo) { $symbol = ''; } @@ -63,17 +84,4 @@ class Status { } }); } - - public static function getDefinition(): array { - return [ - 'server' => getArgumentDescription('server'), - 'storage' => getArgumentDescription('storage'), - 'ttl' => [ - 'longPrefix' => 'ttl', - 'description' => 'Minimum valid time in days, shows ⭮ if renewal is required.', - 'defaultValue' => 30, - 'castTo' => 'int', - ], - ]; - } } diff --git a/src/Commands/Version.php b/src/Commands/Version.php index 7941bef..51e253d 100644 --- a/src/Commands/Version.php +++ b/src/Commands/Version.php @@ -6,15 +6,30 @@ use Amp\Promise; use Amp\Success; use League\CLImate\Argument\Manager; use League\CLImate\CLImate; +use function Kelunik\AcmeClient\ellipsis; + +class Version implements Command +{ + public static function getDefinition(): array + { + return [ + 'deps' => [ + 'longPrefix' => 'deps', + 'description' => 'Show also the bundled dependency versions.', + 'noValue' => true, + ], + ]; + } -class Version implements Command { private $climate; - public function __construct(CLImate $climate) { + public function __construct(CLImate $climate) + { $this->climate = $climate; } - public function execute(Manager $args): Promise { + public function execute(Manager $args): Promise + { $version = $this->getVersion(); $buildTime = $this->readFileOr('info/build.time', \time()); @@ -41,13 +56,15 @@ class Version implements Command { return new Success; } - private function getDescription($package) { - return \Kelunik\AcmeClient\ellipsis($package->description ?? ''); + private function getDescription($package): string + { + return ellipsis($package->description ?? ''); } - private function getVersion() { + private function getVersion(): string + { if (\file_exists(__DIR__ . '/../../.git')) { - $version = `git describe --tags`; + $version = \shell_exec("git describe --tags"); } else { $version = $this->readFileOr('info/build.version', '-unknown'); } @@ -55,7 +72,8 @@ class Version implements Command { return \substr(\trim($version), 1); } - private function readFileOr($file, $default = '') { + private function readFileOr(string $file, $default = '') + { if (\file_exists(__DIR__ . '/../../' . $file)) { return \file_get_contents(__DIR__ . '/../../' . $file); } @@ -66,14 +84,4 @@ class Version implements Command { return $default; } - - public static function getDefinition(): array { - return [ - 'deps' => [ - 'longPrefix' => 'deps', - 'description' => 'Show also the bundled dependency versions.', - 'noValue' => true, - ], - ]; - } } diff --git a/src/ConfigException.php b/src/ConfigException.php index 40627dc..a547c35 100644 --- a/src/ConfigException.php +++ b/src/ConfigException.php @@ -2,5 +2,6 @@ namespace Kelunik\AcmeClient; -class ConfigException extends \Exception { +class ConfigException extends \Exception +{ } diff --git a/src/Stores/CertificateStore.php b/src/Stores/CertificateStore.php index de13365..1176c5d 100644 --- a/src/Stores/CertificateStore.php +++ b/src/Stores/CertificateStore.php @@ -7,26 +7,30 @@ use Amp\File\FilesystemException; use Amp\Promise; use Kelunik\Certificate\Certificate; use function Amp\call; -use function Amp\Uri\isValidDnsName; +use function Amp\Dns\isValidName; -class CertificateStore { +class CertificateStore +{ private $root; - public function __construct(string $root) { + public function __construct(string $root) + { $this->root = \rtrim(\str_replace("\\", '/', $root), '/'); } - public function get(string $name): Promise { + public function get(string $name): Promise + { return call(function () use ($name) { try { - return yield File\get($this->root . '/' . $name . '/cert.pem'); + return yield File\read($this->root . '/' . $name . '/cert.pem'); } catch (FilesystemException $e) { throw new CertificateStoreException('Failed to load certificate.', 0, $e); } }); } - public function put(array $certificates): Promise { + public function put(array $certificates): Promise + { return call(function () use ($certificates) { if (empty($certificates)) { throw new \Error('Empty array not allowed'); @@ -39,7 +43,7 @@ class CertificateStore { throw new CertificateStoreException("Certificate doesn't have a common name."); } - if (!isValidDnsName($commonName)) { + if (!isValidName($commonName)) { throw new CertificateStoreException("Invalid common name: '{$commonName}'"); } @@ -47,38 +51,33 @@ class CertificateStore { $chain = \array_slice($certificates, 1); $path = $this->root . '/' . $commonName; - if (!yield File\isdir($path)) { - yield File\mkdir($path, 0755, true); + yield File\createDirectoryRecursively($path, 0755); - if (!yield File\isdir($path)) { - throw new FilesystemException("Couldn't create certificate directory: '{$path}'"); - } - } + yield File\write($path . '/cert.pem', $certificates[0]); + yield File\changePermissions($path . '/cert.pem', 0644); - yield File\put($path . '/cert.pem', $certificates[0]); - yield File\chmod($path . '/cert.pem', 0644); + yield File\write($path . '/fullchain.pem', \implode("\n", $certificates)); + yield File\changePermissions($path . '/fullchain.pem', 0644); - yield File\put($path . '/fullchain.pem', \implode("\n", $certificates)); - yield File\chmod($path . '/fullchain.pem', 0644); - - yield File\put($path . '/chain.pem', \implode("\n", $chain)); - yield File\chmod($path . '/chain.pem', 0644); + yield File\write($path . '/chain.pem', \implode("\n", $chain)); + yield File\changePermissions($path . '/chain.pem', 0644); } catch (FilesystemException $e) { throw new CertificateStoreException("Couldn't save certificates for '{$commonName}'", 0, $e); } }); } - public function delete(string $name): Promise { + public function delete(string $name): Promise + { return call(function () use ($name) { /** @var array $files */ - $files = yield File\scandir($this->root . '/' . $name); + $files = yield File\listFiles($this->root . '/' . $name); foreach ($files as $file) { - yield File\unlink($this->root . '/' . $name . '/' . $file); + yield File\deleteFile($this->root . '/' . $name . '/' . $file); } - yield File\rmdir($this->root . '/' . $name); + yield File\deleteDirectory($this->root . '/' . $name); }); } } diff --git a/src/Stores/CertificateStoreException.php b/src/Stores/CertificateStoreException.php index 312ab6f..89272bf 100644 --- a/src/Stores/CertificateStoreException.php +++ b/src/Stores/CertificateStoreException.php @@ -2,5 +2,6 @@ namespace Kelunik\AcmeClient\Stores; -class CertificateStoreException extends \Exception { +class CertificateStoreException extends \Exception +{ } diff --git a/src/Stores/ChallengeStore.php b/src/Stores/ChallengeStore.php index b4d3034..d945465 100644 --- a/src/Stores/ChallengeStore.php +++ b/src/Stores/ChallengeStore.php @@ -6,14 +6,17 @@ use Amp\File; use Amp\Promise; use function Amp\call; -class ChallengeStore { +class ChallengeStore +{ private $docroot; - public function __construct(string $docroot) { + public function __construct(string $docroot) + { $this->docroot = \rtrim(\str_replace("\\", '/', $docroot), '/'); } - public function put(string $token, string $payload, string $user = null): Promise { + public function put(string $token, string $payload, string $user = null): Promise + { return call(function () use ($token, $payload, $user) { $path = $this->docroot . '/.well-known/acme-challenge'; $userInfo = null; @@ -22,39 +25,34 @@ class ChallengeStore { throw new ChallengeStoreException("Document root doesn't exist: '{$this->docroot}'"); } - if (!yield File\isdir($path)) { - yield File\mkdir($path, 0755, true); - - if (!yield File\isdir($path)) { - throw new ChallengeStoreException("Couldn't create key directory: '{$path}'"); - } - } + yield File\createDirectoryRecursively($path, 0755); if ($user && !$userInfo = \posix_getpwnam($user)) { throw new ChallengeStoreException("Unknown user: '{$user}'"); } if ($userInfo !== null) { - yield File\chown($this->docroot . '/.well-known', $userInfo['uid'], -1); - yield File\chown($this->docroot . '/.well-known/acme-challenge', $userInfo['uid'], -1); + yield File\changeOwner($this->docroot . '/.well-known', $userInfo['uid'], -1); + yield File\changeOwner($this->docroot . '/.well-known/acme-challenge', $userInfo['uid'], -1); } - yield File\put("{$path}/{$token}", $payload); + yield File\write("{$path}/{$token}", $payload); if ($userInfo !== null) { - yield File\chown("{$path}/{$token}", $userInfo['uid'], -1); + yield File\changeOwner("{$path}/{$token}", $userInfo['uid'], -1); } - yield File\chmod("{$path}/{$token}", 0644); + yield File\changePermissions("{$path}/{$token}", 0644); }); } - public function delete(string $token): Promise { + public function delete(string $token): Promise + { return call(function () use ($token) { $path = $this->docroot . "/.well-known/acme-challenge/{$token}"; if (yield File\exists($path)) { - yield File\unlink($path); + yield File\deleteFile($path); } }); } diff --git a/src/Stores/ChallengeStoreException.php b/src/Stores/ChallengeStoreException.php index 03d96e1..6a2e24e 100644 --- a/src/Stores/ChallengeStoreException.php +++ b/src/Stores/ChallengeStoreException.php @@ -2,5 +2,6 @@ namespace Kelunik\AcmeClient\Stores; -class ChallengeStoreException extends \Exception { +class ChallengeStoreException extends \Exception +{ } diff --git a/src/Stores/KeyStore.php b/src/Stores/KeyStore.php index 29e53f4..d43e1e8 100644 --- a/src/Stores/KeyStore.php +++ b/src/Stores/KeyStore.php @@ -8,19 +8,22 @@ use Amp\Promise; use Kelunik\Acme\Crypto\PrivateKey; use function Amp\call; -class KeyStore { +class KeyStore +{ private $root; - public function __construct(string $root = '') { + public function __construct(string $root = '') + { $this->root = \rtrim(\str_replace("\\", '/', $root), '/'); } - public function get(string $path): Promise { + public function get(string $path): Promise + { return call(function () use ($path) { $file = $this->root . '/' . $path; try { - $privateKey = yield File\get($file); + $privateKey = yield File\read($file); // Check key here to be valid, PrivateKey doesn't do that, we fail early here $res = \openssl_pkey_get_private($privateKey); @@ -36,23 +39,17 @@ class KeyStore { }); } - public function put(string $path, PrivateKey $key): Promise { + public function put(string $path, PrivateKey $key): Promise + { return call(function () use ($path, $key) { $file = $this->root . '/' . $path; try { $dir = \dirname($file); - if (!yield File\isdir($dir)) { - yield File\mkdir($dir, 0755, true); - - if (!yield File\isdir($dir)) { - throw new FilesystemException("Couldn't create key directory: '{$dir}'"); - } - } - - yield File\put($file, $key->toPem()); - yield File\chmod($file, 0600); + yield File\createDirectoryRecursively($dir, 0755); + yield File\write($file, $key->toPem()); + yield File\changeOwner($file, 0600); } catch (FilesystemException $e) { throw new KeyStoreException('Could not save key: ' . $e->getMessage(), 0, $e); } diff --git a/src/Stores/KeyStoreException.php b/src/Stores/KeyStoreException.php index 9da75e1..b9fd2e5 100644 --- a/src/Stores/KeyStoreException.php +++ b/src/Stores/KeyStoreException.php @@ -2,5 +2,6 @@ namespace Kelunik\AcmeClient\Stores; -class KeyStoreException extends \Exception { +class KeyStoreException extends \Exception +{ } diff --git a/src/functions.php b/src/functions.php index 5f0da25..4768577 100644 --- a/src/functions.php +++ b/src/functions.php @@ -12,7 +12,8 @@ use Symfony\Component\Yaml\Yaml; use function Amp\call; use function Amp\coroutine; -function concurrentMap(int $concurrency, array $values, callable $functor): array { +function concurrentMap(int $concurrency, array $values, callable $functor): array +{ $semaphore = new LocalSemaphore($concurrency); return \array_map(coroutine(function ($value, $key) use ($semaphore, $functor) { @@ -36,7 +37,8 @@ function concurrentMap(int $concurrency, array $values, callable $functor): arra * * @return string suggestion or empty string if no command is similar enough */ -function suggestCommand(string $badCommand, array $commands, int $suggestThreshold = 70): string { +function suggestCommand(string $badCommand, array $commands, int $suggestThreshold = 70): string +{ $badCommand = \strtolower($badCommand); $bestMatch = ''; @@ -63,11 +65,12 @@ function suggestCommand(string $badCommand, array $commands, int $suggestThresho * * @return string resolved URI */ -function resolveServer(string $uri): string { +function resolveServer(string $uri): string +{ $shortcuts = [ - 'letsencrypt' => 'https://acme-v01.api.letsencrypt.org/directory', - 'letsencrypt:production' => 'https://acme-v01.api.letsencrypt.org/directory', - 'letsencrypt:staging' => 'https://acme-staging.api.letsencrypt.org/directory', + 'letsencrypt' => 'https://acme-v02.api.letsencrypt.org/directory', + 'letsencrypt:production' => 'https://acme-v02.api.letsencrypt.org/directory', + 'letsencrypt:staging' => 'https://acme-staging-v02.api.letsencrypt.org/directory', ]; if (isset($shortcuts[$uri])) { @@ -94,7 +97,8 @@ function resolveServer(string $uri): string { * * @return string identifier usable as file name */ -function serverToKeyname(string $server): string { +function serverToKeyname(string $server): string +{ $server = \substr($server, \strpos($server, '://') + 3); $keyFile = \str_replace('/', '.', $server); @@ -109,7 +113,8 @@ function serverToKeyname(string $server): string { * * @return bool {@code true} if running as Phar, {@code false} otherwise */ -function isPhar(): bool { +function isPhar(): bool +{ if (!\class_exists('Phar')) { return false; } @@ -124,7 +129,8 @@ function isPhar(): bool { * * @return string normalized path */ -function normalizePath(string $path): string { +function normalizePath(string $path): string +{ return \rtrim(\str_replace("\\", '/', $path), '/'); } @@ -133,7 +139,8 @@ function normalizePath(string $path): string { * * @return string|null Resolves to the config path or null. */ -function getConfigPath() { +function getConfigPath(): ?string +{ $paths = isPhar() ? [\substr(\dirname(Phar::running()), \strlen('phar://')) . '/acme-client.yml'] : []; if (0 !== \stripos(PHP_OS, 'WIN')) { @@ -164,7 +171,8 @@ function getConfigPath() { * @throws AcmeException if the provided acme-client.yml file is invalid * @throws ConfigException if the provided configuration file is invalid */ -function getArgumentDescription($argument): array { +function getArgumentDescription(string $argument): array +{ $config = []; if ($configPath = getConfigPath()) { @@ -229,7 +237,8 @@ function getArgumentDescription($argument): array { * * @return string binary callable, shortened based on PATH and CWD */ -function getBinary(): string { +function getBinary(): string +{ $binary = 'bin/acme'; if (isPhar()) { @@ -265,7 +274,8 @@ function getBinary(): string { * * @return string shortened string */ -function ellipsis($text, $max = 70, $append = '…'): string { +function ellipsis(string $text, int $max = 70, string $append = '…'): string +{ if (\strlen($text) <= $max) { return $text; } diff --git a/test/FunctionsTest.php b/test/FunctionsTest.php index 8594b33..3c2a930 100644 --- a/test/FunctionsTest.php +++ b/test/FunctionsTest.php @@ -4,25 +4,39 @@ namespace Kelunik\AcmeClient; use PHPUnit\Framework\TestCase; -class FunctionsTest extends TestCase { - public function testResolveServer() { - $this->assertSame('https://acme-v01.api.letsencrypt.org/directory', resolveServer('letsencrypt')); - $this->assertSame('https://acme-v01.api.letsencrypt.org/directory', resolveServer('letsencrypt:production')); - $this->assertSame('https://acme-staging.api.letsencrypt.org/directory', resolveServer('letsencrypt:staging')); - $this->assertSame('https://acme-v01.api.letsencrypt.org/directory', resolveServer('acme-v01.api.letsencrypt.org/directory')); - $this->assertSame('https://acme-v01.api.letsencrypt.org/directory', resolveServer('https://acme-v01.api.letsencrypt.org/directory')); +class FunctionsTest extends TestCase +{ + public function testResolveServer(): void + { + $this->assertSame('https://acme-v02.api.letsencrypt.org/directory', resolveServer('letsencrypt')); + $this->assertSame('https://acme-v02.api.letsencrypt.org/directory', resolveServer('letsencrypt:production')); + $this->assertSame( + 'https://acme-staging-v02.api.letsencrypt.org/directory', + resolveServer('letsencrypt:staging') + ); + $this->assertSame( + 'https://acme-v01.api.letsencrypt.org/directory', + resolveServer('acme-v01.api.letsencrypt.org/directory') + ); + $this->assertSame( + 'https://acme-v01.api.letsencrypt.org/directory', + resolveServer('https://acme-v01.api.letsencrypt.org/directory') + ); } - public function testSuggestCommand() { + public function testSuggestCommand(): void + { $this->assertSame('acme', suggestCommand('acme!', ['acme'])); $this->assertSame('', suggestCommand('issue', ['acme'])); } - public function testIsPhar() { + public function testIsPhar(): void + { $this->assertFalse(isPhar()); } - public function testNormalizePath() { + public function testNormalizePath(): void + { $this->assertSame('/etc/foobar', normalizePath('/etc/foobar')); $this->assertSame('/etc/foobar', normalizePath('/etc/foobar/')); $this->assertSame('/etc/foobar', normalizePath('/etc/foobar/'));