From 7a30ac71f7aa7be2b335f6cb284881da57def5ea Mon Sep 17 00:00:00 2001 From: Joshua Eichorn Date: Fri, 31 May 2019 23:15:44 +0000 Subject: [PATCH 01/24] Psr7 + slim rewrite + Pagely namespace, since its not a dropin --- composer.json | 20 +- doc/recording.md | 2 +- doc/server.md | 3 +- doc/start.md | 8 +- doc/stubbing.md | 13 +- public/index.php | 4 + src/Expectation.php | 13 +- src/Matcher/AbstractMatcher.php | 4 +- src/Matcher/ClosureMatcher.php | 2 +- src/Matcher/ExtractorFactory.php | 18 +- src/Matcher/MatcherFactory.php | 2 +- src/Matcher/MatcherInterface.php | 2 +- src/Matcher/RegexMatcher.php | 2 +- src/Matcher/StringMatcher.php | 2 +- src/MockBuilder.php | 6 +- src/PHPUnit/HttpMockFacade.php | 14 +- src/PHPUnit/HttpMockFacadeMap.php | 2 +- src/PHPUnit/HttpMockTrait.php | 2 +- src/PHPUnit/ServerManager.php | 4 +- src/Request/UnifiedRequest.php | 312 ------------------ src/RequestCollectionFacade.php | 73 +--- src/RequestStorage.php | 9 +- src/Response/CallbackResponse.php | 28 -- src/ResponseBuilder.php | 24 +- src/Server.php | 44 +-- src/Util.php | 28 +- src/app.php | 274 +++++++++------ tests/AppIntegrationTest.php | 173 +++++----- tests/Fixtures/Request.php | 15 +- tests/Matcher/ExtractorFactoryTest.php | 93 +++--- tests/Matcher/StringMatcherTest.php | 8 +- tests/MockBuilderIntegrationTest.php | 37 +-- .../HttpMockMultiPHPUnitIntegrationTest.php | 89 ++--- ...HttpMockPHPUnitIntegrationBasePathTest.php | 8 +- .../HttpMockPHPUnitIntegrationTest.php | 122 ++++--- tests/Request/UnifiedRequestTest.php | 134 -------- tests/RequestCollectionFacadeTest.php | 77 ++--- 37 files changed, 659 insertions(+), 1012 deletions(-) delete mode 100644 src/Request/UnifiedRequest.php delete mode 100644 src/Response/CallbackResponse.php delete mode 100644 tests/Request/UnifiedRequestTest.php diff --git a/composer.json b/composer.json index fd71746..4d0d219 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { - "name": "internations/http-mock", - "description": "Mock HTTP requests on the server side in your PHP unit tests", + "name": "pagely/http-mock", + "description": "Mock HTTP requests on the server side in your PHP unit tests, PSR/7 Fork of internations version", "license": "MIT", "authors": [ { @@ -10,15 +10,19 @@ { "name": "Max Beutel", "email": "max.beutel@internations.org" + }, + { + "name": "Joshua Eichorn", + "email": "joshua.eichorn@pagely.com" } ], "require": { - "php": "~7.1", - "silex/silex": "~2.0", - "guzzle/guzzle": ">=3.8", + "php": "~7.1", "symfony/process": "~3|~4", "jeremeamia/superclosure": "~2", - "lstrojny/hmmmath": ">=0.5.0" + "lstrojny/hmmmath": ">=0.5.0", + "guzzlehttp/guzzle": "^6.3", + "slim/slim": "^3.12" }, "require-dev": { "internations/kodierungsregelwerksammlung": "~0.23.0", @@ -26,9 +30,9 @@ "phpunit/phpunit": "^7" }, "autoload": { - "psr-4": {"InterNations\\Component\\HttpMock\\": "src/"} + "psr-4": {"Pagely\\Component\\HttpMock\\": "src/"} }, "autoload-dev": { - "psr-4": {"InterNations\\Component\\HttpMock\\Tests\\": "tests/"} + "psr-4": {"Pagely\\Component\\HttpMock\\Tests\\": "tests/"} } } diff --git a/doc/recording.md b/doc/recording.md index 892e045..10c03c4 100644 --- a/doc/recording.md +++ b/doc/recording.md @@ -2,7 +2,7 @@ Once a SUT (system under test) has fired HTTP requests, we often want to validate that our assumption about the nature of those requests are valid. For that purpose HTTP mock stores every request for later inspection. The recorded requests -are presented as an instance of `InterNations\Component\HttpMock\Request\UnifiedRequest`. +are presented as an instance of `Slim\Http\Response`. ```php $this->http->mock diff --git a/doc/server.md b/doc/server.md index a1059f4..c3dc689 100644 --- a/doc/server.md +++ b/doc/server.md @@ -6,7 +6,8 @@ Overview of the internal server functionality ``` POST /_expectation { - response (required): serialized Symfony response + response (required): stringified http respopnse + responseCallback (optional): serialized closure that is passed in the response, and can return a new Response matcher (optional): serialized list of closures limiter (optional): serialized closure that limits the validity of the expectation } diff --git a/doc/start.md b/doc/start.md index b972367..c8cd34c 100644 --- a/doc/start.md +++ b/doc/start.md @@ -1,13 +1,13 @@ # Getting started with HTTP mock HTTP mock comes out of the box with an integration with [PHPUnit](https://phpunit.de) in the shape of -`InterNations\Component\HttpMock\PHPUnit\HttpMockTrait`. In order to use it, we start and stop the background HTTP +`Pagely\Component\HttpMock\PHPUnit\HttpMockTrait`. In order to use it, we start and stop the background HTTP server in `setUpBeforeClass()` and `tearDownAfterClass()` respectively. ```php namespace Acme\Tests; -use InterNations\Component\HttpMock\PHPUnit\HttpMockTrait; +use Pagely\Component\HttpMock\PHPUnit\HttpMockTrait; class ExampleTest extends PHPUnit_Framework_TestCase { @@ -58,10 +58,10 @@ class ExampleTest extends PHPUnit_Framework_TestCase ->end(); $this->http->setUp(); - $this->assertSame('mocked body', $this->http->client->post('http://localhost:8082/foo')->send()->getBody(true)); + $this->assertSame('mocked body', (string)$this->http->client->post('http://localhost:8082/foo')->getBody()); $this->assertSame('POST', $this->http->requests->latest()->getMethod()); - $this->assertSame('/foo', $this->http->requests->latest()->getPath()); + $this->assertSame('/foo', $this->http->requests->latest()->getUri()->getPath()); } } ``` diff --git a/doc/stubbing.md b/doc/stubbing.md index c779181..8ef97e8 100644 --- a/doc/stubbing.md +++ b/doc/stubbing.md @@ -24,8 +24,8 @@ The example above say: when we see a `GET` request asking for `/resource` respon What we see here is internally syntactic sugar for the following, more verbose, example using plain callbacks. ```php -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; +use Psr\Http\Message\RequestInterface as Request; +use Psr\Http\Message\ResponseInterface as Response; $this->http->mock ->when() @@ -43,21 +43,20 @@ $this->http->mock ->end(); ``` -What we can see above is that we use standard Symfony HTTP foundation `Request` and `Response` objects. If you want to -learn more about it, look at -[Symfony’s documentation](https://symfony.com/doc/current/components/http_foundation/introduction.html). +What we can see above is that we use standard PSR/7 Request Response, we use the Guzzle implementation on the Client and the Slim implementation on the server side, hurrah standards Let’s have a look what we can do with matching and response building shortcuts: ```php -use Symfony\Component\HttpFoundation\Response; +use Psr\Http\Message\ResponseInterface as Response; +use Slim\Http\StatusCode; $this->http->mock ->when() ->methodIs('GET') ->pathIs('/resource') ->then() - ->statusCode(Response::HTTP_NOT_FOUND) + ->statusCode(StatusCode::HTTP_NOT_FOUND) ->header('X-Custom-Header', 'Header Value') ->body('response') ->end();` diff --git a/public/index.php b/public/index.php index d9d901e..f10e911 100644 --- a/public/index.php +++ b/public/index.php @@ -1,4 +1,8 @@ responseBuilder->getResponse(); } + public function getResponseCallback() + { + return $this->responseBuilder->getResponseCallback(); + } + public function getLimiter() { return new SerializableClosure($this->limiter); diff --git a/src/Matcher/AbstractMatcher.php b/src/Matcher/AbstractMatcher.php index 429d60b..397c863 100644 --- a/src/Matcher/AbstractMatcher.php +++ b/src/Matcher/AbstractMatcher.php @@ -1,9 +1,9 @@ basePath; return static function (Request $request) use ($basePath) { - return substr_replace($request->getPathInfo(), '', 0, strlen($basePath)); + return substr_replace($request->getUri()->getPath(), '', 0, strlen($basePath)); }; } @@ -31,28 +31,32 @@ public function createMethodExtractor() public function createParamExtractor($param) { return static function (Request $request) use ($param) { - return $request->query->get($param); + return $request->getParam($param); }; } public function createParamExistsExtractor($param) { return static function (Request $request) use ($param) { - return $request->query->has($param); + return $request->getParam($param, false) !== false; }; } public function createHeaderExtractor($header) { return static function (Request $request) use ($header) { - return $request->headers->get($header); + $r = $request->getHeaderLine($header); + if (empty($r)) { + return null; + } + return $r; }; } public function createHeaderExistsExtractor($header) { return static function (Request $request) use ($header) { - return $request->headers->has($header); + return $request->hasHeader($header); }; } } diff --git a/src/Matcher/MatcherFactory.php b/src/Matcher/MatcherFactory.php index 34d5461..9971b1d 100644 --- a/src/Matcher/MatcherFactory.php +++ b/src/Matcher/MatcherFactory.php @@ -1,5 +1,5 @@ wrapped = $wrapped; - $this->init($params); - } - - /** - * Get the user agent of the request - * - * @return string - */ - public function getUserAgent() - { - return $this->userAgent; - } - - /** - * Get the body of the request if set - * - * @return EntityBodyInterface|null - */ - public function getBody() - { - return $this->invokeWrappedIfEntityEnclosed(__FUNCTION__, func_get_args()); - } - - /** - * Get a POST field from the request - * - * @param string $field Field to retrieve - * - * @return mixed|null - */ - public function getPostField($field) - { - return $this->invokeWrappedIfEntityEnclosed(__FUNCTION__, func_get_args()); - } - - /** - * Get the post fields that will be used in the request - * - * @return QueryString - */ - public function getPostFields() - { - return $this->invokeWrappedIfEntityEnclosed(__FUNCTION__, func_get_args()); - } - - /** - * Returns an associative array of POST field names to PostFileInterface objects - * - * @return array - */ - public function getPostFiles() - { - return $this->invokeWrappedIfEntityEnclosed(__FUNCTION__, func_get_args()); - } - - /** - * Get a POST file from the request - * - * @param string $fieldName POST fields to retrieve - * - * @return array|null Returns an array wrapping an array of PostFileInterface objects - */ - public function getPostFile($fieldName) - { - return $this->invokeWrappedIfEntityEnclosed(__FUNCTION__, func_get_args()); - } - - /** - * Get application and plugin specific parameters set on the message. - * - * @return Collection - */ - public function getParams() - { - return $this->wrapped->getParams(); - } - - /** - * Retrieve an HTTP header by name. Performs a case-insensitive search of all headers. - * - * @param string $header Header to retrieve. - * - * @return Header|null Returns NULL if no matching header is found. - * Returns a Header object if found. - */ - public function getHeader($header) - { - return $this->wrapped->getHeader($header); - } - - /** - * Get all headers as a collection - * - * @return HeaderCollection - */ - public function getHeaders() - { - return $this->wrapped->getHeaders(); - } - - /** - * Get an array of message header lines - * - * @return array - */ - public function getHeaderLines() - { - return $this->wrapped->getHeaderLines(); - } - - /** - * Check if the specified header is present. - * - * @param string $header The header to check. - * - * @return boolean Returns TRUE or FALSE if the header is present - */ - public function hasHeader($header) - { - return $this->wrapped->hasHeader($header); - } - - /** - * Get the raw message headers as a string - * - * @return string - */ - public function getRawHeaders() - { - return $this->wrapped->getRawHeaders(); - } - - /** - * Get the collection of key value pairs that will be used as the query - * string in the request - * - * @return QueryString - */ - public function getQuery() - { - return $this->wrapped->getQuery(); - } - - /** - * Get the HTTP method of the request - * - * @return string - */ - public function getMethod() - { - return $this->wrapped->getMethod(); - } - - /** - * Get the URI scheme of the request (http, https, ftp, etc) - * - * @return string - */ - public function getScheme() - { - return $this->wrapped->getScheme(); - } - - /** - * Get the host of the request - * - * @return string - */ - public function getHost() - { - return $this->wrapped->getHost(); - } - - /** - * Get the HTTP protocol version of the request - * - * @return string - */ - public function getProtocolVersion() - { - return $this->wrapped->getProtocolVersion(); - } - - /** - * Get the path of the request (e.g. '/', '/index.html') - * - * @return string - */ - public function getPath() - { - return $this->wrapped->getPath(); - } - - /** - * Get the port that the request will be sent on if it has been set - * - * @return integer|null - */ - public function getPort() - { - return $this->wrapped->getPort(); - } - - /** - * Get the username to pass in the URL if set - * - * @return string|null - */ - public function getUsername() - { - return $this->wrapped->getUsername(); - } - - /** - * Get the password to pass in the URL if set - * - * @return string|null - */ - public function getPassword() - { - return $this->wrapped->getPassword(); - } - - /** - * Get the full URL of the request (e.g. 'http://www.guzzle-project.com/') - * scheme://username:password@domain:port/path?query_string#fragment - * - * @param boolean $asObject Set to TRUE to retrieve the URL as a clone of the URL object owned by the request. - * - * @return string|Url - */ - public function getUrl($asObject = false) - { - return $this->wrapped->getUrl($asObject); - } - - /** - * Get an array of Cookies - * - * @return array - */ - public function getCookies() - { - return $this->wrapped->getCookies(); - } - - /** - * Get a cookie value by name - * - * @param string $name Cookie to retrieve - * - * @return null|string - */ - public function getCookie($name) - { - return $this->wrapped->getCookie($name); - } - - protected function invokeWrappedIfEntityEnclosed($method, array $params = []) - { - if (!$this->wrapped instanceof EntityEnclosingRequestInterface) { - throw new BadMethodCallException( - sprintf( - 'Cannot call method "%s" on a request that does not enclose an entity.' - . ' Did you expect a POST/PUT request instead of %s %s?', - $method, - $this->wrapped->getMethod(), - $this->wrapped->getPath() - ) - ); - } - - return call_user_func_array([$this->wrapped, $method], $params); - } - - private function init(array $params) - { - foreach ($params as $property => $value) { - if (property_exists($this, $property)) { - $this->{$property} = $value; - } - } - } -} diff --git a/src/RequestCollectionFacade.php b/src/RequestCollectionFacade.php index e185902..2e2e287 100644 --- a/src/RequestCollectionFacade.php +++ b/src/RequestCollectionFacade.php @@ -1,20 +1,17 @@ client = $client; } @@ -71,72 +68,39 @@ public function shift() public function count() { $response = $this->client - ->get('/_request/count') - ->send(); + ->get('/_request/count'); - return (int) $response->getBody(true); + return (int) $response->getBody()->getContents(); } /** * @param Response $response * @param string $path * @throws UnexpectedValueException - * @return UnifiedRequest + * @return RequestInterface */ - private function parseRequestFromResponse(Response $response, $path) + private function parseRequestFromResponse(ResponseInterface $response, $path) { try { - $requestInfo = Util::deserialize($response->getBody()); + $contents = $response->getBody()->getContents(); + $requestInfo = Util::deserialize($contents); } catch (UnexpectedValueException $e) { throw new UnexpectedValueException( - sprintf('Cannot deserialize response from "%s": "%s"', $path, $response->getBody()), + sprintf('Cannot deserialize response from "%s": "%s"', $path, $contents), null, $e ); } - $request = RequestFactory::getInstance()->fromMessage($requestInfo['request']); - $params = $this->configureRequest( - $request, - $requestInfo['server'], - isset($requestInfo['enclosure']) ? $requestInfo['enclosure'] : [] - ); - - return new UnifiedRequest($request, $params); - } - - private function configureRequest(RequestInterface $request, array $server, array $enclosure) - { - if (isset($server['HTTP_HOST'])) { - $request->setHost($server['HTTP_HOST']); - } - - if (isset($server['HTTP_PORT'])) { - $request->setPort($server['HTTP_PORT']); - } - - if (isset($server['PHP_AUTH_USER'])) { - $request->setAuth($server['PHP_AUTH_USER'], isset($server['PHP_AUTH_PW']) ? $server['PHP_AUTH_PW'] : null); - } - - $params = []; - - if (isset($server['HTTP_USER_AGENT'])) { - $params['userAgent'] = $server['HTTP_USER_AGENT']; - } - - if ($request instanceof EntityEnclosingRequestInterface) { - $request->addPostFields($enclosure); - } + $request = \GuzzleHttp\Psr7\parse_request($requestInfo['request']); - return $params; + return $request; } private function getRecordedRequest($path) { $response = $this->client - ->get($path) - ->send(); + ->get($path); return $this->parseResponse($response, $path); } @@ -144,13 +108,12 @@ private function getRecordedRequest($path) private function deleteRecordedRequest($path) { $response = $this->client - ->delete($path) - ->send(); + ->delete($path); return $this->parseResponse($response, $path); } - private function parseResponse(Response $response, $path) + private function parseResponse(ResponseInterface $response, $path) { $statusCode = $response->getStatusCode(); @@ -161,7 +124,7 @@ private function parseResponse(Response $response, $path) } $contentType = $response->hasHeader('content-type') - ? $response->getContentType() + ? $response->getHeaderLine('content-type') : ''; if (substr($contentType, 0, 10) !== 'text/plain') { diff --git a/src/RequestStorage.php b/src/RequestStorage.php index f2838f8..7ff8fd4 100644 --- a/src/RequestStorage.php +++ b/src/RequestStorage.php @@ -1,7 +1,7 @@ directory . $this->pid . '-' . $name . '-' . $request->server->get('SERVER_PORT'); + return $this->directory . $this->pid . '-' . $name . '-' . $request->getUri()->getPort(); } public function clear(Request $request, $name) diff --git a/src/Response/CallbackResponse.php b/src/Response/CallbackResponse.php deleted file mode 100644 index 025979c..0000000 --- a/src/Response/CallbackResponse.php +++ /dev/null @@ -1,28 +0,0 @@ -callback = $callback; - } - - public function sendCallback() - { - if ($this->callback) { - $callback = $this->callback; - $callback($this); - } - } - - public function send() - { - $this->sendCallback(); - parent::send(); - } -} diff --git a/src/ResponseBuilder.php b/src/ResponseBuilder.php index 62890ba..3aa789f 100644 --- a/src/ResponseBuilder.php +++ b/src/ResponseBuilder.php @@ -1,7 +1,7 @@ mockBuilder = $mockBuilder; - $this->response = new CallbackResponse(); + $this->response = new Response(); } public function statusCode($statusCode) { - $this->response->setStatusCode($statusCode); + $this->response = $this->response->withStatus($statusCode); return $this; } public function body($body) { - $this->response->setContent($body); + $this->response = $this->response->withBody(\GuzzleHttp\Psr7\stream_for($body)); return $this; } public function callback(Closure $callback) { - $this->response->setCallback(new SerializableClosure($callback)); + $this->responseCallback = new SerializableClosure($callback); return $this; } public function header($header, $value) { - $this->response->headers->set($header, $value); + $this->response = $this->response->withHeader($header, $value); return $this; } @@ -56,4 +58,10 @@ public function getResponse() { return $this->response; } + + + public function getResponseCallback() + { + return $this->responseCallback; + } } diff --git a/src/Server.php b/src/Server.php index 24cd15f..7e55484 100644 --- a/src/Server.php +++ b/src/Server.php @@ -1,12 +1,11 @@ getBaseUrl()); - $client->getEventDispatcher()->addListener( - 'request.error', - static function (Event $event) { - $event->stopPropagation(); - } - ); + $client = new Client(['base_uri' => $this->getBaseUrl(), 'http_errors' => false]); return $client; } @@ -84,16 +77,16 @@ public function setUp(array $expectations) foreach ($expectations as $expectation) { $response = $this->getClient()->post( '/_expectation', - null, - [ + ['json' => [ 'matcher' => serialize($expectation->getMatcherClosures()), 'limiter' => serialize($expectation->getLimiter()), - 'response' => serialize($expectation->getResponse()), - ] - )->send(); + 'response' => Util::serializePsrMessage($expectation->getResponse()), + 'responseCallback' => serialize($expectation->getResponseCallback()), + ]] + ); if ($response->getStatusCode() !== 201) { - throw new RuntimeException('Could not set up expectations'); + throw new RuntimeException('Could not set up expectations: '.$response->getBody()->getContents()); } } } @@ -104,19 +97,28 @@ public function clean() $this->start(); } - $this->getClient()->delete('/_all')->send(); + $this->getClient()->delete('/_all'); } private function pollWait() { - foreach (FibonacciFactory::sequence(50000, 10000) as $sleepTime) { + $success = false; + foreach (FibonacciFactory::sequence(50000, 10000, 8) as $sleepTime) { try { usleep($sleepTime); - $this->getClient()->head('/_me')->send(); + $r = $this->getClient()->head('/_me'); + if ($r->getStatusCode() != 418) { + continue; + } + $success = true; break; - } catch (CurlException $e) { + } catch (ServerException $e) { continue; } } + + if (!$success) { + throw $e; + } } } diff --git a/src/Util.php b/src/Util.php index 6437a41..ffe0628 100644 --- a/src/Util.php +++ b/src/Util.php @@ -1,5 +1,5 @@ getHeaders(); + foreach($headers as $key => $list) { + foreach($list as $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $newKey = substr($key, 5); + $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $newKey)))); + $message = $message->withoutHeader($key)->withHeader($newKey, $value); + } + else + { + $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); + $message = $message->withoutHeader($key)->withHeader($newKey, $value); + } + } + } + return \GuzzleHttp\Psr7\str($message); + } } diff --git a/src/app.php b/src/app.php index 4df7419..2ddc0c6 100644 --- a/src/app.php +++ b/src/app.php @@ -1,13 +1,16 @@ [ + 'displayErrorDetails' => true, + ] +]); +$container['storage'] = new RequestStorage(getmypid(), __DIR__ . '/../state/'); +$app = new App($container); $app->delete( '/_expectation', - static function (Request $request) use ($app) { - $app['storage']->clear($request, 'expectations'); + function (Request $request, Response $response) use ($container) { + $container['storage']->clear($request, 'expectations'); - return new Response('', Response::HTTP_OK); + return $response->withStatus(StatusCode::HTTP_OK); } ); $app->post( '/_expectation', - static function (Request $request) use ($app) { + function (Request $request, Response $response) use ($container) { + $data = json_decode($request->getBody()->getContents(), true); $matcher = []; - if ($request->request->has('matcher')) { - $matcher = Util::silentDeserialize($request->request->get('matcher')); - $validator = static function ($closure) { + if (!empty($data['matcher'])) { + $matcher = Util::silentDeserialize($data['matcher']); + $validator = function ($closure) { return is_callable($closure); }; if (!is_array($matcher) || count(array_filter($matcher, $validator)) !== count($matcher)) { - return new Response( - 'POST data key "matcher" must be a serialized list of closures', - Response::HTTP_EXPECTATION_FAILED + return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( + 'POST data key "matcher" must be a serialized list of closures' ); } } - if (!$request->request->has('response')) { - return new Response('POST data key "response" not found in POST data', Response::HTTP_EXPECTATION_FAILED); + if (empty($data['response'])) { + return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( + 'POST data key "response" not found in POST data' + ); } - $response = Util::silentDeserialize($request->request->get('response')); - - if (!$response instanceof Response) { - return new Response( - 'POST data key "response" must be a serialized Symfony response', - Response::HTTP_EXPECTATION_FAILED + try + { + $responseToSave = Util::responseDeserialize($data['response']); + } + catch(Exception $e) + { + return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( + 'POST data key "response" must be an http response message in text form' ); } $limiter = null; - if ($request->request->has('limiter')) { - $limiter = Util::silentDeserialize($request->request->get('limiter')); + if (!empty($data['limiter'])) { + $limiter = Util::silentDeserialize($data['limiter']); if (!is_callable($limiter)) { - return new Response( - 'POST data key "limiter" must be a serialized closure', - Response::HTTP_EXPECTATION_FAILED + return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( + 'POST data key "limiter" must be a serialized closure' ); } } // Fix issue with silex default error handling - $response->headers->set('X-Status-Code', $response->getStatusCode()); + // not sure if this is need anymore + $response = $response->withHeader('X-Status-Code', $response->getStatusCode()); + + $responseCallback = null; + if (!empty($data['responseCallback'])) { + $responseCallback = Util::silentDeserialize($data['responseCallback']); + + if ($responseCallback !== null && !is_callable($responseCallback)) { + return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( + 'POST data key "responseCallback" must be a serialized closure: ' + .print_r($data['responseCallback'], true) + ); + } + } - $app['storage']->prepend( + $container['storage']->prepend( $request, 'expectations', - ['matcher' => $matcher, 'response' => $response, 'limiter' => $limiter, 'runs' => 0] + [ + 'matcher' => $matcher, + 'response' => $data['response'], + 'limiter' => $limiter, + 'responseCallback' => $responseCallback, + 'runs' => 0 + ] ); - return new Response('', Response::HTTP_CREATED); + return $response->withStatus(StatusCode::HTTP_CREATED); } ); -$app->error( - static function (Exception $e, Request $request, $code, GetResponseForExceptionEvent $event = null) use ($app) { - if ($e instanceof NotFoundHttpException) { - $app['storage']->append( - $request, - 'requests', - serialize( - [ - 'server' => $request->server->all(), - 'request' => (string) $request, - 'enclosure' => $request->request->all(), - ] - ) - ); +$container['phpErrorHandler'] = function($container) { + return function (Request $request, Response $response, Error $e) use ($container) { + return $response->withStatus(500) + ->withHeader('Content-Type', 'text/plain') + ->write($e->getMessage()."\n".$e->getTraceAsString()."\n"); + }; +}; + +$container['notFoundHandler'] = function($container) { + return function (Request $request, Response $response) use ($container) { + $container['storage']->append( + $request, + 'requests', + serialize( + [ + 'request' => Util::serializePsrMessage($request), + 'server' => $request->getServerParams(), + ] + ) + ); - $notFoundResponse = new Response('No matching expectation found', Response::HTTP_NOT_FOUND); + $notFoundResponse = $response->withStatus(StatusCode::HTTP_NOT_FOUND); - $expectations = $app['storage']->read($request, 'expectations'); + $expectations = $container['storage']->read($request, 'expectations'); - foreach ($expectations as $pos => $expectation) { - foreach ($expectation['matcher'] as $matcher) { - if (!$matcher($request)) { - continue 2; - } + foreach ($expectations as $pos => $expectation) { + foreach ($expectation['matcher'] as $matcher) { + if (!$matcher($request)) { + continue 2; } + } - if (isset($expectation['limiter']) && !$expectation['limiter']($expectation['runs'])) { - $notFoundResponse = new Response('Expectation no longer applicable', Response::HTTP_GONE); - continue; + if (isset($expectation['limiter']) && !$expectation['limiter']($expectation['runs'])) { + if ($notFoundResponse->getStatusCode() != StatusCode::HTTP_GONE) { + $notFoundResponse = $response->withStatus(StatusCode::HTTP_GONE) + ->write('Expectation no longer applicable'); } + continue; + } - ++$expectations[$pos]['runs']; - $app['storage']->store($request, 'expectations', $expectations); - - if (method_exists($event, 'allowCustomResponseCode')) { - $event->allowCustomResponseCode(); - } + ++$expectations[$pos]['runs']; + $container['storage']->store($request, 'expectations', $expectations); - return $expectation['response']; + $r = Util::responseDeserialize($expectation['response']); + if (!empty($expectation['responseCallback'])) { + $callback = $expectation['responseCallback']; + return $callback($r); } + return $r; + } - return $notFoundResponse; + if ($notFoundResponse->getStatusCode() == StatusCode::HTTP_NOT_FOUND) { + $notFoundResponse = $notFoundResponse->write('No matching expectation found'); } - return new Response('Server error: ' . $e->getMessage(), $code); - } -); + return $notFoundResponse; + }; +}; + +$container['errorHandler'] = function($container) { + return function (Request $request, Response $response, Exception $e) use ($container) { + return $response->withStatus(StatusCode::HTTP_INTERNAL_SERVER_ERROR)->write( + 'Server error: ' . $e->getMessage()); + }; +}; $app->get( '/_request/count', - static function (Request $request) use ($app) { - return count($app['storage']->read($request, 'requests')); + function (Request $request, Response $response) use ($container) { + $count = count($container['storage']->read($request, 'requests')); + return $response->withStatus(StatusCode::HTTP_OK) + ->write($count) + ->withHeader('Content-Type', 'text/plain'); } ); $app->get( - '/_request/{index}', - static function (Request $request, $index) use ($app) { - $requestData = $app['storage']->read($request, 'requests'); + '/_request/{index:[0-9]+}', + function (Request $request, Response $response, $args) use ($container) { + $index = (int)$args['index']; + $requestData = $container['storage']->read($request, 'requests'); if (!isset($requestData[$index])) { - return new Response('Index ' . $index . ' not found', Response::HTTP_NOT_FOUND); + return $response->withStatus(StatusCode::HTTP_NOT_FOUND)->write( + 'Index ' . $index . ' not found'); } - return new Response($requestData[$index], Response::HTTP_OK, ['Content-Type' => 'text/plain']); + return $response->withStatus(StatusCode::HTTP_OK) + ->write($requestData[$index]) + ->withHeader('Content-Type', 'text/plain'); } -)->assert('index', '\d+'); +); $app->delete( - '/_request/{action}', - static function (Request $request, $action) use ($app) { - $requestData = $app['storage']->read($request, 'requests'); - $fn = 'array_' . ($action === 'last' ? 'pop' : 'shift'); + '/_request/{action:last|latest|first}', + function (Request $request, Response $response, $args) use ($container) { + $action = $args['action']; + + $requestData = $container['storage']->read($request, 'requests'); + $fn = 'array_' . ($action === 'last' || $action === 'latest' ? 'pop' : 'shift'); $requestString = $fn($requestData); - $app['storage']->store($request, 'requests', $requestData); + $container['storage']->store($request, 'requests', $requestData); if (!$requestString) { - return new Response($action . ' not possible', Response::HTTP_NOT_FOUND); + return $response->withStatus(StatusCode::HTTP_NOT_FOUND)->write( + $action . ' not possible' + ); } - return new Response($requestString, Response::HTTP_OK, ['Content-Type' => 'text/plain']); + return $response->withStatus(StatusCode::HTTP_OK) + ->write($requestString) + ->withHeader('Content-Type', 'text/plain'); } -)->assert('index', '(last|first)'); +); $app->get( - '/_request/{action}', - static function (Request $request, $action) use ($app) { - $requestData = $app['storage']->read($request, 'requests'); - $fn = 'array_' . ($action === 'last' ? 'pop' : 'shift'); + '/_request/{action:last|latest|first}', + function (Request $request, Response $response, $args) use ($container) { + $action = $args['action']; + $requestData = $container['storage']->read($request, 'requests'); + $fn = 'array_' . ($action === 'last' || $action === 'latest' ? 'pop' : 'shift'); $requestString = $fn($requestData); if (!$requestString) { - return new Response($action . ' not available', Response::HTTP_NOT_FOUND); + return $response->withStatus(StatusCode::HTTP_NOT_FOUND)->write( + $action . ' not available' + ); } - return new Response($requestString, Response::HTTP_OK, ['Content-Type' => 'text/plain']); + return $response->withStatus(StatusCode::HTTP_OK) + ->withHeader('Content-Type', 'text/plain') + ->write($requestString); } -)->assert('index', '(last|first)'); +); $app->delete( '/_request', - static function (Request $request) use ($app) { - $app['storage']->store($request, 'requests', []); + function (Request $request, Response $response) use ($container) { + $container['storage']->store($request, 'requests', []); - return new Response('', Response::HTTP_OK); + return $response->withStatus(StatusCode::HTTP_OK); } ); $app->delete( '/_all', - static function (Request $request) use ($app) { - $app['storage']->store($request, 'requests', []); - $app['storage']->store($request, 'expectations', []); + function (Request $request, Response $response) use ($container) { + $container['storage']->store($request, 'requests', []); + $container['storage']->store($request, 'expectations', []); - return new Response('', Response::HTTP_OK); + return $response->withStatus(StatusCode::HTTP_OK); } ); $app->get( '/_me', - static function () { - return new Response('O RLY?', Response::HTTP_I_AM_A_TEAPOT, ['Content-Type' => 'text/plain']); + function (Request $request, Response $response) { + return $response->withStatus(StatusCode::HTTP_IM_A_TEAPOT) + ->write('O RLY?') + ->withHeader('Content-Type', 'text/plain'); } ); diff --git a/tests/AppIntegrationTest.php b/tests/AppIntegrationTest.php index 491cfe3..d701804 100644 --- a/tests/AppIntegrationTest.php +++ b/tests/AppIntegrationTest.php @@ -1,15 +1,14 @@ getOutput(), (string) static::$server1->getOutput()); - static::assertSame('', (string) static::$server1->getErrorOutput(), (string) static::$server1->getErrorOutput()); + $out = (string) static::$server1->getOutput(); + static::assertSame('', $out, $out); + + $out = (string) static::$server1->getErrorOutput(); + //static::assertSame('', $out, $out); + echo $out."\n"; + static::$server1->stop(); } @@ -49,110 +53,130 @@ public function setUp() public function testSimpleUseCase() { - $response = $this->client->post( - '/_expectation', - null, - $this->createExpectationParams( - [ - static function ($request) { - return $request instanceof Request; - } - ], - new Response('fake body', 200) - ) - )->send(); + $params = $this->createExpectationParams( + [ + static function ($request) { + return $request instanceof RequestInterface; + } + ], + new Response(200, ['Host' => 'localhost'], 'fake body') + ); + + $response = $this->client->post( '/_expectation', ['json' => $params]); $this->assertSame('', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $response = $this->client->post('/foobar', ['X-Special' => 1], ['post' => 'data'])->send(); + $response = $this->client->post('/foobar', [ + 'headers' => ['X-Special' => 1], + 'form_params' => ['post' => 'data'], + ]); $this->assertSame(200, $response->getStatusCode()); $this->assertSame('fake body', (string) $response->getBody()); - $response = $this->client->get('/_request/latest')->send(); + $response = $this->client->get('/_request/latest'); /** @var EntityEnclosingRequest $request */ $request = $this->parseRequestFromResponse($response); - $this->assertSame('1', (string) $request->getHeader('X-Special')); + $this->assertSame('1', (string) $request->getHeaderLine('X-Special')); $this->assertSame('post=data', (string) $request->getBody()); } public function testRecording() { - $this->client->delete('/_all')->send(); + $this->client->delete('/_all'); - $this->assertSame(404, $this->client->get('/_request/latest')->send()->getStatusCode()); - $this->assertSame(404, $this->client->get('/_request/0')->send()->getStatusCode()); - $this->assertSame(404, $this->client->get('/_request/first')->send()->getStatusCode()); - $this->assertSame(404, $this->client->get('/_request/last')->send()->getStatusCode()); + $this->assertSame(404, $this->client->get('/_request/latest')->getStatusCode()); + $this->assertSame(404, $this->client->get('/_request/0')->getStatusCode()); + $this->assertSame(404, $this->client->get('/_request/first')->getStatusCode()); + $this->assertSame(404, $this->client->get('/_request/last')->getStatusCode()); - $this->client->get('/req/0')->send(); - $this->client->get('/req/1')->send(); - $this->client->get('/req/2')->send(); - $this->client->get('/req/3')->send(); + $this->client->get('/req/0'); + $this->client->get('/req/1'); + $this->client->get('/req/2'); + $this->client->get('/req/3'); $this->assertSame( '/req/3', - $this->parseRequestFromResponse($this->client->get('/_request/last')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/last'))->getUri()->getPath() ); $this->assertSame( '/req/0', - $this->parseRequestFromResponse($this->client->get('/_request/0')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/0'))->getUri()->getPath() ); $this->assertSame( '/req/1', - $this->parseRequestFromResponse($this->client->get('/_request/1')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/1'))->getUri()->getPath() ); $this->assertSame( '/req/2', - $this->parseRequestFromResponse($this->client->get('/_request/2')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/2'))->getUri()->getPath() ); $this->assertSame( '/req/3', - $this->parseRequestFromResponse($this->client->get('/_request/3')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/3'))->getUri()->getPath() ); - $this->assertSame(404, $this->client->get('/_request/4')->send()->getStatusCode()); + $this->assertSame(404, $this->client->get('/_request/4')->getStatusCode()); $this->assertSame( '/req/3', - $this->parseRequestFromResponse($this->client->delete('/_request/last')->send())->getPath() + $this->parseRequestFromResponse($this->client->delete('/_request/last'))->getUri()->getPath() ); $this->assertSame( '/req/0', - $this->parseRequestFromResponse($this->client->delete('/_request/first')->send())->getPath() + $this->parseRequestFromResponse($this->client->delete('/_request/first'))->getUri()->getPath() ); $this->assertSame( '/req/1', - $this->parseRequestFromResponse($this->client->get('/_request/0')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/0'))->getUri()->getPath() ); $this->assertSame( '/req/2', - $this->parseRequestFromResponse($this->client->get('/_request/1')->send())->getPath() + $this->parseRequestFromResponse($this->client->get('/_request/1'))->getUri()->getPath() ); - $this->assertSame(404, $this->client->get('/_request/2')->send()->getStatusCode()); + $this->assertSame(404, $this->client->get('/_request/2')->getStatusCode()); } public function testErrorHandling() { - $this->client->delete('/_all')->send(); - - $response = $this->client->post('/_expectation', null, ['matcher' => ''])->send(); + $this->client->delete('/_all'); + + $tester = function($matcher, $response = null, $limiter = null) { + $payload = []; + if ($response === null) { + $payload['response'] = \GuzzleHttp\Psr7\str(new Response(200, [], 'foo')); + } elseif ($response !== false) { + $payload['response'] = $response; + } + if ($matcher === null) { + $matcher['matcher'] = serialize([new SerializableClosure(function() { return true; })]); + } elseif ($matcher !== false) { + $payload['matcher'] = $matcher; + } + + if ($limiter !== false && $limiter !== null) { + $payload['limiter'] = $limiter; + } + return $this->client->post('/_expectation', ['json' => $payload]); + }; + + $response = $tester('hi'); $this->assertSame(417, $response->getStatusCode()); $this->assertSame('POST data key "matcher" must be a serialized list of closures', (string) $response->getBody()); - $response = $this->client->post('/_expectation', null, ['matcher' => ['foo']])->send(); + $response = $tester(['foo']); $this->assertSame(417, $response->getStatusCode()); $this->assertSame('POST data key "matcher" must be a serialized list of closures', (string) $response->getBody()); - $response = $this->client->post('/_expectation', null, [])->send(); + $response = $tester(null, false); $this->assertSame(417, $response->getStatusCode()); $this->assertSame('POST data key "response" not found in POST data', (string) $response->getBody()); - $response = $this->client->post('/_expectation', null, ['response' => ''])->send(); + $response = $tester(null, 'foo'); $this->assertSame(417, $response->getStatusCode()); - $this->assertSame('POST data key "response" must be a serialized Symfony response', (string) $response->getBody()); + $this->assertSame('POST data key "response" must be an http response message in text form', (string) $response->getBody()); - $response = $this->client->post('/_expectation', null, ['response' => serialize(new Response()), 'limiter' => 'foo'])->send(); + $response = $tester(null, null, 'foo'); $this->assertSame(417, $response->getStatusCode()); $this->assertSame('POST data key "limiter" must be a serialized closure', (string) $response->getBody()); } @@ -160,13 +184,15 @@ public function testErrorHandling() public function testServerParamsAreRecorded() { $this->client - ->setUserAgent('CUSTOM UA') - ->get('/foo') - ->setAuth('username', 'password') - ->setProtocolVersion('1.0') - ->send(); + ->get('/foo', [ + 'headers' => [ + 'User-Agent' => 'CUSTOM UA' + ], + 'auth' => ['username', 'password'], + 'version' => '1.0' + ]); - $latestRequest = unserialize($this->client->get('/_request/latest')->send()->getBody()); + $latestRequest = unserialize($this->client->get('/_request/latest')->getBody()); $this->assertSame(HTTP_MOCK_HOST, $latestRequest['server']['SERVER_NAME']); $this->assertSame(HTTP_MOCK_PORT, $latestRequest['server']['SERVER_PORT']); @@ -180,38 +206,37 @@ public function testNewestExpectationsAreFirstEvaluated() { $this->client->post( '/_expectation', - null, - $this->createExpectationParams( + ['json' => $this->createExpectationParams( [ static function ($request) { - return $request instanceof Request; + return $request instanceof RequestInterface; } ], - new Response('first', 200) - ) - )->send(); - $this->assertSame('first', $this->client->get('/')->send()->getBody(true)); + new Response(200, [], 'first') + )] + ); + $this->assertSame('first', $this->client->get('/')->getBody()->getContents()); $this->client->post( '/_expectation', - null, + ['json' => $this->createExpectationParams( [ static function ($request) { - return $request instanceof Request; + return $request instanceof RequestInterface; } ], - new Response('second', 200) - ) - )->send(); - $this->assertSame('second', $this->client->get('/')->send()->getBody(true)); + new Response(200, [], 'second') + )] + ); + $this->assertSame('second', $this->client->get('/')->getBody()->getContents()); } - private function parseRequestFromResponse(GuzzleResponse $response) + private function parseRequestFromResponse(Response $response) { $body = unserialize($response->getBody()); - return RequestFactory::getInstance()->fromMessage($body['request']); + return \GuzzleHttp\Psr7\parse_request($body['request']); } private function createExpectationParams(array $closures, Response $response) @@ -222,7 +247,7 @@ private function createExpectationParams(array $closures, Response $response) return [ 'matcher' => serialize($closures), - 'response' => serialize($response), + 'response' => \GuzzleHttp\Psr7\str($response) ]; } } diff --git a/tests/Fixtures/Request.php b/tests/Fixtures/Request.php index b6d746e..f38af08 100644 --- a/tests/Fixtures/Request.php +++ b/tests/Fixtures/Request.php @@ -1,10 +1,21 @@ requestUri = $requestUri; diff --git a/tests/Matcher/ExtractorFactoryTest.php b/tests/Matcher/ExtractorFactoryTest.php index c71dd42..098fc50 100644 --- a/tests/Matcher/ExtractorFactoryTest.php +++ b/tests/Matcher/ExtractorFactoryTest.php @@ -1,9 +1,9 @@ extractorFactory = new ExtractorFactory(); - $this->request = $this->createMock('Symfony\Component\HttpFoundation\Request'); } public function testGetMethod() { - $this->request - ->expects($this->once()) - ->method('getMethod') - ->will($this->returnValue('POST')); + $request = new Request( + 'POST', + '/' + ); $extractor = $this->extractorFactory->createMethodExtractor(); - $this->assertSame('POST', $extractor($this->request)); + $this->assertSame('POST', $extractor($request)); } public function testGetPath() { - $this->request - ->expects($this->once()) - ->method('getPathInfo') - ->will($this->returnValue('/foo/bar')); + $request = new Request( + 'GET', + '/foo/bar' + ); $extractor = $this->extractorFactory->createPathExtractor(); - $this->assertSame('/foo/bar', $extractor($this->request)); + $this->assertSame('/foo/bar', $extractor($request)); } public function testGetPathWithBasePath() { - $this->request - ->expects($this->once()) - ->method('getPathInfo') - ->will($this->returnValue('/foo/bar')); + $request = new Request( + 'GET', + '/foo/bar' + ); $extractorFactory = new ExtractorFactory('/foo'); $extractor = $extractorFactory->createPathExtractor(); - $this->assertSame('/bar', $extractor($this->request)); + $this->assertSame('/bar', $extractor($request)); } public function testGetPathWithBasePathTrailingSlash() { - $this->request - ->expects($this->once()) - ->method('getPathInfo') - ->will($this->returnValue('/foo/bar')); + $request = new Request( + 'GET', + '/foo/bar' + ); $extractorFactory = new ExtractorFactory('/foo/'); $extractor = $extractorFactory->createPathExtractor(); - $this->assertSame('/bar', $extractor($this->request)); + $this->assertSame('/bar', $extractor($request)); } public function testGetPathWithBasePathThatDoesNotMatch() { - $this->request - ->expects($this->once()) - ->method('getPathInfo') - ->will($this->returnValue('/bar')); + $request = new Request( + 'GET', + '/bar' + ); $extractorFactory = new ExtractorFactory('/foo'); $extractor = $extractorFactory->createPathExtractor(); - $this->assertSame('', $extractor($this->request)); + $this->assertSame('', $extractor($request)); } public function testGetHeaderWithExistingHeader() { $request = new Request( - [], - [], - [], - [], - [], - ['HTTP_CONTENT_TYPE' => 'application/json'] + 'GET', + '/', + ['Content-Type' => 'application/json'] ); $extractorFactory = new ExtractorFactory('/foo'); @@ -101,12 +97,9 @@ public function testGetHeaderWithExistingHeader() public function testGetHeaderWithNonExistingHeader() { $request = new Request( - [], - [], - [], - [], - [], - ['HTTP_X_FOO' => 'bar'] + 'GET', + '/', + ['X-Foo' => 'bar'] ); $extractorFactory = new ExtractorFactory('/foo'); @@ -118,12 +111,9 @@ public function testGetHeaderWithNonExistingHeader() public function testHeaderExistsWithExistingHeader() { $request = new Request( - [], - [], - [], - [], - [], - ['HTTP_CONTENT_TYPE' => 'application/json'] + 'GET', + '/', + ['Content-Type' => 'application/json'] ); $extractorFactory = new ExtractorFactory('/foo'); @@ -135,12 +125,9 @@ public function testHeaderExistsWithExistingHeader() public function testHeaderExistsWithNonExistingHeader() { $request = new Request( - [], - [], - [], - [], - [], - ['HTTP_X_FOO' => 'bar'] + 'GET', + '/', + ['X-Foo' => 'bar'] ); $extractorFactory = new ExtractorFactory('/foo'); diff --git a/tests/Matcher/StringMatcherTest.php b/tests/Matcher/StringMatcherTest.php index 32df60c..e0b688c 100644 --- a/tests/Matcher/StringMatcherTest.php +++ b/tests/Matcher/StringMatcherTest.php @@ -1,9 +1,9 @@ setExtractor(static function() { return 0; }); - self::assertTrue($matcher->getMatcher()(new Request())); + self::assertTrue($matcher->getMatcher()(new Request('GET', '/'))); } } diff --git a/tests/MockBuilderIntegrationTest.php b/tests/MockBuilderIntegrationTest.php index 9b64c27..b571579 100644 --- a/tests/MockBuilderIntegrationTest.php +++ b/tests/MockBuilderIntegrationTest.php @@ -1,16 +1,16 @@ pathIs('/foo') ->methodIs($this->matches->regex('/POST/')) ->callback(static function (Request $request) { - error_log('CLOSURE MATCHER: ' . $request->getMethod() . ' ' . $request->getPathInfo()); + error_log('CLOSURE MATCHER: ' . $request->getMethod() . ' ' . $request->getUri()->getPath()); return true; }) ->then() @@ -65,9 +65,7 @@ public function testCreateExpectation() /** @var Expectation $expectation */ $expectation = current($expectations); - $request = new TestRequest(); - $request->setMethod('POST'); - $request->setRequestUri('/foo'); + $request = new TestRequest('POST', '/foo'); $run = 0; $oldValue = ini_set('error_log', '/dev/null'); @@ -82,16 +80,11 @@ public function testCreateExpectation() ini_set('error_log', $oldValue); $this->assertSame(3, $run); - $expectation->getResponse()->setDate(new DateTime('2012-11-10 09:08:07', new DateTimeZone('UTC'))); - $response = "HTTP/1.0 401 Unauthorized\r\nCache-Control: no-cache, private\r\nDate: Sat, 10 Nov 2012 09:08:07 GMT\r\nX-Foo: Bar\r\n\r\nresponse body"; - $this->assertSame($response, (string)$expectation->getResponse()); - - $this->server->setUp($expectations); $client = $this->server->getClient(); - $this->assertSame('response body', (string) $client->post('/foo')->send()->getBody()); + $this->assertSame('response body', (string) $client->post('/foo')->getBody()); $this->assertContains('CLOSURE MATCHER: POST /foo', $this->server->getErrorOutput()); } @@ -118,9 +111,9 @@ public function testCreateTwoExpectationsAfterEachOther() ->end(); $this->server->setUp($this->builder->flushExpectations()); - $this->assertSame('POST 1', (string) $this->server->getClient()->post('/post-resource-1')->send()->getBody()); - $this->assertSame('POST 2', (string) $this->server->getClient()->post('/post-resource-2')->send()->getBody()); - $this->assertSame('POST 1', (string) $this->server->getClient()->post('/post-resource-1')->send()->getBody()); - $this->assertSame('POST 2', (string) $this->server->getClient()->post('/post-resource-2')->send()->getBody()); + $this->assertSame('POST 1', (string) $this->server->getClient()->post('/post-resource-1')->getBody()); + $this->assertSame('POST 2', (string) $this->server->getClient()->post('/post-resource-2')->getBody()); + $this->assertSame('POST 1', (string) $this->server->getClient()->post('/post-resource-1')->getBody()); + $this->assertSame('POST 2', (string) $this->server->getClient()->post('/post-resource-2')->getBody()); } } diff --git a/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php b/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php index d4561ef..b86ba44 100644 --- a/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php +++ b/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php @@ -1,9 +1,9 @@ end(); $this->http['firstNamedServer']->setUp(); - $this->assertSame($path . ' body', (string) $this->http['firstNamedServer']->client->get($path)->send()->getBody()); + $this->assertSame($path . ' body', (string) $this->http['firstNamedServer']->client->get($path)->getBody()); $request = $this->http['firstNamedServer']->requests->latest(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http['firstNamedServer']->requests->last(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http['firstNamedServer']->requests->first(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http['firstNamedServer']->requests->at(0); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http['firstNamedServer']->requests->pop(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); - $this->assertSame($path . ' body', (string) $this->http['firstNamedServer']->client->get($path)->send()->getBody()); + $this->assertSame($path . ' body', (string) $this->http['firstNamedServer']->client->get($path)->getBody()); $request = $this->http['firstNamedServer']->requests->shift(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $this->expectException('UnexpectedValueException'); @@ -96,7 +96,7 @@ public function testErrorLogOutput() ->end(); $this->http['firstNamedServer']->setUp(); - $this->http['firstNamedServer']->client->get('/foo')->send(); + $this->http['firstNamedServer']->client->get('/foo'); // Should fail during tear down as we have an error_log() on the server side try { @@ -109,7 +109,7 @@ public function testErrorLogOutput() public function testFailedRequest() { - $response = $this->http['firstNamedServer']->client->get('/foo')->send(); + $response = $this->http['firstNamedServer']->client->get('/foo'); $this->assertSame(404, $response->getStatusCode()); $this->assertSame('No matching expectation found', (string) $response->getBody()); } @@ -122,7 +122,7 @@ public function testStopServer() /** @depends testStopServer */ public function testHttpServerIsRestartedIfATestStopsIt() { - $response = $this->http['firstNamedServer']->client->get('/')->send(); + $response = $this->http['firstNamedServer']->client->get('/'); $this->assertSame(404, $response->getStatusCode()); } @@ -136,11 +136,11 @@ public function testLimitDurationOfAResponse() ->body('POST METHOD') ->end(); $this->http['firstNamedServer']->setUp(); - $firstResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $firstResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(200, $firstResponse->getStatusCode()); - $secondResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $secondResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(410, $secondResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', $secondResponse->getBody(true)); + $this->assertSame('Expectation no longer applicable', $secondResponse->getBody()->getContents()); $this->http['firstNamedServer']->mock ->exactly(2) @@ -150,13 +150,13 @@ public function testLimitDurationOfAResponse() ->body('POST METHOD') ->end(); $this->http['firstNamedServer']->setUp(); - $firstResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $firstResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(200, $firstResponse->getStatusCode()); - $secondResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $secondResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(200, $secondResponse->getStatusCode()); - $thirdResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $thirdResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(410, $thirdResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', $thirdResponse->getBody(true)); + $this->assertSame('Expectation no longer applicable', (string)$thirdResponse->getBody()); $this->http['firstNamedServer']->mock ->any() @@ -166,11 +166,11 @@ public function testLimitDurationOfAResponse() ->body('POST METHOD') ->end(); $this->http['firstNamedServer']->setUp(); - $firstResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $firstResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(200, $firstResponse->getStatusCode()); - $secondResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $secondResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(200, $secondResponse->getStatusCode()); - $thirdResponse = $this->http['firstNamedServer']->client->post('/')->send(); + $thirdResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(200, $thirdResponse->getStatusCode()); } @@ -180,10 +180,10 @@ public function testCallbackOnResponse() ->when() ->methodIs('POST') ->then() - ->callback(static function(Response $response) {$response->setContent('CALLBACK');}) + ->callback(static function(Response $response) {return $response->withBody(\GuzzleHttp\Psr7\stream_for('CALLBACK'));}) ->end(); $this->http['firstNamedServer']->setUp(); - $this->assertSame('CALLBACK', $this->http['firstNamedServer']->client->post('/')->send()->getBody(true)); + $this->assertSame('CALLBACK', (string)$this->http['firstNamedServer']->client->post('/')->getBody()); } public function testComplexResponse() @@ -198,11 +198,16 @@ public function testComplexResponse() ->end(); $this->http['firstNamedServer']->setUp(); $response = $this->http['firstNamedServer']->client - ->post('/', ['x-client-header' => 'header-value'], ['post-key' => 'post-value'])->send(); - $this->assertSame('BODY', $response->getBody(true)); + ->post('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['post-key' => 'post-value'] + ]); + $this->assertSame('BODY', (string)$response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $this->assertSame('Bar', (string) $response->getHeader('X-Foo')); - $this->assertSame('post-value', $this->http['firstNamedServer']->requests->latest()->getPostField('post-key')); + $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); + + parse_str($this->http['firstNamedServer']->requests->latest()->getBody()->getContents(), $body); + $this->assertSame('post-value', $body['post-key']); } public function testPutRequest() @@ -217,11 +222,15 @@ public function testPutRequest() ->end(); $this->http['firstNamedServer']->setUp(); $response = $this->http['firstNamedServer']->client - ->put('/', ['x-client-header' => 'header-value'], ['put-key' => 'put-value'])->send(); - $this->assertSame('BODY', $response->getBody(true)); + ->put('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['put-key' => 'put-value'] + ]); + $this->assertSame('BODY', (string)$response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $this->assertSame('Bar', (string) $response->getHeader('X-Foo')); - $this->assertSame('put-value', $this->http['firstNamedServer']->requests->latest()->getPostField('put-key')); + $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); + parse_str($this->http['firstNamedServer']->requests->latest()->getBody()->getContents(), $body); + $this->assertSame('put-value', $body['put-key']); } public function testPostRequest() @@ -236,11 +245,15 @@ public function testPostRequest() ->end(); $this->http['firstNamedServer']->setUp(); $response = $this->http['firstNamedServer']->client - ->post('/', ['x-client-header' => 'header-value'], ['post-key' => 'post-value'])->send(); - $this->assertSame('BODY', $response->getBody(true)); + ->post('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['post-key' => 'post-value'] + ]); + $this->assertSame('BODY', (string)$response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $this->assertSame('Bar', (string) $response->getHeader('X-Foo')); - $this->assertSame('post-value', $this->http['firstNamedServer']->requests->latest()->getPostField('post-key')); + $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); + parse_str($this->http['firstNamedServer']->requests->latest()->getBody()->getContents(), $body); + $this->assertSame('post-value', $body['post-key']); } public function testFatalError() diff --git a/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php b/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php index 8cc8199..a379ca4 100644 --- a/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php +++ b/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php @@ -1,8 +1,8 @@ end(); $this->http->setUp(); - $this->assertSame('/foo body', (string) $this->http->client->get('/custom-base-path/foo')->send()->getBody()); + $this->assertSame('/foo body', (string) $this->http->client->get('/custom-base-path/foo')->getBody()); $request = $this->http->requests->latest(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame('/custom-base-path/foo', $request->getPath()); + $this->assertSame('/custom-base-path/foo', $request->getUri()->getPath()); } } diff --git a/tests/PHPUnit/HttpMockPHPUnitIntegrationTest.php b/tests/PHPUnit/HttpMockPHPUnitIntegrationTest.php index 806e420..9b5893f 100644 --- a/tests/PHPUnit/HttpMockPHPUnitIntegrationTest.php +++ b/tests/PHPUnit/HttpMockPHPUnitIntegrationTest.php @@ -1,11 +1,12 @@ end(); $this->http->setUp(); - $this->assertSame($path . ' body', (string) $this->http->client->get($path)->send()->getBody()); + $this->assertSame($path . ' body', (string) $this->http->client->get($path)->getBody()); $request = $this->http->requests->latest(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http->requests->last(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http->requests->first(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http->requests->at(0); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $request = $this->http->requests->pop(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); - $this->assertSame($path . ' body', (string) $this->http->client->get($path)->send()->getBody()); + $this->assertSame($path . ' body', (string) $this->http->client->get($path)->getBody()); $request = $this->http->requests->shift(); $this->assertSame('GET', $request->getMethod()); - $this->assertSame($path, $request->getPath()); + $this->assertSame($path, $request->getUri()->getPath()); $this->expectException('UnexpectedValueException'); @@ -96,7 +97,7 @@ public function testErrorLogOutput() ->end(); $this->http->setUp(); - $this->http->client->get('/foo')->send(); + $this->http->client->get('/foo'); // Should fail during tear down as we have an error_log() on the server side try { @@ -109,7 +110,7 @@ public function testErrorLogOutput() public function testFailedRequest() { - $response = $this->http->client->get('/foo')->send(); + $response = $this->http->client->get('/foo'); $this->assertSame(404, $response->getStatusCode()); $this->assertSame('No matching expectation found', (string) $response->getBody()); } @@ -122,7 +123,7 @@ public function testStopServer() /** @depends testStopServer */ public function testHttpServerIsRestartedIfATestStopsIt() { - $response = $this->http->client->get('/')->send(); + $response = $this->http->client->get('/'); $this->assertSame(404, $response->getStatusCode()); } @@ -136,11 +137,11 @@ public function testLimitDurationOfAResponse() ->body('POST METHOD') ->end(); $this->http->setUp(); - $firstResponse = $this->http->client->post('/')->send(); + $firstResponse = $this->http->client->post('/'); $this->assertSame(200, $firstResponse->getStatusCode()); - $secondResponse = $this->http->client->post('/')->send(); + $secondResponse = $this->http->client->post('/'); $this->assertSame(410, $secondResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', $secondResponse->getBody(true)); + $this->assertSame('Expectation no longer applicable', (string)$secondResponse->getBody()); $this->http->mock ->exactly(2) @@ -150,13 +151,13 @@ public function testLimitDurationOfAResponse() ->body('POST METHOD') ->end(); $this->http->setUp(); - $firstResponse = $this->http->client->post('/')->send(); + $firstResponse = $this->http->client->post('/'); $this->assertSame(200, $firstResponse->getStatusCode()); - $secondResponse = $this->http->client->post('/')->send(); + $secondResponse = $this->http->client->post('/'); $this->assertSame(200, $secondResponse->getStatusCode()); - $thirdResponse = $this->http->client->post('/')->send(); + $thirdResponse = $this->http->client->post('/'); $this->assertSame(410, $thirdResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', $thirdResponse->getBody(true)); + $this->assertSame('Expectation no longer applicable', (string)$thirdResponse->getBody()); $this->http->mock ->any() @@ -166,11 +167,11 @@ public function testLimitDurationOfAResponse() ->body('POST METHOD') ->end(); $this->http->setUp(); - $firstResponse = $this->http->client->post('/')->send(); + $firstResponse = $this->http->client->post('/'); $this->assertSame(200, $firstResponse->getStatusCode()); - $secondResponse = $this->http->client->post('/')->send(); + $secondResponse = $this->http->client->post('/'); $this->assertSame(200, $secondResponse->getStatusCode()); - $thirdResponse = $this->http->client->post('/')->send(); + $thirdResponse = $this->http->client->post('/'); $this->assertSame(200, $thirdResponse->getStatusCode()); } @@ -180,10 +181,12 @@ public function testCallbackOnResponse() ->when() ->methodIs('POST') ->then() - ->callback(static function(Response $response) {$response->setContent('CALLBACK');}) + ->callback(static function(Response $response) { + return $response->withBody(\GuzzleHttp\Psr7\stream_For('CALLBACK')); + }) ->end(); $this->http->setUp(); - $this->assertSame('CALLBACK', $this->http->client->post('/')->send()->getBody(true)); + $this->assertSame('CALLBACK', (string)$this->http->client->post('/')->getBody()); } public function testComplexResponse() @@ -198,11 +201,15 @@ public function testComplexResponse() ->end(); $this->http->setUp(); $response = $this->http->client - ->post('/', ['x-client-header' => 'header-value'], ['post-key' => 'post-value'])->send(); - $this->assertSame('BODY', $response->getBody(true)); + ->post('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['post-key' => 'post-value'], + ]); + $this->assertSame('BODY', (string)$response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $this->assertSame('Bar', (string) $response->getHeader('X-Foo')); - $this->assertSame('post-value', $this->http->requests->latest()->getPostField('post-key')); + $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); + parse_str($this->http->requests->latest()->getBody()->getContents(), $body); + $this->assertSame('post-value', $body['post-key']); } public function testPutRequest() @@ -217,11 +224,15 @@ public function testPutRequest() ->end(); $this->http->setUp(); $response = $this->http->client - ->put('/', ['x-client-header' => 'header-value'], ['put-key' => 'put-value'])->send(); - $this->assertSame('BODY', $response->getBody(true)); + ->put('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['put-key' => 'put-value'] + ]); + $this->assertSame('BODY', (string)$response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $this->assertSame('Bar', (string) $response->getHeader('X-Foo')); - $this->assertSame('put-value', $this->http->requests->latest()->getPostField('put-key')); + $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); + parse_str($this->http->requests->latest()->getBody()->getContents(), $body); + $this->assertSame('put-value', $body['put-key']); } public function testPostRequest() @@ -236,11 +247,15 @@ public function testPostRequest() ->end(); $this->http->setUp(); $response = $this->http->client - ->post('/', ['x-client-header' => 'header-value'], ['post-key' => 'post-value'])->send(); - $this->assertSame('BODY', $response->getBody(true)); + ->post('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['post-key' => 'post-value'] + ]); + $this->assertSame('BODY', (string)$response->getBody()); $this->assertSame(201, $response->getStatusCode()); - $this->assertSame('Bar', (string) $response->getHeader('X-Foo')); - $this->assertSame('post-value', $this->http->requests->latest()->getPostField('post-key')); + $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); + parse_str($this->http->requests->latest()->getBody()->getContents(), $body); + $this->assertSame('post-value', $body['post-key']); } public function testCountRequests() @@ -254,7 +269,7 @@ public function testCountRequests() $this->http->setUp(); $this->assertCount(0, $this->http->requests); - $this->assertSame('resource body', (string) $this->http->client->get('/resource')->send()->getBody()); + $this->assertSame('resource body', (string) $this->http->client->get('/resource')->getBody()); $this->assertCount(1, $this->http->requests); } @@ -264,7 +279,8 @@ public function testMatchQueryString() ->when() ->callback( function (Request $request) { - return $request->query->has('key1'); + parse_str($request->getUri()->getQuery(), $query); + return isset($query['key1']); } ) ->methodIs('GET') @@ -273,10 +289,10 @@ function (Request $request) { ->end(); $this->http->setUp(); - $this->assertSame('query string', (string) $this->http->client->get('/?key1=')->send()->getBody()); + $this->assertSame('query string', (string) $this->http->client->get('/?key1=')->getBody()); - $this->assertEquals(Response::HTTP_NOT_FOUND, (string) $this->http->client->get('/')->send()->getStatusCode()); - $this->assertEquals(Response::HTTP_NOT_FOUND, (string) $this->http->client->post('/')->send()->getStatusCode()); + $this->assertEquals(StatusCode::HTTP_NOT_FOUND, (string) $this->http->client->get('/')->getStatusCode()); + $this->assertEquals(StatusCode::HTTP_NOT_FOUND, (string) $this->http->client->post('/')->getStatusCode()); } public function testMatchRegex() @@ -289,8 +305,8 @@ public function testMatchRegex() ->end(); $this->http->setUp(); - $this->assertSame('response', (string) $this->http->client->get('/')->send()->getBody()); - $this->assertSame('response', (string) $this->http->client->get('/')->send()->getBody()); + $this->assertSame('response', (string) $this->http->client->get('/')->getBody()); + $this->assertSame('response', (string) $this->http->client->get('/')->getBody()); } public function testMatchQueryParams() @@ -310,19 +326,19 @@ public function testMatchQueryParams() $this->assertSame( 'response', - (string) $this->http->client->get('/?p1=&p2=v2&p4=any&p5=v5&p6=v6')->send()->getBody() + (string) $this->http->client->get('/?p1=&p2=v2&p4=any&p5=v5&p6=v6')->getBody() ); $this->assertEquals( - Response::HTTP_NOT_FOUND, - (string) $this->http->client->get('/?p1=&p2=v2&p3=foo')->send()->getStatusCode() + StatusCode::HTTP_NOT_FOUND, + (string) $this->http->client->get('/?p1=&p2=v2&p3=foo')->getStatusCode() ); $this->assertEquals( - Response::HTTP_NOT_FOUND, - (string) $this->http->client->get('/?p1=')->send()->getStatusCode() + StatusCode::HTTP_NOT_FOUND, + (string) $this->http->client->get('/?p1=')->getStatusCode() ); $this->assertEquals( - Response::HTTP_NOT_FOUND, - (string) $this->http->client->get('/?p3=foo')->send()->getStatusCode() + StatusCode::HTTP_NOT_FOUND, + (string) $this->http->client->get('/?p3=foo')->getStatusCode() ); } diff --git a/tests/Request/UnifiedRequestTest.php b/tests/Request/UnifiedRequestTest.php deleted file mode 100644 index 479a384..0000000 --- a/tests/Request/UnifiedRequestTest.php +++ /dev/null @@ -1,134 +0,0 @@ -wrappedRequest = $this->createMock('Guzzle\Http\Message\RequestInterface'); - $this->wrappedEntityEnclosingRequest = $this->createMock('Guzzle\Http\Message\EntityEnclosingRequestInterface'); - $this->unifiedRequest = new UnifiedRequest($this->wrappedRequest); - $this->unifiedEnclosingEntityRequest = new UnifiedRequest($this->wrappedEntityEnclosingRequest); - } - - public static function provideMethods() - { - return [ - ['getParams'], - ['getHeaders'], - ['getHeaderLines'], - ['getRawHeaders'], - ['getQuery'], - ['getMethod'], - ['getScheme'], - ['getHost'], - ['getProtocolVersion'], - ['getPath'], - ['getPort'], - ['getUsername'], - ['getPassword'], - ['getUrl'], - ['getCookies'], - ['getHeader', ['header']], - ['hasHeader', ['header']], - ['getUrl', [false]], - ['getUrl', [true]], - ['getCookie', ['cookieName']], - ]; - } - - public static function provideEntityEnclosingInterfaceMethods() - { - return [ - ['getBody'], - ['getPostField', ['postField']], - ['getPostFields'], - ['getPostFiles'], - ['getPostFile', ['fileName']], - ]; - } - - /** @dataProvider provideMethods */ - public function testMethodsFromRequestInterface($method, array $params = []) - { - $this->wrappedRequest - ->expects($this->once()) - ->method($method) - ->will($this->returnValue('REQ')) - ->with(...$params); - $this->assertSame('REQ', call_user_func_array([$this->unifiedRequest, $method], $params)); - - - $this->wrappedEntityEnclosingRequest - ->expects($this->once()) - ->method($method) - ->will($this->returnValue('ENTITY_ENCL_REQ')) - ->with(...$params); - $this->assertSame( - 'ENTITY_ENCL_REQ', - call_user_func_array([$this->unifiedEnclosingEntityRequest, $method], $params) - ); - } - - /** @dataProvider provideEntityEnclosingInterfaceMethods */ - public function testEntityEnclosingInterfaceMethods($method, array $params = []) - { - $this->wrappedEntityEnclosingRequest - ->expects($this->once()) - ->method($method) - ->will($this->returnValue('ENTITY_ENCL_REQ')) - ->with(...$params); - - $this->assertSame( - 'ENTITY_ENCL_REQ', - call_user_func_array([$this->unifiedEnclosingEntityRequest, $method], $params) - ); - - $this->wrappedRequest - ->expects($this->any()) - ->method('getMethod') - ->will($this->returnValue('METHOD')); - $this->wrappedRequest - ->expects($this->any()) - ->method('getPath') - ->will($this->returnValue('/foo')); - - $this->expectException('BadMethodCallException'); - - $this->expectExceptionMessage( - - sprintf( - 'Cannot call method "%s" on a request that does not enclose an entity. Did you expect a POST/PUT request instead of METHOD /foo?', - $method - ) - - ); - call_user_func_array([$this->unifiedRequest, $method], $params); - } - - public function testUserAgent() - { - $this->assertNull($this->unifiedRequest->getUserAgent()); - - $unifiedRequest = new UnifiedRequest($this->wrappedRequest, ['userAgent' => 'UA']); - $this->assertSame('UA', $unifiedRequest->getUserAgent()); - } -} diff --git a/tests/RequestCollectionFacadeTest.php b/tests/RequestCollectionFacadeTest.php index e111263..40705c7 100644 --- a/tests/RequestCollectionFacadeTest.php +++ b/tests/RequestCollectionFacadeTest.php @@ -1,13 +1,15 @@ client = $this->createMock('Guzzle\Http\ClientInterface'); + $this->client = $this->createMock(Client::class); $this->facade = new RequestCollectionFacade($this->client); $this->request = new Request('GET', '/_request/last'); - $this->request->setClient($this->client); } public static function provideMethodAndUrls() @@ -48,7 +49,7 @@ public function testRequestingLatestRequest($method, $path, array $args = [], $h $request = call_user_func_array([$this->facade, $method], $args); $this->assertSame('POST', $request->getMethod()); - $this->assertSame('/foo', $request->getPath()); + $this->assertSame('/foo', $request->getUri()->getPath()); $this->assertSame('RECORDED=1', (string) $request->getBody()); } @@ -60,13 +61,11 @@ public function testRequestLatestResponseWithHttpAuth($method, $path, array $arg $request = call_user_func_array([$this->facade, $method], $args); $this->assertSame('POST', $request->getMethod()); - $this->assertSame('/foo', $request->getPath()); + $this->assertSame('/foo', $request->getUri()->getPath()); $this->assertSame('RECORDED=1', (string) $request->getBody()); - $this->assertSame('host', $request->getHost()); - $this->assertSame(1234, $request->getPort()); - $this->assertSame('username', $request->getUsername()); - $this->assertSame('password', $request->getPassword()); - $this->assertSame('CUSTOM UA', $request->getUserAgent()); + $this->assertSame('localhost', $request->getUri()->getHost()); + $this->assertSame(1234, $request->getUri()->getPort()); + $this->assertSame('CUSTOM UA', $request->getHeaderLine(('User-Agent'))); } /** @dataProvider provideMethodAndUrls */ @@ -117,23 +116,19 @@ private function mockClient($path, Response $response, $method) { $this->client ->expects($this->once()) - ->method($method) - ->with($path) - ->will($this->returnValue($this->request)); - - $this->client - ->expects($this->once()) - ->method('send') - ->with($this->request) + ->method('__call') + ->with($method, [$path]) ->will($this->returnValue($response)); } private function createSimpleResponse() { - $recordedRequest = new TestRequest(); - $recordedRequest->setMethod('POST'); - $recordedRequest->setRequestUri('/foo'); - $recordedRequest->setContent('RECORDED=1'); + $recordedRequest = new TestRequest( + 'POST', + 'http://localhost/foo', + [], + 'RECORDED=1' + ); return new Response( '200', @@ -141,7 +136,7 @@ private function createSimpleResponse() serialize( [ 'server' => [], - 'request' => (string) $recordedRequest, + 'request' => Util::serializePsrMessage($recordedRequest) ] ) ); @@ -149,27 +144,23 @@ private function createSimpleResponse() private function createComplexResponse() { - $recordedRequest = new TestRequest(); - $recordedRequest->setMethod('POST'); - $recordedRequest->setRequestUri('/foo'); - $recordedRequest->setContent('RECORDED=1'); - $recordedRequest->headers->set('Php-Auth-User', 'ignored'); - $recordedRequest->headers->set('Php-Auth-Pw', 'ignored'); - $recordedRequest->headers->set('User-Agent', 'ignored'); + $recordedRequest = new TestRequest( + 'POST', + 'http://localhost:1234/foo', + [ + 'Php-Auth-User' => 'username', + 'Php-Auth-Pw' => 'password', + 'User-Agent' => 'CUSTOM UA' + ], + 'RECORDED=1' + ); return new Response( '200', ['Content-Type' => 'text/plain; charset=UTF-8'], serialize( [ - 'server' => [ - 'HTTP_HOST' => 'host', - 'HTTP_PORT' => 1234, - 'PHP_AUTH_USER' => 'username', - 'PHP_AUTH_PW' => 'password', - 'HTTP_USER_AGENT' => 'CUSTOM UA', - ], - 'request' => (string) $recordedRequest, + 'request' => Util::serializePsrMessage($recordedRequest), ] ) ); From 0957fcdc891c07a9608ad89c3c5867d7954e5207 Mon Sep 17 00:00:00 2001 From: Joshua Eichorn Date: Fri, 31 May 2019 23:18:12 +0000 Subject: [PATCH 02/24] Update readme --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 564e464..5ac6c83 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # HTTP Mock for PHP -[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/InterNations/http-mock?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/InterNations/http-mock.svg)](https://travis-ci.org/InterNations/http-mock) [![Dependency Status](https://www.versioneye.com/user/projects/53479c42fe0d0720b500006a/badge.png)](https://www.versioneye.com/user/projects/53479c42fe0d0720b500006a) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/InterNations/http-mock.svg)](http://isitmaintained.com/project/InterNations/http-mock "Average time to resolve an issue") [![Percentage of issues still open](http://isitmaintained.com/badge/open/InterNations/http-mock.svg)](http://isitmaintained.com/project/InterNations/http-mock "Percentage of issues still open") - Mock HTTP requests on the server side in your PHP unit tests. HTTP Mock for PHP mocks the server side of an HTTP request to allow integration testing with the HTTP side. @@ -10,6 +8,12 @@ registering request matcher and responses from the client side. *BIG FAT WARNING:* software like this is inherently insecure. Only use in trusted, controlled environments. +Not this is a fork of https://github.com/internations/http-mock + +Its been updated to use PSR/7 Http methods, and Slim on the server side. +The API has been kept the same where possible, but any direct use of Request or Response objects +will be different. + ## Usage Read the [docs](doc/index.md) From ee2373c8735921c5d987c60b470e72f8e704d727 Mon Sep 17 00:00:00 2001 From: Joshua Eichorn Date: Fri, 31 May 2019 16:34:48 -0700 Subject: [PATCH 03/24] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5ac6c83..9d78be9 100644 --- a/README.md +++ b/README.md @@ -16,4 +16,6 @@ will be different. ## Usage +`composer require pagely/http-mock` + Read the [docs](doc/index.md) From af174794b68bbafce789b76a464503a2130a1c1a Mon Sep 17 00:00:00 2001 From: Joshua Eichorn Date: Fri, 31 May 2019 16:37:01 -0700 Subject: [PATCH 04/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d78be9..5adccc7 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,6 @@ will be different. ## Usage -`composer require pagely/http-mock` +`composer require --dev pagely/http-mock` Read the [docs](doc/index.md) From 916d574b78cbeff95a0eaa070024aac4d7149e47 Mon Sep 17 00:00:00 2001 From: Joshua Eichorn Date: Mon, 3 Jun 2019 08:40:57 -0700 Subject: [PATCH 05/24] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 5adccc7..e0463f3 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,7 @@ It uses PHP’s builtin web server to start a second process that handles the mo registering request matcher and responses from the client side. *BIG FAT WARNING:* software like this is inherently insecure. Only use in trusted, controlled environments. - -Not this is a fork of https://github.com/internations/http-mock +This is a fork of https://github.com/internations/http-mock Its been updated to use PSR/7 Http methods, and Slim on the server side. The API has been kept the same where possible, but any direct use of Request or Response objects From b044206b8aa3542fcf2c48ebb02e6686bbf7d2da Mon Sep 17 00:00:00 2001 From: Joshua Eichorn Date: Mon, 3 Jun 2019 21:28:30 +0000 Subject: [PATCH 06/24] fix for /request/last --- tests/AppIntegrationTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/AppIntegrationTest.php b/tests/AppIntegrationTest.php index d701804..59cdd6e 100644 --- a/tests/AppIntegrationTest.php +++ b/tests/AppIntegrationTest.php @@ -80,6 +80,11 @@ static function ($request) { $request = $this->parseRequestFromResponse($response); $this->assertSame('1', (string) $request->getHeaderLine('X-Special')); $this->assertSame('post=data', (string) $request->getBody()); + + // should be the same as latest + $response = $this->client->get('/_request/last'); + $request = $this->parseRequestFromResponse($response); + $this->assertSame('1', (string) $request->getHeaderLine('X-Special')); } public function testRecording() From 91ff74a401cc1967f9bac07374dde4cd571816b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mario=20Hidalgo=20Garci=CC=81a?= Date: Wed, 29 Jan 2020 18:54:50 -0600 Subject: [PATCH 07/24] fix: namespace and styles --- .gitignore | 2 + .php_cs.dist | 19 +++++++ .travis.yml | 3 +- README.md | 9 +--- composer.json | 35 ++++++++++--- doc/start.md | 4 +- src/Expectation.php | 14 ++--- src/Matcher/AbstractMatcher.php | 5 +- src/Matcher/ClosureMatcher.php | 3 +- src/Matcher/ExtractorFactory.php | 4 +- src/Matcher/MatcherFactory.php | 3 +- src/Matcher/MatcherInterface.php | 5 +- src/Matcher/RegexMatcher.php | 3 +- src/Matcher/StringMatcher.php | 3 +- src/MockBuilder.php | 7 +-- src/PHPUnit/HttpMockFacade.php | 25 ++++----- src/PHPUnit/HttpMockFacadeMap.php | 22 ++------ src/PHPUnit/HttpMockTrait.php | 3 +- src/PHPUnit/ServerManager.php | 5 +- src/RequestCollectionFacade.php | 26 ++++------ src/RequestStorage.php | 4 +- src/ResponseBuilder.php | 6 +-- src/Server.php | 15 +++--- src/Util.php | 28 +++++----- src/app.php | 51 +++++++++---------- tests/AppIntegrationTest.php | 40 +++++++-------- tests/Fixtures/Request.php | 6 +-- tests/Matcher/ExtractorFactoryTest.php | 7 +-- tests/Matcher/StringMatcherTest.php | 11 ++-- tests/MockBuilderIntegrationTest.php | 20 ++++---- .../HttpMockMultiPHPUnitIntegrationTest.php | 39 +++++++------- ...HttpMockPHPUnitIntegrationBasePathTest.php | 5 +- .../HttpMockPHPUnitIntegrationTest.php | 32 ++++++------ tests/RequestCollectionFacadeTest.php | 14 ++--- 34 files changed, 258 insertions(+), 220 deletions(-) create mode 100644 .php_cs.dist diff --git a/.gitignore b/.gitignore index 7278a54..57aeeae 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ composer.lock state/*-* build/* phpunit.xml +.php_cs.cache +.php_cs.result.cache diff --git a/.php_cs.dist b/.php_cs.dist new file mode 100644 index 0000000..f07918d --- /dev/null +++ b/.php_cs.dist @@ -0,0 +1,19 @@ +in(__DIR__ . '/src') + ->in(__DIR__ . '/tests'); + +return PhpCsFixer\Config::create() + ->setRules([ + '@Symfony' => true, + 'array_syntax' => ['syntax' => 'short'], + 'combine_consecutive_unsets' => true, + 'concat_space' => ['spacing' => 'one'], + 'return_type_declaration' => ['space_before' => 'one'], + 'no_unreachable_default_argument_value' => false, + 'yoda_style' => false, + 'ordered_imports' => ['sortAlgorithm' => 'alpha'], + 'pre_increment' => false, + ]) + ->setFinder($finder); diff --git a/.travis.yml b/.travis.yml index 4974134..da1a4bc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: php php: - - 7.1 - 7.2 - 7.3 @@ -11,5 +10,5 @@ before_script: sudo: false script: - - ./vendor/bin/phpcs --standard=vendor/internations/kodierungsregelwerksammlung/ruleset.xml ./src/ + - composer lint:check - ./vendor/bin/phpunit diff --git a/README.md b/README.md index e0463f3..564e464 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # HTTP Mock for PHP +[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/InterNations/http-mock?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Build Status](https://travis-ci.org/InterNations/http-mock.svg)](https://travis-ci.org/InterNations/http-mock) [![Dependency Status](https://www.versioneye.com/user/projects/53479c42fe0d0720b500006a/badge.png)](https://www.versioneye.com/user/projects/53479c42fe0d0720b500006a) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/InterNations/http-mock.svg)](http://isitmaintained.com/project/InterNations/http-mock "Average time to resolve an issue") [![Percentage of issues still open](http://isitmaintained.com/badge/open/InterNations/http-mock.svg)](http://isitmaintained.com/project/InterNations/http-mock "Percentage of issues still open") + Mock HTTP requests on the server side in your PHP unit tests. HTTP Mock for PHP mocks the server side of an HTTP request to allow integration testing with the HTTP side. @@ -7,14 +9,7 @@ It uses PHP’s builtin web server to start a second process that handles the mo registering request matcher and responses from the client side. *BIG FAT WARNING:* software like this is inherently insecure. Only use in trusted, controlled environments. -This is a fork of https://github.com/internations/http-mock - -Its been updated to use PSR/7 Http methods, and Slim on the server side. -The API has been kept the same where possible, but any direct use of Request or Response objects -will be different. ## Usage -`composer require --dev pagely/http-mock` - Read the [docs](doc/index.md) diff --git a/composer.json b/composer.json index 4d0d219..25abe6b 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "pagely/http-mock", + "name": "internations/http-mock", "description": "Mock HTTP requests on the server side in your PHP unit tests, PSR/7 Fork of internations version", "license": "MIT", "authors": [ @@ -17,22 +17,43 @@ } ], "require": { - "php": "~7.1", - "symfony/process": "~3|~4", + "php": "~7.2", + "symfony/process": "~3|~4|~5", "jeremeamia/superclosure": "~2", "lstrojny/hmmmath": ">=0.5.0", "guzzlehttp/guzzle": "^6.3", - "slim/slim": "^3.12" + "slim/slim": "^3.12", + "friendsofphp/php-cs-fixer": "^2.16", + "sensiolabs/security-checker": "^6.0" }, "require-dev": { - "internations/kodierungsregelwerksammlung": "~0.23.0", "internations/testing-component": "1.0.1", "phpunit/phpunit": "^7" }, "autoload": { - "psr-4": {"Pagely\\Component\\HttpMock\\": "src/"} + "psr-4": {"InterNations\\Component\\HttpMock\\": "src/"} }, "autoload-dev": { - "psr-4": {"Pagely\\Component\\HttpMock\\Tests\\": "tests/"} + "psr-4": {"InterNations\\Component\\HttpMock\\Tests\\": "tests/"} + }, + "scripts": { + "auto-scripts": [ + "@security-check" + ], + "post-install-cmd": [ + "@auto-scripts" + ], + "post-update-cmd": [ + "@auto-scripts" + ], + "lint": [ + "php-cs-fixer fix --ansi --verbose --show-progress=estimating" + ], + "lint:check": [ + "@lint --dry-run" + ], + "security-check": [ + "security-checker security:check" + ] } } diff --git a/doc/start.md b/doc/start.md index c8cd34c..5731841 100644 --- a/doc/start.md +++ b/doc/start.md @@ -1,13 +1,13 @@ # Getting started with HTTP mock HTTP mock comes out of the box with an integration with [PHPUnit](https://phpunit.de) in the shape of -`Pagely\Component\HttpMock\PHPUnit\HttpMockTrait`. In order to use it, we start and stop the background HTTP +`InterNations\Component\HttpMock\PHPUnit\HttpMockTrait`. In order to use it, we start and stop the background HTTP server in `setUpBeforeClass()` and `tearDownAfterClass()` respectively. ```php namespace Acme\Tests; -use Pagely\Component\HttpMock\PHPUnit\HttpMockTrait; +use InterNations\Component\HttpMock\PHPUnit\HttpMockTrait; class ExampleTest extends PHPUnit_Framework_TestCase { diff --git a/src/Expectation.php b/src/Expectation.php index b8aba81..f8e96b2 100644 --- a/src/Expectation.php +++ b/src/Expectation.php @@ -1,11 +1,12 @@ matcherFactory = $matcherFactory; $this->responseBuilder = new ResponseBuilder($mockBuilder); $this->extractorFactory = $extractorFactory; diff --git a/src/Matcher/AbstractMatcher.php b/src/Matcher/AbstractMatcher.php index 397c863..dbbc577 100644 --- a/src/Matcher/AbstractMatcher.php +++ b/src/Matcher/AbstractMatcher.php @@ -1,9 +1,10 @@ http[\'%s\']->%1$s->…', - $property, - implode('", "', array_keys($this->facadeMap)), - current(array_keys($this->facadeMap)) - ) - ); + throw new OutOfBoundsException(sprintf('Tried to access facade property "%1$s" on facade map. First select one of the facades from ' . 'the map. Defined facades: "%2$s", try $this->http[\'%s\']->%1$s->…', $property, implode('", "', array_keys($this->facadeMap)), current(array_keys($this->facadeMap)))); } - throw new OutOfBoundsException( - sprintf( - 'Tried to access property "%1$s". This is a map of facades, try $this->http[\'%1$s\'] instead.', - $property - ) - ); + throw new OutOfBoundsException(sprintf('Tried to access property "%1$s". This is a map of facades, try $this->http[\'%1$s\'] instead.', $property)); } public function all() diff --git a/src/PHPUnit/HttpMockTrait.php b/src/PHPUnit/HttpMockTrait.php index 5304ef9..f976a08 100644 --- a/src/PHPUnit/HttpMockTrait.php +++ b/src/PHPUnit/HttpMockTrait.php @@ -1,5 +1,6 @@ getRecordedRequest('/_request/' . $position); + return $this->getRecordedRequest('/_request/' . $position); } /** @@ -75,8 +77,10 @@ public function count() /** * @param Response $response - * @param string $path + * @param string $path + * * @throws UnexpectedValueException + * * @return RequestInterface */ private function parseRequestFromResponse(ResponseInterface $response, $path) @@ -85,11 +89,7 @@ private function parseRequestFromResponse(ResponseInterface $response, $path) $contents = $response->getBody()->getContents(); $requestInfo = Util::deserialize($contents); } catch (UnexpectedValueException $e) { - throw new UnexpectedValueException( - sprintf('Cannot deserialize response from "%s": "%s"', $path, $contents), - null, - $e - ); + throw new UnexpectedValueException(sprintf('Cannot deserialize response from "%s": "%s"', $path, $contents), null, $e); } $request = \GuzzleHttp\Psr7\parse_request($requestInfo['request']); @@ -118,9 +118,7 @@ private function parseResponse(ResponseInterface $response, $path) $statusCode = $response->getStatusCode(); if ($statusCode !== 200) { - throw new UnexpectedValueException( - sprintf('Expected status code 200 from "%s", got %d', $path, $statusCode) - ); + throw new UnexpectedValueException(sprintf('Expected status code 200 from "%s", got %d', $path, $statusCode)); } $contentType = $response->hasHeader('content-type') @@ -128,9 +126,7 @@ private function parseResponse(ResponseInterface $response, $path) : ''; if (substr($contentType, 0, 10) !== 'text/plain') { - throw new UnexpectedValueException( - sprintf('Expected content type "text/plain" from "%s", got "%s"', $path, $contentType) - ); + throw new UnexpectedValueException(sprintf('Expected content type "text/plain" from "%s", got "%s"', $path, $contentType)); } return $this->parseRequestFromResponse($response, $path); diff --git a/src/RequestStorage.php b/src/RequestStorage.php index 7ff8fd4..0191d7d 100644 --- a/src/RequestStorage.php +++ b/src/RequestStorage.php @@ -1,5 +1,6 @@ response; } - public function getResponseCallback() { return $this->responseCallback; diff --git a/src/Server.php b/src/Server.php index 7e55484..42f4017 100644 --- a/src/Server.php +++ b/src/Server.php @@ -1,11 +1,11 @@ getClient()->post( '/_expectation', ['json' => [ - 'matcher' => serialize($expectation->getMatcherClosures()), - 'limiter' => serialize($expectation->getLimiter()), + 'matcher' => serialize($expectation->getMatcherClosures()), + 'limiter' => serialize($expectation->getLimiter()), 'response' => Util::serializePsrMessage($expectation->getResponse()), 'responseCallback' => serialize($expectation->getResponseCallback()), ]] ); if ($response->getStatusCode() !== 201) { - throw new RuntimeException('Could not set up expectations: '.$response->getBody()->getContents()); + throw new RuntimeException('Could not set up expectations: ' . $response->getBody()->getContents()); } } } diff --git a/src/Util.php b/src/Util.php index ffe0628..630f9ef 100644 --- a/src/Util.php +++ b/src/Util.php @@ -1,5 +1,6 @@ getHeaders(); - foreach($headers as $key => $list) { - foreach($list as $value) { - if (substr($key, 0, 5) === 'HTTP_') { - $newKey = substr($key, 5); - $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $newKey)))); - $message = $message->withoutHeader($key)->withHeader($newKey, $value); - } - else - { - $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); - $message = $message->withoutHeader($key)->withHeader($newKey, $value); - } - } + foreach ($headers as $key => $list) { + foreach ($list as $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $newKey = substr($key, 5); + $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $newKey)))); + $message = $message->withoutHeader($key)->withHeader($newKey, $value); + } else { + $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); + $message = $message->withoutHeader($key)->withHeader($newKey, $value); + } + } } + return \GuzzleHttp\Psr7\str($message); } } diff --git a/src/app.php b/src/app.php index 2ddc0c6..f5e4684 100644 --- a/src/app.php +++ b/src/app.php @@ -1,17 +1,18 @@ - [ 'displayErrorDetails' => true, - ] + ], ]); $container['storage'] = new RequestStorage(getmypid(), __DIR__ . '/../state/'); $app = new App($container); @@ -54,7 +52,6 @@ function (Request $request, Response $response) use ($container) { $app->post( '/_expectation', function (Request $request, Response $response) use ($container) { - $data = json_decode($request->getBody()->getContents(), true); $matcher = []; @@ -77,12 +74,9 @@ function (Request $request, Response $response) use ($container) { ); } - try - { + try { $responseToSave = Util::responseDeserialize($data['response']); - } - catch(Exception $e) - { + } catch (Exception $e) { return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( 'POST data key "response" must be an http response message in text form' ); @@ -111,7 +105,7 @@ function (Request $request, Response $response) use ($container) { if ($responseCallback !== null && !is_callable($responseCallback)) { return $response->withStatus(StatusCode::HTTP_EXPECTATION_FAILED)->write( 'POST data key "responseCallback" must be a serialized closure: ' - .print_r($data['responseCallback'], true) + . print_r($data['responseCallback'], true) ); } } @@ -124,7 +118,7 @@ function (Request $request, Response $response) use ($container) { 'response' => $data['response'], 'limiter' => $limiter, 'responseCallback' => $responseCallback, - 'runs' => 0 + 'runs' => 0, ] ); @@ -132,15 +126,15 @@ function (Request $request, Response $response) use ($container) { } ); -$container['phpErrorHandler'] = function($container) { +$container['phpErrorHandler'] = function ($container) { return function (Request $request, Response $response, Error $e) use ($container) { - return $response->withStatus(500) + return $response->withStatus(500) ->withHeader('Content-Type', 'text/plain') - ->write($e->getMessage()."\n".$e->getTraceAsString()."\n"); + ->write($e->getMessage() . "\n" . $e->getTraceAsString() . "\n"); }; }; -$container['notFoundHandler'] = function($container) { +$container['notFoundHandler'] = function ($container) { return function (Request $request, Response $response) use ($container) { $container['storage']->append( $request, @@ -175,11 +169,13 @@ function (Request $request, Response $response) use ($container) { ++$expectations[$pos]['runs']; $container['storage']->store($request, 'expectations', $expectations); - $r = Util::responseDeserialize($expectation['response']); + $r = Util::responseDeserialize($expectation['response']); if (!empty($expectation['responseCallback'])) { $callback = $expectation['responseCallback']; + return $callback($r); } + return $r; } @@ -191,7 +187,7 @@ function (Request $request, Response $response) use ($container) { }; }; -$container['errorHandler'] = function($container) { +$container['errorHandler'] = function ($container) { return function (Request $request, Response $response, Exception $e) use ($container) { return $response->withStatus(StatusCode::HTTP_INTERNAL_SERVER_ERROR)->write( 'Server error: ' . $e->getMessage()); @@ -202,6 +198,7 @@ function (Request $request, Response $response) use ($container) { '/_request/count', function (Request $request, Response $response) use ($container) { $count = count($container['storage']->read($request, 'requests')); + return $response->withStatus(StatusCode::HTTP_OK) ->write($count) ->withHeader('Content-Type', 'text/plain'); @@ -211,7 +208,7 @@ function (Request $request, Response $response) use ($container) { $app->get( '/_request/{index:[0-9]+}', function (Request $request, Response $response, $args) use ($container) { - $index = (int)$args['index']; + $index = (int) $args['index']; $requestData = $container['storage']->read($request, 'requests'); if (!isset($requestData[$index])) { diff --git a/tests/AppIntegrationTest.php b/tests/AppIntegrationTest.php index 59cdd6e..0a05104 100644 --- a/tests/AppIntegrationTest.php +++ b/tests/AppIntegrationTest.php @@ -1,15 +1,15 @@ getErrorOutput(); //static::assertSame('', $out, $out); - echo $out."\n"; + echo $out . "\n"; static::$server1->stop(); } @@ -57,12 +57,12 @@ public function testSimpleUseCase() [ static function ($request) { return $request instanceof RequestInterface; - } + }, ], new Response(200, ['Host' => 'localhost'], 'fake body') ); - $response = $this->client->post( '/_expectation', ['json' => $params]); + $response = $this->client->post('/_expectation', ['json' => $params]); $this->assertSame('', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); @@ -146,7 +146,7 @@ public function testErrorHandling() { $this->client->delete('/_all'); - $tester = function($matcher, $response = null, $limiter = null) { + $tester = function ($matcher, $response = null, $limiter = null) { $payload = []; if ($response === null) { $payload['response'] = \GuzzleHttp\Psr7\str(new Response(200, [], 'foo')); @@ -154,7 +154,7 @@ public function testErrorHandling() $payload['response'] = $response; } if ($matcher === null) { - $matcher['matcher'] = serialize([new SerializableClosure(function() { return true; })]); + $matcher['matcher'] = serialize([new SerializableClosure(function () { return true; })]); } elseif ($matcher !== false) { $payload['matcher'] = $matcher; } @@ -162,6 +162,7 @@ public function testErrorHandling() if ($limiter !== false && $limiter !== null) { $payload['limiter'] = $limiter; } + return $this->client->post('/_expectation', ['json' => $payload]); }; @@ -191,10 +192,10 @@ public function testServerParamsAreRecorded() $this->client ->get('/foo', [ 'headers' => [ - 'User-Agent' => 'CUSTOM UA' + 'User-Agent' => 'CUSTOM UA', ], 'auth' => ['username', 'password'], - 'version' => '1.0' + 'version' => '1.0', ]); $latestRequest = unserialize($this->client->get('/_request/latest')->getBody()); @@ -215,7 +216,7 @@ public function testNewestExpectationsAreFirstEvaluated() [ static function ($request) { return $request instanceof RequestInterface; - } + }, ], new Response(200, [], 'first') )] @@ -224,12 +225,11 @@ static function ($request) { $this->client->post( '/_expectation', - ['json' => - $this->createExpectationParams( + ['json' => $this->createExpectationParams( [ static function ($request) { return $request instanceof RequestInterface; - } + }, ], new Response(200, [], 'second') )] @@ -251,8 +251,8 @@ private function createExpectationParams(array $closures, Response $response) } return [ - 'matcher' => serialize($closures), - 'response' => \GuzzleHttp\Psr7\str($response) + 'matcher' => serialize($closures), + 'response' => \GuzzleHttp\Psr7\str($response), ]; } } diff --git a/tests/Fixtures/Request.php b/tests/Fixtures/Request.php index f38af08..2f09d81 100644 --- a/tests/Fixtures/Request.php +++ b/tests/Fixtures/Request.php @@ -1,5 +1,6 @@ setExtractor(static function() { - return 0; + $matcher->setExtractor(static function () { + return 0; }); self::assertTrue($matcher->getMatcher()(new Request('GET', '/'))); } diff --git a/tests/MockBuilderIntegrationTest.php b/tests/MockBuilderIntegrationTest.php index b571579..f38b28b 100644 --- a/tests/MockBuilderIntegrationTest.php +++ b/tests/MockBuilderIntegrationTest.php @@ -1,15 +1,14 @@ methodIs($this->matches->regex('/POST/')) ->callback(static function (Request $request) { error_log('CLOSURE MATCHER: ' . $request->getMethod() . ' ' . $request->getUri()->getPath()); + return true; }) ->then() @@ -75,7 +75,7 @@ public function testCreateExpectation() $unserializedClosure = unserialize(serialize($closure)); $this->assertTrue($unserializedClosure($request)); - $run++; + ++$run; } ini_set('error_log', $oldValue); $this->assertSame(3, $run); diff --git a/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php b/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php index b86ba44..639f88b 100644 --- a/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php +++ b/tests/PHPUnit/HttpMockMultiPHPUnitIntegrationTest.php @@ -1,10 +1,11 @@ http['firstNamedServer']->mock ->when() - ->callback(static function () {error_log('error output');}) + ->callback(static function () {error_log('error output'); }) ->then() ->end(); $this->http['firstNamedServer']->setUp(); @@ -156,7 +157,7 @@ public function testLimitDurationOfAResponse() $this->assertSame(200, $secondResponse->getStatusCode()); $thirdResponse = $this->http['firstNamedServer']->client->post('/'); $this->assertSame(410, $thirdResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', (string)$thirdResponse->getBody()); + $this->assertSame('Expectation no longer applicable', (string) $thirdResponse->getBody()); $this->http['firstNamedServer']->mock ->any() @@ -180,10 +181,10 @@ public function testCallbackOnResponse() ->when() ->methodIs('POST') ->then() - ->callback(static function(Response $response) {return $response->withBody(\GuzzleHttp\Psr7\stream_for('CALLBACK'));}) + ->callback(static function (Response $response) {return $response->withBody(\GuzzleHttp\Psr7\stream_for('CALLBACK')); }) ->end(); $this->http['firstNamedServer']->setUp(); - $this->assertSame('CALLBACK', (string)$this->http['firstNamedServer']->client->post('/')->getBody()); + $this->assertSame('CALLBACK', (string) $this->http['firstNamedServer']->client->post('/')->getBody()); } public function testComplexResponse() @@ -200,9 +201,9 @@ public function testComplexResponse() $response = $this->http['firstNamedServer']->client ->post('/', [ 'headers' => ['x-client-header' => 'header-value'], - 'form_params' => ['post-key' => 'post-value'] + 'form_params' => ['post-key' => 'post-value'], ]); - $this->assertSame('BODY', (string)$response->getBody()); + $this->assertSame('BODY', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); @@ -223,10 +224,10 @@ public function testPutRequest() $this->http['firstNamedServer']->setUp(); $response = $this->http['firstNamedServer']->client ->put('/', [ - 'headers' => ['x-client-header' => 'header-value'], - 'form_params' => ['put-key' => 'put-value'] - ]); - $this->assertSame('BODY', (string)$response->getBody()); + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['put-key' => 'put-value'], + ]); + $this->assertSame('BODY', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); parse_str($this->http['firstNamedServer']->requests->latest()->getBody()->getContents(), $body); @@ -245,11 +246,11 @@ public function testPostRequest() ->end(); $this->http['firstNamedServer']->setUp(); $response = $this->http['firstNamedServer']->client - ->post('/', [ - 'headers' => ['x-client-header' => 'header-value'], - 'form_params' => ['post-key' => 'post-value'] - ]); - $this->assertSame('BODY', (string)$response->getBody()); + ->post('/', [ + 'headers' => ['x-client-header' => 'header-value'], + 'form_params' => ['post-key' => 'post-value'], + ]); + $this->assertSame('BODY', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); parse_str($this->http['firstNamedServer']->requests->latest()->getBody()->getContents(), $body); diff --git a/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php b/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php index a379ca4..4718c37 100644 --- a/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php +++ b/tests/PHPUnit/HttpMockPHPUnitIntegrationBasePathTest.php @@ -1,8 +1,9 @@ http->mock ->when() - ->callback(static function () {error_log('error output');}) + ->callback(static function () {error_log('error output'); }) ->then() ->end(); $this->http->setUp(); @@ -141,7 +142,7 @@ public function testLimitDurationOfAResponse() $this->assertSame(200, $firstResponse->getStatusCode()); $secondResponse = $this->http->client->post('/'); $this->assertSame(410, $secondResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', (string)$secondResponse->getBody()); + $this->assertSame('Expectation no longer applicable', (string) $secondResponse->getBody()); $this->http->mock ->exactly(2) @@ -157,7 +158,7 @@ public function testLimitDurationOfAResponse() $this->assertSame(200, $secondResponse->getStatusCode()); $thirdResponse = $this->http->client->post('/'); $this->assertSame(410, $thirdResponse->getStatusCode()); - $this->assertSame('Expectation no longer applicable', (string)$thirdResponse->getBody()); + $this->assertSame('Expectation no longer applicable', (string) $thirdResponse->getBody()); $this->http->mock ->any() @@ -181,12 +182,12 @@ public function testCallbackOnResponse() ->when() ->methodIs('POST') ->then() - ->callback(static function(Response $response) { + ->callback(static function (Response $response) { return $response->withBody(\GuzzleHttp\Psr7\stream_For('CALLBACK')); }) ->end(); $this->http->setUp(); - $this->assertSame('CALLBACK', (string)$this->http->client->post('/')->getBody()); + $this->assertSame('CALLBACK', (string) $this->http->client->post('/')->getBody()); } public function testComplexResponse() @@ -205,7 +206,7 @@ public function testComplexResponse() 'headers' => ['x-client-header' => 'header-value'], 'form_params' => ['post-key' => 'post-value'], ]); - $this->assertSame('BODY', (string)$response->getBody()); + $this->assertSame('BODY', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); parse_str($this->http->requests->latest()->getBody()->getContents(), $body); @@ -226,9 +227,9 @@ public function testPutRequest() $response = $this->http->client ->put('/', [ 'headers' => ['x-client-header' => 'header-value'], - 'form_params' => ['put-key' => 'put-value'] + 'form_params' => ['put-key' => 'put-value'], ]); - $this->assertSame('BODY', (string)$response->getBody()); + $this->assertSame('BODY', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); parse_str($this->http->requests->latest()->getBody()->getContents(), $body); @@ -249,9 +250,9 @@ public function testPostRequest() $response = $this->http->client ->post('/', [ 'headers' => ['x-client-header' => 'header-value'], - 'form_params' => ['post-key' => 'post-value'] + 'form_params' => ['post-key' => 'post-value'], ]); - $this->assertSame('BODY', (string)$response->getBody()); + $this->assertSame('BODY', (string) $response->getBody()); $this->assertSame(201, $response->getStatusCode()); $this->assertSame('Bar', (string) $response->getHeaderLine('X-Foo')); parse_str($this->http->requests->latest()->getBody()->getContents(), $body); @@ -280,6 +281,7 @@ public function testMatchQueryString() ->callback( function (Request $request) { parse_str($request->getUri()->getQuery(), $query); + return isset($query['key1']); } ) diff --git a/tests/RequestCollectionFacadeTest.php b/tests/RequestCollectionFacadeTest.php index 40705c7..32615c6 100644 --- a/tests/RequestCollectionFacadeTest.php +++ b/tests/RequestCollectionFacadeTest.php @@ -1,15 +1,15 @@ [], - 'request' => Util::serializePsrMessage($recordedRequest) + 'request' => Util::serializePsrMessage($recordedRequest), ] ) ); @@ -150,7 +150,7 @@ private function createComplexResponse() [ 'Php-Auth-User' => 'username', 'Php-Auth-Pw' => 'password', - 'User-Agent' => 'CUSTOM UA' + 'User-Agent' => 'CUSTOM UA', ], 'RECORDED=1' ); From 6f62cc09182d808df828c6f1cc323d839d16995c Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Wed, 5 Feb 2020 15:35:22 -0300 Subject: [PATCH 08/24] fix: poll wait and dependences --- composer.json | 13 +++++++++---- phpunit.xml.dist | 7 +------ src/Server.php | 20 +++++--------------- tests/AppIntegrationTest.php | 6 ++---- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/composer.json b/composer.json index 25abe6b..f251372 100644 --- a/composer.json +++ b/composer.json @@ -16,8 +16,9 @@ "email": "joshua.eichorn@pagely.com" } ], - "require": { + "require": { "php": "~7.2", + "ext-json": "*", "symfony/process": "~3|~4|~5", "jeremeamia/superclosure": "~2", "lstrojny/hmmmath": ">=0.5.0", @@ -27,14 +28,18 @@ "sensiolabs/security-checker": "^6.0" }, "require-dev": { - "internations/testing-component": "1.0.1", + "internations/testing-component": "1.3.0", "phpunit/phpunit": "^7" }, "autoload": { - "psr-4": {"InterNations\\Component\\HttpMock\\": "src/"} + "psr-4": { + "InterNations\\Component\\HttpMock\\": "src/" + } }, "autoload-dev": { - "psr-4": {"InterNations\\Component\\HttpMock\\Tests\\": "tests/"} + "psr-4": { + "InterNations\\Component\\HttpMock\\Tests\\": "tests/" + } }, "scripts": { "auto-scripts": [ diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 51c72a8..9c7409b 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,10 +1,6 @@ - - + diff --git a/src/Server.php b/src/Server.php index 42f4017..6ff61b1 100644 --- a/src/Server.php +++ b/src/Server.php @@ -13,6 +13,7 @@ class Server extends Process private $host; + /** @var Client */ private $client; public function __construct($port, $host) @@ -52,9 +53,7 @@ public function getClient() private function createClient() { - $client = new Client(['base_uri' => $this->getBaseUrl(), 'http_errors' => false]); - - return $client; + return new Client(['base_uri' => $this->getBaseUrl(), 'http_errors' => false]); } public function getBaseUrl() @@ -103,23 +102,14 @@ public function clean() private function pollWait() { - $success = false; - foreach (FibonacciFactory::sequence(50000, 10000, 8) as $sleepTime) { + foreach (FibonacciFactory::sequence(50000, 10000) as $sleepTime) { try { usleep($sleepTime); - $r = $this->getClient()->head('/_me'); - if ($r->getStatusCode() != 418) { - continue; - } - $success = true; + $this->getClient()->head('/_me'); break; - } catch (ServerException $e) { + } catch (\Exception $e) { continue; } } - - if (!$success) { - throw $e; - } } } diff --git a/tests/AppIntegrationTest.php b/tests/AppIntegrationTest.php index 0a05104..53d2795 100644 --- a/tests/AppIntegrationTest.php +++ b/tests/AppIntegrationTest.php @@ -2,13 +2,12 @@ namespace InterNations\Component\HttpMock\Tests; -use Guzzle\Http\Message\EntityEnclosingRequest; use GuzzleHttp\Client; -use GuzzleHttp\Psr7\Request; use GuzzleHttp\Psr7\Response; use InterNations\Component\HttpMock\Server; use InterNations\Component\Testing\AbstractTestCase; use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\ResponseInterface; use SuperClosure\SerializableClosure; /** @@ -76,7 +75,6 @@ static function ($request) { $response = $this->client->get('/_request/latest'); - /** @var EntityEnclosingRequest $request */ $request = $this->parseRequestFromResponse($response); $this->assertSame('1', (string) $request->getHeaderLine('X-Special')); $this->assertSame('post=data', (string) $request->getBody()); @@ -237,7 +235,7 @@ static function ($request) { $this->assertSame('second', $this->client->get('/')->getBody()->getContents()); } - private function parseRequestFromResponse(Response $response) + private function parseRequestFromResponse(ResponseInterface $response) { $body = unserialize($response->getBody()); From 3facc5a62a5cf7e25507ecf2bd9d85802003490d Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Wed, 5 Feb 2020 15:40:35 -0300 Subject: [PATCH 09/24] refactor: fix in data typing --- src/RequestCollectionFacade.php | 48 +++++++-------------------------- src/ResponseBuilder.php | 16 ++++++----- src/Server.php | 4 ++- 3 files changed, 23 insertions(+), 45 deletions(-) diff --git a/src/RequestCollectionFacade.php b/src/RequestCollectionFacade.php index 46acf72..33f78c9 100644 --- a/src/RequestCollectionFacade.php +++ b/src/RequestCollectionFacade.php @@ -4,6 +4,8 @@ use Countable; use GuzzleHttp\Client; +use function GuzzleHttp\Psr7\parse_request; +use GuzzleHttp\Psr7\Request; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use UnexpectedValueException; @@ -17,52 +19,32 @@ public function __construct(Client $client) $this->client = $client; } - /** - * @return UnifiedRequest - */ - public function latest() + public function latest() : RequestInterface { return $this->getRecordedRequest('/_request/last'); } - /** - * @return UnifiedRequest - */ - public function last() + public function last() : RequestInterface { return $this->getRecordedRequest('/_request/last'); } - /** - * @return UnifiedRequest - */ - public function first() + public function first() : RequestInterface { return $this->getRecordedRequest('/_request/first'); } - /** - * @param int $position - * - * @return UnifiedRequest - */ - public function at($position) + public function at($position) : RequestInterface { return $this->getRecordedRequest('/_request/' . $position); } - /** - * @return UnifiedRequest - */ - public function pop() + public function pop() : RequestInterface { return $this->deleteRecordedRequest('/_request/last'); } - /** - * @return UnifiedRequest - */ - public function shift() + public function shift() : RequestInterface { return $this->deleteRecordedRequest('/_request/first'); } @@ -75,15 +57,7 @@ public function count() return (int) $response->getBody()->getContents(); } - /** - * @param Response $response - * @param string $path - * - * @throws UnexpectedValueException - * - * @return RequestInterface - */ - private function parseRequestFromResponse(ResponseInterface $response, $path) + private function parseRequestFromResponse(ResponseInterface $response, $path) : Request { try { $contents = $response->getBody()->getContents(); @@ -92,9 +66,7 @@ private function parseRequestFromResponse(ResponseInterface $response, $path) throw new UnexpectedValueException(sprintf('Cannot deserialize response from "%s": "%s"', $path, $contents), null, $e); } - $request = \GuzzleHttp\Psr7\parse_request($requestInfo['request']); - - return $request; + return parse_request($requestInfo['request']); } private function getRecordedRequest($path) diff --git a/src/ResponseBuilder.php b/src/ResponseBuilder.php index 2f49b21..e72c196 100644 --- a/src/ResponseBuilder.php +++ b/src/ResponseBuilder.php @@ -4,7 +4,10 @@ use Closure; use GuzzleHttp\Psr7\Response; +use function GuzzleHttp\Psr7\stream_for; +use Psr\Http\Message\ResponseInterface; use SuperClosure\SerializableClosure; +use SuperClosure\SerializerInterface; class ResponseBuilder { @@ -14,6 +17,7 @@ class ResponseBuilder /** @var Response */ private $response; + /** @var SerializerInterface|null */ private $responseCallback; public function __construct(MockBuilder $mockBuilder) @@ -22,7 +26,7 @@ public function __construct(MockBuilder $mockBuilder) $this->response = new Response(); } - public function statusCode($statusCode) + public function statusCode($statusCode) : self { $this->response = $this->response->withStatus($statusCode); @@ -31,31 +35,31 @@ public function statusCode($statusCode) public function body($body) { - $this->response = $this->response->withBody(\GuzzleHttp\Psr7\stream_for($body)); + $this->response = $this->response->withBody(stream_for($body)); return $this; } - public function callback(Closure $callback) + public function callback(Closure $callback) : self { $this->responseCallback = new SerializableClosure($callback); return $this; } - public function header($header, $value) + public function header($header, $value) : self { $this->response = $this->response->withHeader($header, $value); return $this; } - public function end() + public function end() : MockBuilder { return $this->mockBuilder; } - public function getResponse() + public function getResponse() : ResponseInterface { return $this->response; } diff --git a/src/Server.php b/src/Server.php index 6ff61b1..fb70e83 100644 --- a/src/Server.php +++ b/src/Server.php @@ -9,8 +9,10 @@ class Server extends Process { + /** @var int */ private $port; + /** @var string */ private $host; /** @var Client */ @@ -41,7 +43,7 @@ public function start(callable $callback = null, array $env = []) $this->pollWait(); } - public function stop($timeout = 10, $signal = null) + public function stop($timeout = 10, int $signal = null) { return parent::stop($timeout, $signal); } From 0aa80e0cc6265dfe83e3bb60883963e9629d67a6 Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Wed, 5 Feb 2020 18:45:35 -0300 Subject: [PATCH 10/24] fix: missing dependence and data typing --- composer.json | 3 ++- src/Server.php | 2 +- src/Util.php | 7 ++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index f251372..5b4eb92 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,8 @@ "guzzlehttp/guzzle": "^6.3", "slim/slim": "^3.12", "friendsofphp/php-cs-fixer": "^2.16", - "sensiolabs/security-checker": "^6.0" + "sensiolabs/security-checker": "^6.0", + "symfony/http-foundation": "^5.0" }, "require-dev": { "internations/testing-component": "1.3.0", diff --git a/src/Server.php b/src/Server.php index fb70e83..3b3b41c 100644 --- a/src/Server.php +++ b/src/Server.php @@ -43,7 +43,7 @@ public function start(callable $callback = null, array $env = []) $this->pollWait(); } - public function stop($timeout = 10, int $signal = null) + public function stop($timeout = 10, $signal = null) { return parent::stop($timeout, $signal); } diff --git a/src/Util.php b/src/Util.php index 630f9ef..52f2410 100644 --- a/src/Util.php +++ b/src/Util.php @@ -2,6 +2,8 @@ namespace InterNations\Component\HttpMock; +use function GuzzleHttp\Psr7\parse_response; +use function GuzzleHttp\Psr7\str; use UnexpectedValueException; final class Util @@ -26,12 +28,11 @@ public static function silentDeserialize($string) public static function responseDeserialize($string) { - return \GuzzleHttp\Psr7\parse_response($string); + return parse_response($string); } public static function serializePsrMessage($message) { - $fixedHeaders = []; $headers = $message->getHeaders(); foreach ($headers as $key => $list) { foreach ($list as $value) { @@ -46,6 +47,6 @@ public static function serializePsrMessage($message) } } - return \GuzzleHttp\Psr7\str($message); + return str($message); } } From bbc2401753585b7296154322af28f6a4de42d0d2 Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Tue, 11 Feb 2020 14:56:40 -0300 Subject: [PATCH 11/24] fix: remove symfony dependencies --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 5b4eb92..f251372 100644 --- a/composer.json +++ b/composer.json @@ -25,8 +25,7 @@ "guzzlehttp/guzzle": "^6.3", "slim/slim": "^3.12", "friendsofphp/php-cs-fixer": "^2.16", - "sensiolabs/security-checker": "^6.0", - "symfony/http-foundation": "^5.0" + "sensiolabs/security-checker": "^6.0" }, "require-dev": { "internations/testing-component": "1.3.0", From 8c60e77f775f5686edee7d21e3d96884dba64851 Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Thu, 13 Feb 2020 18:21:00 -0300 Subject: [PATCH 12/24] fix: type data in response builder --- src/ResponseBuilder.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ResponseBuilder.php b/src/ResponseBuilder.php index e72c196..8d8d108 100644 --- a/src/ResponseBuilder.php +++ b/src/ResponseBuilder.php @@ -26,14 +26,14 @@ public function __construct(MockBuilder $mockBuilder) $this->response = new Response(); } - public function statusCode($statusCode) : self + public function statusCode(int $statusCode) : self { $this->response = $this->response->withStatus($statusCode); return $this; } - public function body($body) + public function body(string $body) : self { $this->response = $this->response->withBody(stream_for($body)); @@ -47,7 +47,7 @@ public function callback(Closure $callback) : self return $this; } - public function header($header, $value) : self + public function header(string $header, string $value) : self { $this->response = $this->response->withHeader($header, $value); From 22e291969b0cae89083e0fc622c82eccd91244bd Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Fri, 14 Feb 2020 09:23:51 -0300 Subject: [PATCH 13/24] fix: sanitize headers --- src/ResponseBuilder.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ResponseBuilder.php b/src/ResponseBuilder.php index 8d8d108..884d157 100644 --- a/src/ResponseBuilder.php +++ b/src/ResponseBuilder.php @@ -11,6 +11,9 @@ class ResponseBuilder { + protected const UPPER = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + protected const LOWER = '-abcdefghijklmnopqrstuvwxyz'; + /** @var MockBuilder */ private $mockBuilder; @@ -49,7 +52,9 @@ public function callback(Closure $callback) : self public function header(string $header, string $value) : self { - $this->response = $this->response->withHeader($header, $value); + /** sanitize headers **/ + $key = strtr($header, self::UPPER, self::LOWER); + $this->response = $this->response->withHeader($key, $value); return $this; } From 79ad071b7a29d23fe2fedd7ab591cfcf84721f8e Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Wed, 19 Feb 2020 12:39:45 -0300 Subject: [PATCH 14/24] fix: PSR headers --- src/ResponseBuilder.php | 5 ----- src/Util.php | 7 ++++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/ResponseBuilder.php b/src/ResponseBuilder.php index 884d157..979d53f 100644 --- a/src/ResponseBuilder.php +++ b/src/ResponseBuilder.php @@ -11,9 +11,6 @@ class ResponseBuilder { - protected const UPPER = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - protected const LOWER = '-abcdefghijklmnopqrstuvwxyz'; - /** @var MockBuilder */ private $mockBuilder; @@ -52,8 +49,6 @@ public function callback(Closure $callback) : self public function header(string $header, string $value) : self { - /** sanitize headers **/ - $key = strtr($header, self::UPPER, self::LOWER); $this->response = $this->response->withHeader($key, $value); return $this; diff --git a/src/Util.php b/src/Util.php index 52f2410..b0283f9 100644 --- a/src/Util.php +++ b/src/Util.php @@ -40,13 +40,14 @@ public static function serializePsrMessage($message) $newKey = substr($key, 5); $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $newKey)))); $message = $message->withoutHeader($key)->withHeader($newKey, $value); - } else { - $newKey = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key)))); - $message = $message->withoutHeader($key)->withHeader($newKey, $value); } } } + if (!$message->hasHeader('cache-control')) { + $message->withHeader('cache-control', 'no-cache, private'); + } + return str($message); } } From 4b155545039bdd1de69d1488ce25617c124799bf Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Wed, 19 Feb 2020 12:48:08 -0300 Subject: [PATCH 15/24] perf: added .lock --- .gitignore | 1 - composer.lock | 3869 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 3869 insertions(+), 1 deletion(-) create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 57aeeae..36b6252 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ vendor/ -composer.lock .idea/ state/*-* build/* diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..f321e49 --- /dev/null +++ b/composer.lock @@ -0,0 +1,3869 @@ +{ + "_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#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "bbdb0f65bd5de618503c1d43c2827bbc", + "packages": [ + { + "name": "composer/semver", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2020-01-13T12:06:48+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "cbe23383749496fe0f373345208b79568e4bc248" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", + "reference": "cbe23383749496fe0f373345208b79568e4bc248", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-11-06T16:40:04+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.8.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", + "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^7.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2019-10-01T18:55:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "shasum": "" + }, + "require": { + "php": "^7.2" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "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", + "php" + ], + "time": "2019-10-30T14:39:59+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.16.1", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/c8afb599858876e95e8ebfcd97812d383fa23f02", + "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^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 || ^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.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", + "phpunitgoodpractices/traits": "^1.8", + "symfony/phpunit-bridge": "^4.3 || ^5.0", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-mbstring": "For handling non-UTF8 characters in cache signature.", + "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." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "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": "2019-11-25T22:10:32+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2019-12-23T11:57:10+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2019-07-01T23:21:34+00:00" + }, + { + "name": "jeremeamia/superclosure", + "version": "2.4.0", + "source": { + "type": "git", + "url": "https://github.com/jeremeamia/super_closure.git", + "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "reference": "5707d5821b30b9a07acfb4d76949784aaa0e9ce9", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.2|^2.0|^3.0|^4.0", + "php": ">=5.4", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "SuperClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia", + "role": "Developer" + } + ], + "description": "Serialize Closure objects, including their context and binding", + "homepage": "https://github.com/jeremeamia/super_closure", + "keywords": [ + "closure", + "function", + "lambda", + "parser", + "serializable", + "serialize", + "tokenizer" + ], + "time": "2018-03-21T22:21:57+00:00" + }, + { + "name": "lstrojny/hmmmath", + "version": "0.7.1", + "source": { + "type": "git", + "url": "https://github.com/lstrojny/hmmmath.git", + "reference": "031e4049042a28798fa49b756ebbb46b1297ef3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lstrojny/hmmmath/zipball/031e4049042a28798fa49b756ebbb46b1297ef3e", + "reference": "031e4049042a28798fa49b756ebbb46b1297ef3e", + "shasum": "" + }, + "require": { + "php": "~7.1" + }, + "require-dev": { + "internations/testing-component": "dev-master", + "phpunit/phpunit": "~6" + }, + "type": "library", + "autoload": { + "psr-0": { + "hmmmath\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Strojny", + "email": "lars@strojny.net" + } + ], + "description": "Collection of math related PHP functions", + "time": "2018-12-09T15:54:49+00:00" + }, + { + "name": "nikic/fast-route", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/FastRoute.git", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/FastRoute/zipball/181d480e08d9476e61381e04a71b34dc0432e812", + "reference": "181d480e08d9476e61381e04a71b34dc0432e812", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35|~5.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "FastRoute\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov", + "email": "nikic@php.net" + } + ], + "description": "Fast request router for PHP", + "keywords": [ + "router", + "routing" + ], + "time": "2018-02-13T20:26:39+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.3.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc", + "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "0.0.5", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.3-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2019-11-08T13:50:10+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "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-07-02T15:55:56+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2018-02-15T16:58:55+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2018-01-21T07:42:36+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://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" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "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" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2019-11-01T11:05:21+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "sensiolabs/security-checker", + "version": "v6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sensiolabs/security-checker.git", + "reference": "a576c01520d9761901f269c4934ba55448be4a54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/a576c01520d9761901f269c4934ba55448be4a54", + "reference": "a576c01520d9761901f269c4934ba55448be4a54", + "shasum": "" + }, + "require": { + "php": ">=7.1.3", + "symfony/console": "^2.8|^3.4|^4.2|^5.0", + "symfony/http-client": "^4.3|^5.0", + "symfony/mime": "^4.3|^5.0", + "symfony/polyfill-ctype": "^1.11" + }, + "bin": [ + "security-checker" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + } + }, + "autoload": { + "psr-4": { + "SensioLabs\\Security\\": "SensioLabs/Security" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien.potencier@gmail.com" + } + ], + "description": "A security checker for your composer.lock", + "time": "2019-11-01T13:20:14+00:00" + }, + { + "name": "slim/slim", + "version": "3.12.3", + "source": { + "type": "git", + "url": "https://github.com/slimphp/Slim.git", + "reference": "1c9318a84ffb890900901136d620b4f03a59da38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38", + "reference": "1c9318a84ffb890900901136d620b4f03a59da38", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-libxml": "*", + "ext-simplexml": "*", + "nikic/fast-route": "^1.0", + "php": ">=5.5.0", + "pimple/pimple": "^3.0", + "psr/container": "^1.0", + "psr/http-message": "^1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Slim\\": "Slim" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Josh Lockhart", + "email": "hello@joshlockhart.com", + "homepage": "https://joshlockhart.com" + }, + { + "name": "Andrew Smith", + "email": "a.smith@silentworks.co.uk", + "homepage": "http://silentworks.co.uk" + }, + { + "name": "Rob Allen", + "email": "rob@akrabat.com", + "homepage": "http://akrabat.com" + }, + { + "name": "Gabriel Manricks", + "email": "gmanricks@me.com", + "homepage": "http://gabrielmanricks.com" + } + ], + "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", + "homepage": "https://slimframework.com", + "keywords": [ + "api", + "framework", + "micro", + "router" + ], + "time": "2019-11-28T17:40:33+00:00" + }, + { + "name": "symfony/console", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "91c294166c38d8c0858a86fad76d8c14dc1144c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/91c294166c38d8c0858a86fad76d8c14dc1144c8", + "reference": "91c294166c38d8c0858a86fad76d8c14dc1144c8", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/service-contracts": "^1.1|^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2020-01-25T15:56:29+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "4a7a8cdca1120c091b4797f0e5bba69c1e783224" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4a7a8cdca1120c091b4797f0e5bba69c1e783224", + "reference": "4a7a8cdca1120c091b4797f0e5bba69c1e783224", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/event-dispatcher-contracts": "^2" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2020-01-10T21:57:37+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", + "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "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" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", + "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2020-01-21T08:40:24+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", + "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2020-01-04T14:08:26+00:00" + }, + { + "name": "symfony/http-client", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "4240ae267d89db5b694bdb5712e691b1e24cdc26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/4240ae267d89db5b694bdb5712e691b1e24cdc26", + "reference": "4240ae267d89db5b694bdb5712e691b1e24cdc26", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/log": "^1.0", + "symfony/http-client-contracts": "^1.1.8|^2", + "symfony/polyfill-php73": "^1.11", + "symfony/service-contracts": "^1.0|^2" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "1.1" + }, + "require-dev": { + "guzzlehttp/promises": "^1.3.1", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/http-kernel": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 HttpClient component", + "homepage": "https://symfony.com", + "time": "2020-01-31T09:13:47+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/378868b61b85c5cac6822d4f84e26999c9f2e881", + "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "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 HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2019-11-26T23:25:11+00:00" + }, + { + "name": "symfony/mime", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/2a3c7fee1f1a0961fa9cf360d5da553d05095e59", + "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10", + "symfony/dependency-injection": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A library to manipulate MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "time": "2020-01-04T14:08:26+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "b1ab86ce52b0c0abe031367a173005a025e30e04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b1ab86ce52b0c0abe031367a173005a025e30e04", + "reference": "b1ab86ce52b0c0abe031367a173005a025e30e04", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2020-01-04T14:08:26+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", + "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2020-01-17T12:01:36+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", + "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/polyfill-php56", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3", + "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "419c4940024c30ccc033650373a1fe13890d3255" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/419c4940024c30ccc033650373a1fe13890d3255", + "reference": "419c4940024c30ccc033650373a1fe13890d3255", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "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.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", + "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "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.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", + "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "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" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/polyfill-util", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3", + "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.14-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "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 utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2020-01-13T11:15:53+00:00" + }, + { + "name": "symfony/process", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", + "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", + "shasum": "" + }, + "require": { + "php": "^7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2020-01-09T09:53:06+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "144c5e51266b281231e947b51223ba14acf1a749" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", + "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "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" + ], + "time": "2019-11-18T17:27:11+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5d9add8034135b9a5f7b101d1e42c797e7f053e4", + "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4", + "shasum": "" + }, + "require": { + "php": "^7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2020-01-04T14:08:26+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2019-10-21T16:45:58+00:00" + }, + { + "name": "internations/testing-component", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/InterNations/TestingComponent.git", + "reference": "7125a34eff7088ce0f2c178daea2d498ae8c0f3a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/InterNations/TestingComponent/zipball/7125a34eff7088ce0f2c178daea2d498ae8c0f3a", + "reference": "7125a34eff7088ce0f2c178daea2d498ae8c0f3a", + "shasum": "" + }, + "require": { + "php": "~7.1" + }, + "require-dev": { + "doctrine/annotations": "^1.2", + "internations/kodierungsregelwerksammlung": "dev-master", + "phpunit/phpunit": "~6", + "symfony/config": "^4.0", + "symfony/css-selector": "~3", + "symfony/dependency-injection": "^4.0", + "symfony/dom-crawler": "~3", + "symfony/framework-bundle": "^4.0", + "symfony/http-kernel": "^4.0", + "symfony/validator": "~3" + }, + "suggest": { + "symfony/css-selector": "Dependency for symfony/dom-crawler", + "symfony/dom-crawler": "Necessary to use DomCrawlerAssertionTrait" + }, + "type": "library", + "autoload": { + "psr-0": { + "InterNations\\Component\\Testing": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Strojny", + "email": "lars.strojny@internations.org" + }, + { + "name": "Max Beutel", + "email": "max.beutel@internations.org" + }, + { + "name": "Michael Weinrich", + "email": "michael.weinrich@internations.org" + }, + { + "name": "Marc Jakubowski", + "email": "marc.jakubowski@internations.org" + }, + { + "name": "Hans Bernhard Streit", + "email": "hans.streit@internations.org" + } + ], + "description": "A collection of test helpers for Symfony 3 projects", + "time": "2018-12-09T16:20:22+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.9.5", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", + "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2020-01-17T21:11:47+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "~6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2018-08-07T13:53:10+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/a48807183a4b819072f26e347bbd0b5199a9d15f", + "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f", + "shasum": "" + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "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": "2020-02-09T09:16:15+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "shasum": "" + }, + "require": { + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2020-01-20T15:57:02+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "6.1.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "reference": "807e6013b00af69b6c5d9ceb4282d0393dbb9d8d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.1 || ^4.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "suggest": { + "ext-xdebug": "^2.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.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": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2018-10-31T16:06:48+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-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": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", + "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-06-07T04:22:29+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", + "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2019-09-17T06:23:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "7.5.20", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c", + "reference": "9467db479d1b0487c99733bb1e7944d32deded2c", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.1", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.0", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "conflict": { + "phpunit/phpunit-mock-objects": "*" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.5-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": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2020-01-08T08:45:45+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "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" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.2.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-11-20T08:46:58+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2019-09-14T09:02:43+00:00" + }, + { + "name": "sebastian/global-state", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2017-04-27T15:39:26+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "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" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "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" + } + ], + "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" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-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": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", + "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "vimeo/psalm": "<3.6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2020-02-14T12:15:55+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "~7.2", + "ext-json": "*" + }, + "platform-dev": [] +} From 7e572f8c8dbf436f01c3ee7b07ef583633f2454f Mon Sep 17 00:00:00 2001 From: MarioDevment Date: Wed, 19 Feb 2020 13:07:05 -0300 Subject: [PATCH 16/24] fix: undefined variable: key --- src/ResponseBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ResponseBuilder.php b/src/ResponseBuilder.php index 979d53f..8d8d108 100644 --- a/src/ResponseBuilder.php +++ b/src/ResponseBuilder.php @@ -49,7 +49,7 @@ public function callback(Closure $callback) : self public function header(string $header, string $value) : self { - $this->response = $this->response->withHeader($key, $value); + $this->response = $this->response->withHeader($header, $value); return $this; } From e8bbb27042a2ecce35944d5a460607e9e901deb1 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 24 Feb 2020 20:14:26 -0300 Subject: [PATCH 17/24] tests: simulating the situation of PHP 7.4 stderr output --- tests/AppIntegrationTest.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/AppIntegrationTest.php b/tests/AppIntegrationTest.php index 53d2795..c47d93d 100644 --- a/tests/AppIntegrationTest.php +++ b/tests/AppIntegrationTest.php @@ -235,6 +235,19 @@ static function ($request) { $this->assertSame('second', $this->client->get('/')->getBody()->getContents()); } + public function testServerLogsAreNotInErrorOutput() + { + $expectedErrorOutput = '[Sun Feb 23 10:18:43 2020] [::1]:55146 [404]: (null) / - No such file or directory'; + $serverLogsExample = '[Sun Feb 23 10:18:31 2020] PHP 7.4.2 Development Server (http://localhost:8086) started' . PHP_EOL . + '[Sun Feb 23 10:18:43 2020] [::1]:55146 Accepted' . PHP_EOL . + $expectedErrorOutput . PHP_EOL . + '[Sun Feb 23 10:18:43 2020] [::1]:55146 Closing' . PHP_EOL; + + $cleanedServerLogs = Server::cleanErrorOutput($serverLogsExample); + + $this->assertEquals($expectedErrorOutput, $cleanedServerLogs); + } + private function parseRequestFromResponse(ResponseInterface $response) { $body = unserialize($response->getBody()); From 8400ebc7b5feaaa093dd8b622884ff7e158be0d3 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 24 Feb 2020 20:24:09 -0300 Subject: [PATCH 18/24] fix: patch to clean stderr output based on the keywords --- src/Server.php | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/Server.php b/src/Server.php index 3b3b41c..b323e37 100644 --- a/src/Server.php +++ b/src/Server.php @@ -114,4 +114,46 @@ private function pollWait() } } } + + public function getIncrementalErrorOutput() + { + return self::cleanErrorOutput(parent::getIncrementalErrorOutput()); + } + + public function getErrorOutput() + { + return self::cleanErrorOutput(parent::getErrorOutput()); + } + + public static function cleanErrorOutput($output) + { + if (!trim($output)) { + return ''; + } + + $errorLines = []; + + foreach (explode(PHP_EOL, $output) as $line) { + if (!$line) { + continue; + } + + if (!self::stringEndsWithAny($line, ['Accepted', 'Closing', ' started'])) { + $errorLines[] = $line; + } + } + + return $errorLines ? implode(PHP_EOL, $errorLines) : ''; + } + + private static function stringEndsWithAny($haystack, array $needles) + { + foreach ($needles as $needle) { + if (substr($haystack, (-1 * strlen($needle))) === $needle) { + return true; + } + } + + return false; + } } From 3fc719055fc42324e11d2f6bdff871cb2f67ea14 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Mon, 24 Feb 2020 20:30:00 -0300 Subject: [PATCH 19/24] chore: removing PHP 7.2 from travis and adding 7.4 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index da1a4bc..6bdcc29 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,8 @@ language: php php: - - 7.2 - 7.3 + - 7.4 before_script: - composer install From 3b717ac48609e71a94e3b6f508fc8342ce6ce239 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Tue, 25 Feb 2020 12:34:58 -0300 Subject: [PATCH 20/24] refactor: making the cleanErrorOutput private For that, I had to rewrite the test too --- src/Server.php | 2 +- tests/AppIntegrationTest.php | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Server.php b/src/Server.php index b323e37..47743d0 100644 --- a/src/Server.php +++ b/src/Server.php @@ -125,7 +125,7 @@ public function getErrorOutput() return self::cleanErrorOutput(parent::getErrorOutput()); } - public static function cleanErrorOutput($output) + private static function cleanErrorOutput($output) { if (!trim($output)) { return ''; diff --git a/tests/AppIntegrationTest.php b/tests/AppIntegrationTest.php index c47d93d..a63e6a4 100644 --- a/tests/AppIntegrationTest.php +++ b/tests/AppIntegrationTest.php @@ -237,15 +237,18 @@ static function ($request) { public function testServerLogsAreNotInErrorOutput() { - $expectedErrorOutput = '[Sun Feb 23 10:18:43 2020] [::1]:55146 [404]: (null) / - No such file or directory'; - $serverLogsExample = '[Sun Feb 23 10:18:31 2020] PHP 7.4.2 Development Server (http://localhost:8086) started' . PHP_EOL . - '[Sun Feb 23 10:18:43 2020] [::1]:55146 Accepted' . PHP_EOL . - $expectedErrorOutput . PHP_EOL . - '[Sun Feb 23 10:18:43 2020] [::1]:55146 Closing' . PHP_EOL; + $this->client->delete('/_all'); + + $expectedServerErrorOutput = '[404]: (null) / - No such file or directory'; + + self::$server1->addErrorOutput('PHP 7.4.2 Development Server (http://localhost:8086) started' . PHP_EOL); + self::$server1->addErrorOutput('Accepted' . PHP_EOL); + self::$server1->addErrorOutput($expectedServerErrorOutput . PHP_EOL); + self::$server1->addErrorOutput('Closing' . PHP_EOL); - $cleanedServerLogs = Server::cleanErrorOutput($serverLogsExample); + $actualServerErrorOutput = self::$server1->getErrorOutput(); - $this->assertEquals($expectedErrorOutput, $cleanedServerLogs); + $this->assertEquals($expectedServerErrorOutput, $actualServerErrorOutput); } private function parseRequestFromResponse(ResponseInterface $response) From 435f11afca6c2681409ae040e4c6ec2b4fae4ec3 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Tue, 25 Feb 2020 15:18:42 -0300 Subject: [PATCH 21/24] chore: maintaining PHP 7.2 to support some legacy we still have --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 6bdcc29..47fe754 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: php php: + - 7.2 - 7.3 - 7.4 From 364fcb76ad5f53b05447e3f3ba17de656968b91d Mon Sep 17 00:00:00 2001 From: ibrito Date: Thu, 9 Jun 2022 13:00:16 -0400 Subject: [PATCH 22/24] chore: allow guzzle 7 --- composer.json | 7 +- composer.lock | 2532 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 1733 insertions(+), 806 deletions(-) diff --git a/composer.json b/composer.json index f251372..6911a1a 100644 --- a/composer.json +++ b/composer.json @@ -22,10 +22,9 @@ "symfony/process": "~3|~4|~5", "jeremeamia/superclosure": "~2", "lstrojny/hmmmath": ">=0.5.0", - "guzzlehttp/guzzle": "^6.3", + "guzzlehttp/guzzle": "^6.3|~7", "slim/slim": "^3.12", - "friendsofphp/php-cs-fixer": "^2.16", - "sensiolabs/security-checker": "^6.0" + "friendsofphp/php-cs-fixer": "^2.16" }, "require-dev": { "internations/testing-component": "1.3.0", @@ -58,7 +57,7 @@ "@lint --dry-run" ], "security-check": [ - "security-checker security:check" + "local-php-security-checker-installer && local-php-security-checker" ] } } diff --git a/composer.lock b/composer.lock index f321e49..7c45557 100644 --- a/composer.lock +++ b/composer.lock @@ -4,32 +4,104 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bbdb0f65bd5de618503c1d43c2827bbc", + "content-hash": "10567558de003fe63ecd70598059b866", "packages": [ + { + "name": "composer/pcre", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/1.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": "2022-01-21T20:24:37+00:00" + }, { "name": "composer/semver", - "version": "1.5.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", - "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5 || ^5.0.5" + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -65,28 +137,50 @@ "validation", "versioning" ], - "time": "2020-01-13T12:06:48+00:00" + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "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": "2022-04-01T19:23:25+00:00" }, { "name": "composer/xdebug-handler", - "version": "1.4.0", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "cbe23383749496fe0f373345208b79568e4bc248" + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", - "reference": "cbe23383749496fe0f373345208b79568e4bc248", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/9e36aeed4616366d2b690bdce11f71e9178c579a", + "reference": "9e36aeed4616366d2b690bdce11f71e9178c579a", "shasum": "" }, "require": { + "composer/pcre": "^1", "php": "^5.3.2 || ^7.0 || ^8.0", - "psr/log": "^1.0" + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^4.2 || ^5.0 || ^6.0" }, "type": "library", "autoload": { @@ -109,36 +203,55 @@ "Xdebug", "performance" ], - "time": "2019-11-06T16:40:04+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.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": "2022-02-24T20:20:32+00:00" }, { "name": "doctrine/annotations", - "version": "v1.8.0", + "version": "1.13.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc" + "reference": "5b668aef16090008790395c02c893b1ba13f7e08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/904dca4eb10715b92569fbcd79e201d5c349b6bc", - "reference": "904dca4eb10715b92569fbcd79e201d5c349b6bc", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5b668aef16090008790395c02c893b1ba13f7e08", + "reference": "5b668aef16090008790395c02c893b1ba13f7e08", "shasum": "" }, "require": { "doctrine/lexer": "1.*", - "php": "^7.1" + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "1.*", - "phpunit/phpunit": "^7.5" + "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.7.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" @@ -171,42 +284,42 @@ } ], "description": "Docblock Annotations Parser", - "homepage": "http://www.doctrine-project.org", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ "annotations", "docblock", "parser" ], - "time": "2019-10-01T18:55:10+00:00" + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/1.13.2" + }, + "time": "2021-08-05T19:00:23+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.0", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", - "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { - "php": "^7.2" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -239,31 +352,49 @@ "parser", "php" ], - "time": "2019-10-30T14:39:59+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.2.3" + }, + "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": "2022-02-28T11:07:21+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.16.1", + "version": "v2.19.3", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02" + "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/c8afb599858876e95e8ebfcd97812d383fa23f02", - "reference": "c8afb599858876e95e8ebfcd97812d383fa23f02", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8", + "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8", "shasum": "" }, "require": { - "composer/semver": "^1.4", - "composer/xdebug-handler": "^1.2", + "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", + "php": "^5.6 || ^7.0 || ^8.0", "php-cs-fixer/diff": "^1.3", - "symfony/console": "^3.4.17 || ^4.1.6 || ^5.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", @@ -274,21 +405,24 @@ "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.2", + "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.1", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", - "phpunitgoodpractices/traits": "^1.8", - "symfony/phpunit-bridge": "^4.3 || ^5.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." @@ -297,6 +431,11 @@ "php-cs-fixer" ], "type": "application", + "extra": { + "branch-alias": { + "dev-master": "2.19-dev" + } + }, "autoload": { "psr-4": { "PhpCsFixer\\": "src/" @@ -310,6 +449,8 @@ "tests/Test/IntegrationCaseFactory.php", "tests/Test/IntegrationCaseFactoryInterface.php", "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/Test/TokensWithObservedTransformers.php", "tests/TestCase.php" ] }, @@ -328,27 +469,38 @@ } ], "description": "A tool to automatically fix PHP code style", - "time": "2019-11-25T22:10:32+00:00" + "support": { + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2021-11-15T17:17:55+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.2", + "version": "6.5.6", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + "reference": "f092dd734083473658de3ee4bef093ed77d2689c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", - "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f092dd734083473658de3ee4bef093ed77d2689c", + "reference": "f092dd734083473658de3ee4bef093ed77d2689c", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.0", "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.17.0" }, "require-dev": { "ext-curl": "*", @@ -356,7 +508,6 @@ "psr/log": "^1.1" }, "suggest": { - "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", @@ -366,22 +517,52 @@ } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", @@ -395,71 +576,122 @@ "rest", "web service" ], - "time": "2019-12-23T11:57:10+00:00" + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/6.5.6" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2022-05-25T13:19:12+00:00" }, { "name": "guzzlehttp/promises", - "version": "v1.3.1", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", - "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", "shasum": "" }, "require": { - "php": ">=5.5.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.0" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", "keywords": [ "promise" ], - "time": "2016-12-20T10:07:11+00:00" + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.5.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2021-10-22T20:56:57+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.6.1", + "version": "1.8.5", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", - "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", + "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", "shasum": "" }, "require": { @@ -472,37 +704,58 @@ }, "require-dev": { "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" }, "suggest": { - "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6-dev" + "dev-master": "1.7-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" } ], @@ -517,7 +770,25 @@ "uri", "url" ], - "time": "2019-07-01T23:21:34+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/1.8.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-03-20T21:51:18+00:00" }, { "name": "jeremeamia/superclosure", @@ -575,28 +846,32 @@ "serialize", "tokenizer" ], + "support": { + "issues": "https://github.com/jeremeamia/super_closure/issues", + "source": "https://github.com/jeremeamia/super_closure/tree/master" + }, + "abandoned": "opis/closure", "time": "2018-03-21T22:21:57+00:00" }, { "name": "lstrojny/hmmmath", - "version": "0.7.1", + "version": "0.8.0", "source": { "type": "git", "url": "https://github.com/lstrojny/hmmmath.git", - "reference": "031e4049042a28798fa49b756ebbb46b1297ef3e" + "reference": "8e562c70f89b5580ed99674b849e3587b52f704b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lstrojny/hmmmath/zipball/031e4049042a28798fa49b756ebbb46b1297ef3e", - "reference": "031e4049042a28798fa49b756ebbb46b1297ef3e", + "url": "https://api.github.com/repos/lstrojny/hmmmath/zipball/8e562c70f89b5580ed99674b849e3587b52f704b", + "reference": "8e562c70f89b5580ed99674b849e3587b52f704b", "shasum": "" }, "require": { - "php": "~7.1" + "php": "^7.2|^8.0" }, "require-dev": { - "internations/testing-component": "dev-master", - "phpunit/phpunit": "~6" + "phpunit/phpunit": "^8.5" }, "type": "library", "autoload": { @@ -615,7 +890,11 @@ } ], "description": "Collection of math related PHP functions", - "time": "2018-12-09T15:54:49+00:00" + "support": { + "issues": "https://github.com/lstrojny/hmmmath/issues", + "source": "https://github.com/lstrojny/hmmmath/tree/0.8.0" + }, + "time": "2020-12-17T11:21:54+00:00" }, { "name": "nikic/fast-route", @@ -639,12 +918,12 @@ }, "type": "library", "autoload": { - "psr-4": { - "FastRoute\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "FastRoute\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -661,20 +940,24 @@ "router", "routing" ], + "support": { + "issues": "https://github.com/nikic/FastRoute/issues", + "source": "https://github.com/nikic/FastRoute/tree/master" + }, "time": "2018-02-13T20:26:39+00:00" }, { "name": "nikic/php-parser", - "version": "v4.3.0", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc" + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc", - "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", + "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", "shasum": "" }, "require": { @@ -682,8 +965,8 @@ "php": ">=7.0" }, "require-dev": { - "ircmaxell/php-yacc": "0.0.5", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -691,7 +974,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.9-dev" } }, "autoload": { @@ -713,72 +996,31 @@ "parser", "php" ], - "time": "2019-11-08T13:50:10+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.99", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "shasum": "" - }, - "require": { - "php": "^7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" }, - "type": "library", - "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-07-02T15:55:56+00:00" + "time": "2022-05-31T20:59:12+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", @@ -792,14 +1034,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" } @@ -809,33 +1051,37 @@ "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": "pimple/pimple", - "version": "v3.2.3", + "version": "v3.5.0", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/container": "^1.0" + "php": ">=7.2.5", + "psr/container": "^1.1 || ^2.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.2" + "symfony/phpunit-bridge": "^5.4@dev" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.4.x-dev" } }, "autoload": { @@ -854,25 +1100,28 @@ } ], "description": "Pimple, a simple Dependency Injection Container", - "homepage": "http://pimple.sensiolabs.org", + "homepage": "https://pimple.symfony.com", "keywords": [ "container", "dependency injection" ], - "time": "2018-01-21T07:42:36+00:00" + "support": { + "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" + }, + "time": "2021-10-28T11:13:42+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "psr/cache", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", "shasum": "" }, "require": { @@ -886,7 +1135,7 @@ }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\Cache\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -899,43 +1148,91 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Common interface for caching libraries", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "cache", + "psr", + "psr-6" ], - "time": "2017-02-14T16:28:37+00:00" + "support": { + "source": "https://github.com/php-fig/cache/tree/master" + }, + "time": "2016-08-06T20:24:11+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "psr/container", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/php-fig/container.git", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "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": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -954,6 +1251,10 @@ "psr", "psr-14" ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, "time": "2019-01-08T18:20:26+00:00" }, { @@ -1004,20 +1305,23 @@ "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.2", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", - "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { @@ -1041,7 +1345,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", @@ -1051,7 +1355,10 @@ "psr", "psr-3" ], - "time": "2019-11-01T11:05:21+00:00" + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" }, { "name": "ralouphie/getallheaders", @@ -1091,55 +1398,11 @@ } ], "description": "A polyfill for getallheaders.", - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "sensiolabs/security-checker", - "version": "v6.0.3", - "source": { - "type": "git", - "url": "https://github.com/sensiolabs/security-checker.git", - "reference": "a576c01520d9761901f269c4934ba55448be4a54" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sensiolabs/security-checker/zipball/a576c01520d9761901f269c4934ba55448be4a54", - "reference": "a576c01520d9761901f269c4934ba55448be4a54", - "shasum": "" + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" }, - "require": { - "php": ">=7.1.3", - "symfony/console": "^2.8|^3.4|^4.2|^5.0", - "symfony/http-client": "^4.3|^5.0", - "symfony/mime": "^4.3|^5.0", - "symfony/polyfill-ctype": "^1.11" - }, - "bin": [ - "security-checker" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "autoload": { - "psr-4": { - "SensioLabs\\Security\\": "SensioLabs/Security" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien.potencier@gmail.com" - } - ], - "description": "A security checker for your composer.lock", - "time": "2019-11-01T13:20:14+00:00" + "time": "2019-03-08T08:55:37+00:00" }, { "name": "slim/slim", @@ -1212,45 +1475,54 @@ "micro", "router" ], + "support": { + "issues": "https://github.com/slimphp/Slim/issues", + "source": "https://github.com/slimphp/Slim/tree/3.x" + }, "time": "2019-11-28T17:40:33+00:00" }, { "name": "symfony/console", - "version": "v5.0.4", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "91c294166c38d8c0858a86fad76d8c14dc1144c8" + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/91c294166c38d8c0858a86fad76d8c14dc1144c8", - "reference": "91c294166c38d8c0858a86fad76d8c14dc1144c8", + "url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb", + "reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/service-contracts": "^1.1|^2" + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", "symfony/lock": "<4.4", "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" }, "suggest": { "psr/log": "For using the console logger", @@ -1259,11 +1531,6 @@ "symfony/process": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" @@ -1286,27 +1553,119 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Console Component", + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.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": "2022-05-18T06:17:34+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "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": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "time": "2020-01-25T15:56:29+00:00" + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1" + }, + "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": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.0.4", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4a7a8cdca1120c091b4797f0e5bba69c1e783224" + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4a7a8cdca1120c091b4797f0e5bba69c1e783224", - "reference": "4a7a8cdca1120c091b4797f0e5bba69c1e783224", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", + "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/event-dispatcher-contracts": "^2" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { "symfony/dependency-injection": "<4.4" @@ -1316,24 +1675,20 @@ "symfony/event-dispatcher-implementation": "2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, "suggest": { "symfony/dependency-injection": "", "symfony/http-kernel": "" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" @@ -1356,26 +1711,43 @@ "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": "2020-01-10T21:57:37+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.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": "2022-05-05T16:45:39+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.0.1", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd" + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/af23c2584d4577d54661c434446fb8fbed6025dd", - "reference": "af23c2584d4577d54661c434446fb8fbed6025dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { - "php": "^7.2.5", + "php": ">=7.2.5", "psr/event-dispatcher": "^1" }, "suggest": { @@ -1384,7 +1756,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -1416,32 +1792,46 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.1" + }, + "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": "2022-01-02T09:53:40+00:00" }, { "name": "symfony/filesystem", - "version": "v5.0.4", + "version": "v5.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c" + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/3afadc0f57cd74f86379d073e694b0f2cda2a88c", - "reference": "3afadc0f57cd74f86379d073e694b0f2cda2a88c", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba", + "reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-ctype": "~1.8" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" @@ -1464,33 +1854,47 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Filesystem Component", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "time": "2020-01-21T08:40:24+00:00" + "support": { + "source": "https://github.com/symfony/filesystem/tree/v5.4.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": "2022-05-20T13:55:35+00:00" }, { "name": "symfony/finder", - "version": "v5.0.4", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb" + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", - "reference": "4176e7cb846fe08f32518b7e0ed8462e2db8d9bb", + "url": "https://api.github.com/repos/symfony/finder/zipball/9b630f3427f3ebe7cd346c277a1408b00249dad9", + "reference": "9b630f3427f3ebe7cd346c277a1408b00249dad9", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" @@ -1513,55 +1917,51 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "support": { + "source": "https://github.com/symfony/finder/tree/v5.4.8" + }, + "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": "2022-04-15T08:07:45+00:00" }, { - "name": "symfony/http-client", - "version": "v5.0.4", + "name": "symfony/options-resolver", + "version": "v5.4.3", "source": { "type": "git", - "url": "https://github.com/symfony/http-client.git", - "reference": "4240ae267d89db5b694bdb5712e691b1e24cdc26" + "url": "https://github.com/symfony/options-resolver.git", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/4240ae267d89db5b694bdb5712e691b1e24cdc26", - "reference": "4240ae267d89db5b694bdb5712e691b1e24cdc26", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/cc1147cb11af1b43f503ac18f31aa3bec213aba8", + "reference": "cc1147cb11af1b43f503ac18f31aa3bec213aba8", "shasum": "" }, "require": { - "php": "^7.2.5", - "psr/log": "^1.0", - "symfony/http-client-contracts": "^1.1.8|^2", - "symfony/polyfill-php73": "^1.11", - "symfony/service-contracts": "^1.0|^2" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "1.1" - }, - "require-dev": { - "guzzlehttp/promises": "^1.3.1", - "nyholm/psr7": "^1.0", - "php-http/httplug": "^1.0|^2.0", - "psr/http-client": "^1.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/http-kernel": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Component\\HttpClient\\": "" + "Symfony\\Component\\OptionsResolver\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -1573,47 +1973,79 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpClient component", + "description": "Provides an improved replacement for the array_replace PHP function", "homepage": "https://symfony.com", - "time": "2020-01-31T09:13:47+00:00" + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v5.4.3" + }, + "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": "2022-01-02T09:53:40+00:00" }, { - "name": "symfony/http-client-contracts", - "version": "v2.0.1", + "name": "symfony/polyfill-ctype", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/378868b61b85c5cac6822d4f84e26999c9f2e881", - "reference": "378868b61b85c5cac6822d4f84e26999c9f2e881", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" }, "suggest": { - "symfony/http-client-implementation": "" + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -1622,65 +2054,78 @@ ], "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": "Generic abstractions related to HTTP clients", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "compatibility", + "ctype", + "polyfill", + "portable" ], - "time": "2019-11-26T23:25:11+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.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": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/mime", - "version": "v5.0.4", + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/2a3c7fee1f1a0961fa9cf360d5da553d05095e59", - "reference": "2a3c7fee1f1a0961fa9cf360d5da553d05095e59", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "symfony/mailer": "<4.4" + "php": ">=7.1" }, - "require-dev": { - "egulias/email-validator": "^2.1.10", - "symfony/dependency-injection": "^4.4|^5.0" + "suggest": { + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1688,109 +2133,82 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A library to manipulate MIME messages", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ - "mime", - "mime-type" + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" ], - "time": "2020-01-04T14:08:26+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v5.0.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "b1ab86ce52b0c0abe031367a173005a025e30e04" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b1ab86ce52b0c0abe031367a173005a025e30e04", - "reference": "b1ab86ce52b0c0abe031367a173005a025e30e04", - "shasum": "" - }, - "require": { - "php": "^7.2.5" + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony OptionsResolver Component", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "time": "2020-01-04T14:08:26+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.14.0", + "name": "symfony/polyfill-intl-idn", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", - "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, "suggest": { - "ext-ctype": "For best performance" + "ext-intl": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1798,42 +2216,63 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "ctype", + "idn", + "intl", "polyfill", - "portable" + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.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-01-13T11:15:53+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.14.0", + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", - "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" @@ -1841,15 +2280,22 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1858,42 +2304,62 @@ ], "authors": [ { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "idn", "intl", + "normalizer", "polyfill", "portable", "shim" ], - "time": "2020-01-17T12:01:36+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.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": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.14.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", - "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" }, "suggest": { "ext-mbstring": "For best performance" @@ -1901,16 +2367,20 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1935,39 +2405,51 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.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": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php56", - "version": "v1.14.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php56.git", - "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3" + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3", - "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", + "reference": "54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-util": "~1.0" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "1.14-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php56\\": "" + "dev-main": "1.20-dev" }, - "files": [ - "bootstrap.php" - ] + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1991,42 +2473,51 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php56/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-php70", - "version": "v1.14.0", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "419c4940024c30ccc033650373a1fe13890d3255" + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/419c4940024c30ccc033650373a1fe13890d3255", - "reference": "419c4940024c30ccc033650373a1fe13890d3255", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", + "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", "shasum": "" }, "require": { - "paragonie/random_compat": "~1.0|~2.0|~9.99", - "php": ">=5.3.3" + "php": ">=7.1" }, - "type": "library", + "type": "metapackage", "extra": { "branch-alias": { - "dev-master": "1.14-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": [ @@ -2050,38 +2541,59 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+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.14.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", - "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2105,38 +2617,59 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.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": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.14.0", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", - "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -2163,41 +2696,72 @@ "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.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": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/polyfill-util", - "version": "v1.14.0", + "name": "symfony/polyfill-php80", + "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-util.git", - "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3", - "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.14-dev" + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Polyfill\\Util\\": "" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "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" @@ -2207,39 +2771,52 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony utilities for portability of PHP codes", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "compat", "compatibility", "polyfill", + "portable", "shim" ], - "time": "2020-01-13T11:15:53+00:00" + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.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": "2022-05-10T07:21:04+00:00" }, { "name": "symfony/process", - "version": "v5.0.4", + "version": "v5.4.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1" + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", - "reference": "f9ffd870f5ac01abec7b2b5e15f904ca9400ecd1", + "url": "https://api.github.com/repos/symfony/process/zipball/597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", + "reference": "597f3fff8e3e91836bb0bd38f5718b56ddbde2f3", "shasum": "" }, "require": { - "php": "^7.2.5" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Process\\": "" @@ -2262,27 +2839,48 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "time": "2020-01-09T09:53:06+00:00" + "support": { + "source": "https://github.com/symfony/process/tree/v5.4.8" + }, + "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": "2022-04-08T05:07:18+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.0.1", + "version": "v2.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "144c5e51266b281231e947b51223ba14acf1a749" + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", - "reference": "144c5e51266b281231e947b51223ba14acf1a749", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c", + "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c", "shasum": "" }, "require": { - "php": "^7.2.5", - "psr/container": "^1.0" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" @@ -2290,7 +2888,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -2322,32 +2924,44 @@ "interoperability", "standards" ], - "time": "2019-11-18T17:27:11+00:00" + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v2.5.1" + }, + "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": "2022-03-13T20:07:29+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.0.4", + "version": "v5.4.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4" + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5d9add8034135b9a5f7b101d1e42c797e7f053e4", - "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", + "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", "shasum": "" }, "require": { - "php": "^7.2.5", - "symfony/service-contracts": "^1.0|^2" + "php": ">=7.2.5", + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Component\\Stopwatch\\": "" @@ -2370,44 +2984,143 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Stopwatch Component", + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" + }, + "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": "2022-02-18T16:06:09+00:00" + }, + { + "name": "symfony/string", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", - "time": "2020-01-04T14:08:26+00:00" + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v5.4.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": "2022-04-19T10:40:37+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.3.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", - "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-shim": "^0.11", - "phpunit/phpunit": "^7.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -2421,7 +3134,7 @@ { "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", @@ -2430,7 +3143,25 @@ "constructor", "instantiate" ], - "time": "2019-10-21T16:45:58+00:00" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.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%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-03-03T08:28:38+00:00" }, { "name": "internations/testing-component", @@ -2498,41 +3229,46 @@ } ], "description": "A collection of test helpers for Symfony 3 projects", + "support": { + "issues": "https://github.com/InterNations/TestingComponent/issues", + "source": "https://github.com/InterNations/TestingComponent/tree/master" + }, "time": "2018-12-09T16:20:22+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.5", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", - "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2546,7 +3282,17 @@ "object", "object graph" ], - "time": "2020-01-17T21:11:47+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" }, { "name": "phar-io/manifest", @@ -2601,6 +3347,10 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/master" + }, "time": "2018-07-08T19:23:20+00:00" }, { @@ -2648,32 +3398,33 @@ } ], "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/master" + }, "time": "2018-07-08T19:19:57+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "2.0.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", - "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~6" + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -2700,32 +3451,36 @@ "reflection", "static analysis" ], - "time": "2018-08-07T13:53:10+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": "5.0.0", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f" + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/a48807183a4b819072f26e347bbd0b5199a9d15f", - "reference": "a48807183a4b819072f26e347bbd0b5199a9d15f", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", + "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", "shasum": "" }, "require": { - "ext-filter": "^7.1", - "php": "^7.2", - "phpdocumentor/reflection-common": "^2.0", - "phpdocumentor/type-resolver": "^1.0", - "webmozart/assert": "^1" + "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", - "mockery/mockery": "^1" + "mockery/mockery": "~1.3.2", + "psalm/phar": "^4.8" }, "type": "library", "extra": { @@ -2753,35 +3508,38 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2020-02-09T09:16:15+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + }, + "time": "2021-10-19T17:43:47+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.0.1", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" + "reference": "77a32518733312af16a44300404e945338981de3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", - "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3", + "reference": "77a32518733312af16a44300404e945338981de3", "shasum": "" }, "require": { - "php": "^7.1", + "php": "^7.2 || ^8.0", "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "ext-tokenizer": "^7.1", - "mockery/mockery": "~1", - "phpunit/phpunit": "^7.0" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { @@ -2800,37 +3558,41 @@ } ], "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "time": "2019-08-22T18:11:29+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.1" + }, + "time": "2022-03-15T21:29:03+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.10.2", + "version": "v1.15.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9" + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9", - "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", - "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.2", + "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 || ^7.1" + "phpspec/phpspec": "^6.0 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.10.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -2863,7 +3625,11 @@ "spy", "stub" ], - "time": "2020-01-20T15:57:02+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + }, + "time": "2021-12-08T12:19:24+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2926,27 +3692,31 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/master" + }, "time": "2018-10-31T16:06:48+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.2", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "050bedf145a257b1ff02746c31894800e5122946" + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", - "reference": "050bedf145a257b1ff02746c31894800e5122946", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", + "reference": "42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -2976,7 +3746,17 @@ "filesystem", "iterator" ], - "time": "2018-09-13T20:33:42+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:42:26+00:00" }, { "name": "phpunit/php-text-template", @@ -3017,27 +3797,31 @@ "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": "2.1.2", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", - "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -3066,25 +3850,35 @@ "keywords": [ "timer" ], - "time": "2019-06-07T04:22:29+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": "3.1.1", + "version": "3.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", - "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768", + "reference": "9c1da83261628cb24b6a6df371b6e312b3954768", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.1" + "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.0" @@ -3115,7 +3909,18 @@ "keywords": [ "tokenizer" ], - "time": "2019-09-17T06:23:10+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2021-07-26T12:15:06+00:00" }, { "name": "phpunit/phpunit", @@ -3199,27 +4004,31 @@ "testing", "xunit" ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/7.5.20" + }, "time": "2020-01-08T08:45:45+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": { @@ -3244,29 +4053,39 @@ ], "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": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", - "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", + "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", "shasum": "" }, "require": { - "php": "^7.1", + "php": ">=7.1", "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -3284,6 +4103,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -3295,10 +4118,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", @@ -3308,24 +4127,34 @@ "compare", "equality" ], - "time": "2018-07-12T15:12: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": "3.0.2", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", - "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5 || ^8.0", @@ -3347,13 +4176,13 @@ "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", @@ -3364,24 +4193,34 @@ "unidiff", "unified diff" ], - "time": "2019-02-04T06:01:07+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": "4.2.3", + "version": "4.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", - "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.1" }, "require-dev": { "phpunit/phpunit": "^7.5" @@ -3417,29 +4256,39 @@ "environment", "hhvm" ], - "time": "2019-11-20T08:46:58+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.2", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", - "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", + "reference": "0c32ea2e40dbf59de29f3b49bf375176ce7dd8db", "shasum": "" }, "require": { - "php": "^7.0", + "php": ">=7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^8.5" }, "type": "library", "extra": { @@ -3484,7 +4333,17 @@ "export", "exporter" ], - "time": "2019-09-14T09:02:43+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-11-11T13:51:24+00:00" }, { "name": "sebastian/global-state", @@ -3535,24 +4394,28 @@ "keywords": [ "global state" ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" + }, "time": "2017-04-27T15:39:26+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" }, @@ -3582,24 +4445,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" @@ -3627,24 +4500,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" @@ -3665,14 +4548,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" @@ -3680,24 +4563,34 @@ ], "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": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.1" }, "type": "library", "extra": { @@ -3722,7 +4615,17 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+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/version", @@ -3765,27 +4668,31 @@ ], "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": "theseer/tokenizer", - "version": "1.1.3", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", - "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -3805,33 +4712,49 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2019-06-13T22:48:21+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" }, { "name": "webmozart/assert", - "version": "1.7.0", + "version": "1.11.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598" + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598", - "reference": "aed98a490f9a8f78468232db345ab9cf606cf598", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { - "vimeo/psalm": "<3.6.0" + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36 || ^7.5.13" + "phpunit/phpunit": "^8.5.13" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -3853,7 +4776,11 @@ "check", "validate" ], - "time": "2020-02-14T12:15:55+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" } ], "aliases": [], @@ -3865,5 +4792,6 @@ "php": "~7.2", "ext-json": "*" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.3.0" } From 3ffb06e58411cd1a389a5429fd0e6533d4f641b6 Mon Sep 17 00:00:00 2001 From: ibrito Date: Mon, 13 Jun 2022 12:41:23 -0400 Subject: [PATCH 23/24] chore: update php-cs-fixer v2.16 => v3.4.0 --- .php-cs-fixer.dist.php | 19 ++ composer.json | 4 +- composer.lock | 502 ++++++++++++++++++----------------------- 3 files changed, 245 insertions(+), 280 deletions(-) create mode 100644 .php-cs-fixer.dist.php diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..f2388aa --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,19 @@ +in(__DIR__ . '/src') + ->in(__DIR__ . '/tests'); + +return (new PhpCsFixer\Config()) + ->setRules([ + '@Symfony' => true, + 'array_syntax' => ['syntax' => 'short'], + 'combine_consecutive_unsets' => true, + 'concat_space' => ['spacing' => 'one'], + 'return_type_declaration' => ['space_before' => 'one'], + 'no_unreachable_default_argument_value' => false, + 'yoda_style' => false, + 'ordered_imports' => ['sort_algorithm' => 'alpha'], + 'increment_style' => ['style' => 'post'] + ]) + ->setFinder($finder); diff --git a/composer.json b/composer.json index 6911a1a..e4b2ece 100644 --- a/composer.json +++ b/composer.json @@ -24,7 +24,7 @@ "lstrojny/hmmmath": ">=0.5.0", "guzzlehttp/guzzle": "^6.3|~7", "slim/slim": "^3.12", - "friendsofphp/php-cs-fixer": "^2.16" + "friendsofphp/php-cs-fixer": "3.4.0" }, "require-dev": { "internations/testing-component": "1.3.0", @@ -51,7 +51,7 @@ "@auto-scripts" ], "lint": [ - "php-cs-fixer fix --ansi --verbose --show-progress=estimating" + "php-cs-fixer fix --ansi --verbose --show-progress=dots" ], "lint:check": [ "@lint --dry-run" diff --git a/composer.lock b/composer.lock index 7c45557..21fa161 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "10567558de003fe63ecd70598059b866", + "content-hash": "d436ff32fe1a31062076b35a557341b9", "packages": [ { "name": "composer/pcre", @@ -374,85 +374,65 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v2.19.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8" + "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/75ac86f33fab4714ea5a39a396784d83ae3b5ed8", - "reference": "75ac86f33fab4714ea5a39a396784d83ae3b5ed8", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", + "reference": "47177af1cfb9dab5d1cc4daf91b7179c2efe7fad", "shasum": "" }, "require": { - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^1.2 || ^2.0", - "doctrine/annotations": "^1.2", + "composer/semver": "^3.2", + "composer/xdebug-handler": "^2.0", + "doctrine/annotations": "^1.12", "ext-json": "*", "ext-tokenizer": "*", - "php": "^5.6 || ^7.0 || ^8.0", - "php-cs-fixer/diff": "^1.3", - "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 || ^5.0", - "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + "php": "^7.2.5 || ^8.0", + "php-cs-fixer/diff": "^2.0", + "symfony/console": "^4.4.20 || ^5.1.3 || ^6.0", + "symfony/event-dispatcher": "^4.4.20 || ^5.0 || ^6.0", + "symfony/filesystem": "^4.4.20 || ^5.0 || ^6.0", + "symfony/finder": "^4.4.20 || ^5.0 || ^6.0", + "symfony/options-resolver": "^4.4.20 || ^5.0 || ^6.0", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.23", + "symfony/polyfill-php81": "^1.23", + "symfony/process": "^4.4.20 || ^5.0 || ^6.0", + "symfony/stopwatch": "^4.4.20 || ^5.0 || ^6.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.0", - "keradus/cli-executor": "^1.4", - "mikey179/vfsstream": "^1.6", - "php-coveralls/php-coveralls": "^2.4.2", - "php-cs-fixer/accessible-object": "^1.0", + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.8", + "php-coveralls/php-coveralls": "^2.5.2", + "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^1.1 || ^2.0", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5", + "phpunit/phpunit": "^8.5.21 || ^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" + "symfony/phpunit-bridge": "^5.2.4 || ^6.0", + "symfony/yaml": "^4.4.20 || ^5.0 || ^6.0" }, "suggest": { "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." + "ext-mbstring": "For handling non-UTF8 characters." }, "bin": [ "php-cs-fixer" ], "type": "application", - "extra": { - "branch-alias": { - "dev-master": "2.19-dev" - } - }, "autoload": { "psr-4": { "PhpCsFixer\\": "src/" - }, - "classmap": [ - "tests/Test/AbstractFixerTestCase.php", - "tests/Test/AbstractIntegrationCaseFactory.php", - "tests/Test/AbstractIntegrationTestCase.php", - "tests/Test/Assert/AssertTokensTrait.php", - "tests/Test/IntegrationCase.php", - "tests/Test/IntegrationCaseFactory.php", - "tests/Test/IntegrationCaseFactoryInterface.php", - "tests/Test/InternalIntegrationCaseFactory.php", - "tests/Test/IsIdenticalConstraint.php", - "tests/Test/TokensWithObservedTransformers.php", - "tests/TestCase.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -471,7 +451,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.3" + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.4.0" }, "funding": [ { @@ -479,41 +459,49 @@ "type": "github" } ], - "time": "2021-11-15T17:17:55+00:00" + "time": "2021-12-11T16:25:08+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.6", + "version": "7.4.4", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "f092dd734083473658de3ee4bef093ed77d2689c" + "reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f092dd734083473658de3ee4bef093ed77d2689c", - "reference": "f092dd734083473658de3ee4bef093ed77d2689c", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/e3ff079b22820c2029d4c2a87796b6a0b8716ad8", + "reference": "e3ff079b22820c2029d4c2a87796b6a0b8716ad8", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.6.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17.0" + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.8.3 || ^2.1", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.5-dev" + "dev-master": "7.4-dev" } }, "autoload": { @@ -566,19 +554,20 @@ } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", "framework", "http", "http client", + "psr-18", + "psr-7", "rest", "web service" ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.6" + "source": "https://github.com/guzzle/guzzle/tree/7.4.4" }, "funding": [ { @@ -594,7 +583,7 @@ "type": "tidelift" } ], - "time": "2022-05-25T13:19:12+00:00" + "time": "2022-06-09T21:39:15+00:00" }, { "name": "guzzlehttp/promises", @@ -682,29 +671,32 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.8.5", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268" + "reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/337e3ad8e5716c15f9657bd214d16cc5e69df268", - "reference": "337e3ad8e5716c15f9657bd214d16cc5e69df268", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/83260bb50b8fc753c72d14dc1621a2dac31877ee", + "reference": "83260bb50b8fc753c72d14dc1621a2dac31877ee", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" }, "provide": { + "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -712,13 +704,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.3-dev" } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Psr7\\": "src/" } @@ -757,6 +746,11 @@ "name": "Tobias Schultze", "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -772,7 +766,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.5" + "source": "https://github.com/guzzle/psr7/tree/2.3.0" }, "funding": [ { @@ -788,7 +782,7 @@ "type": "tidelift" } ], - "time": "2022-03-20T21:51:18+00:00" + "time": "2022-06-09T08:26:02+00:00" }, { "name": "jeremeamia/superclosure", @@ -1004,16 +998,16 @@ }, { "name": "php-cs-fixer/diff", - "version": "v1.3.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759" + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759", - "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", "shasum": "" }, "require": { @@ -1041,21 +1035,18 @@ { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" - }, - { - "name": "SpacePossum" } ], - "description": "sebastian/diff v2 backport support for PHP5.6", + "description": "sebastian/diff v3 backport support for PHP 5.6+", "homepage": "https://github.com/PHP-CS-Fixer", "keywords": [ "diff" ], "support": { "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1" + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" }, - "time": "2020-10-14T08:39:05+00:00" + "time": "2020-10-14T08:32:19+00:00" }, { "name": "pimple/pimple", @@ -1257,6 +1248,113 @@ }, "time": "2019-01-08T18:20:26+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "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 interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -2170,93 +2268,6 @@ ], "time": "2022-05-24T11:49:31+00:00" }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.26-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.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": "2022-05-24T11:49:31+00:00" - }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.26.0", @@ -2493,85 +2504,17 @@ "time": "2020-10-23T14:02:19+00:00" }, { - "name": "symfony/polyfill-php70", - "version": "v1.20.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php70.git", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644", - "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "metapackage", - "extra": { - "branch-alias": { - "dev-main": "1.20-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "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", + "name": "symfony/polyfill-php73", "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -2592,8 +2535,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2609,7 +2555,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -2618,7 +2564,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -2637,17 +2583,17 @@ "time": "2022-05-24T11:49:31+00:00" }, { - "name": "symfony/polyfill-php73", + "name": "symfony/polyfill-php80", "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", - "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -2668,7 +2614,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, "classmap": [ "Resources/stubs" @@ -2679,6 +2625,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -2688,7 +2638,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -2697,7 +2647,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" }, "funding": [ { @@ -2713,20 +2663,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-05-10T07:21:04+00:00" }, { - "name": "symfony/polyfill-php80", + "name": "symfony/polyfill-php81", "version": "v1.26.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", "shasum": "" }, "require": { @@ -2747,7 +2697,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "classmap": [ "Resources/stubs" @@ -2758,10 +2708,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -2771,7 +2717,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -2780,7 +2726,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -2796,7 +2742,7 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", From 236dda5cb0c2c9404d167f4c5bf160e40e681d40 Mon Sep 17 00:00:00 2001 From: ibrito Date: Mon, 13 Jun 2022 12:41:42 -0400 Subject: [PATCH 24/24] style: lint update --- src/app.php | 6 +++--- tests/MockBuilderIntegrationTest.php | 2 +- tests/RequestCollectionFacadeTest.php | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app.php b/src/app.php index f5e4684..0c6075a 100644 --- a/src/app.php +++ b/src/app.php @@ -127,7 +127,7 @@ function (Request $request, Response $response) use ($container) { ); $container['phpErrorHandler'] = function ($container) { - return function (Request $request, Response $response, Error $e) use ($container) { + return function (Request $request, Response $response, Error $e) { return $response->withStatus(500) ->withHeader('Content-Type', 'text/plain') ->write($e->getMessage() . "\n" . $e->getTraceAsString() . "\n"); @@ -166,7 +166,7 @@ function (Request $request, Response $response) use ($container) { continue; } - ++$expectations[$pos]['runs']; + $expectations[$pos]['runs']++; $container['storage']->store($request, 'expectations', $expectations); $r = Util::responseDeserialize($expectation['response']); @@ -188,7 +188,7 @@ function (Request $request, Response $response) use ($container) { }; $container['errorHandler'] = function ($container) { - return function (Request $request, Response $response, Exception $e) use ($container) { + return function (Request $request, Response $response, Exception $e) { return $response->withStatus(StatusCode::HTTP_INTERNAL_SERVER_ERROR)->write( 'Server error: ' . $e->getMessage()); }; diff --git a/tests/MockBuilderIntegrationTest.php b/tests/MockBuilderIntegrationTest.php index f38b28b..3a29d71 100644 --- a/tests/MockBuilderIntegrationTest.php +++ b/tests/MockBuilderIntegrationTest.php @@ -75,7 +75,7 @@ public function testCreateExpectation() $unserializedClosure = unserialize(serialize($closure)); $this->assertTrue($unserializedClosure($request)); - ++$run; + $run++; } ini_set('error_log', $oldValue); $this->assertSame(3, $run); diff --git a/tests/RequestCollectionFacadeTest.php b/tests/RequestCollectionFacadeTest.php index 32615c6..5f4cc92 100644 --- a/tests/RequestCollectionFacadeTest.php +++ b/tests/RequestCollectionFacadeTest.php @@ -69,7 +69,7 @@ public function testRequestLatestResponseWithHttpAuth($method, $path, array $arg } /** @dataProvider provideMethodAndUrls */ - public function testRequestResponse_InvalidStatusCode($method, $path, array $args = [], $httpMethod = 'get') + public function testRequestResponseInvalidStatusCode($method, $path, array $args = [], $httpMethod = 'get') { $this->mockClient($path, $this->createResponseWithInvalidStatusCode(), $httpMethod); @@ -80,7 +80,7 @@ public function testRequestResponse_InvalidStatusCode($method, $path, array $arg } /** @dataProvider provideMethodAndUrls */ - public function testRequestResponse_EmptyContentType($method, $path, array $args = [], $httpMethod = 'get') + public function testRequestResponseEmptyContentType($method, $path, array $args = [], $httpMethod = 'get') { $this->mockClient($path, $this->createResponseWithEmptyContentType(), $httpMethod); @@ -91,7 +91,7 @@ public function testRequestResponse_EmptyContentType($method, $path, array $args } /** @dataProvider provideMethodAndUrls */ - public function testRequestResponse_InvalidContentType($method, $path, array $args = [], $httpMethod = 'get') + public function testRequestResponseInvalidContentType($method, $path, array $args = [], $httpMethod = 'get') { $this->mockClient($path, $this->createResponseWithInvalidContentType(), $httpMethod); @@ -102,7 +102,7 @@ public function testRequestResponse_InvalidContentType($method, $path, array $ar } /** @dataProvider provideMethodAndUrls */ - public function testRequestResponse_DeserializationError($method, $path, array $args = [], $httpMethod = 'get') + public function testRequestResponseDeserializationError($method, $path, array $args = [], $httpMethod = 'get') { $this->mockClient($path, $this->createResponseThatCannotBeDeserialized(), $httpMethod);