├── .gitignore ├── _config.yml ├── .travis.yml ├── phpunit.xml ├── composer.json ├── LICENSE ├── src ├── HttpClient │ └── Response │ │ └── HttpResponse.php └── JsonApiClient.php ├── README.md ├── tests └── JsonApiTest.php └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /build/ 3 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 7.2 5 | - 7.3 6 | 7 | before_script: 8 | - composer install 9 | 10 | script: php vendor/bin/phpunit --coverage-text 11 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | tests 12 | 13 | 14 | 15 | 16 | src 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "enm/json-api-client", 3 | "description": "Abstract client-side php implementation of the json api specification (jsonapi.org)", 4 | "type": "library", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "Philipp Marien", 9 | "email": "marien@eosnewmedia.de" 10 | } 11 | ], 12 | "autoload": { 13 | "psr-4": { 14 | "Enm\\JsonApi\\Client\\": "src" 15 | } 16 | }, 17 | "autoload-dev": { 18 | "psr-4": { 19 | "Enm\\JsonApi\\Client\\Tests\\": "tests" 20 | } 21 | }, 22 | "require": { 23 | "enm/json-api-common": "^3.0", 24 | "psr/http-factory": "^1.0", 25 | "psr/http-client": "^1.0" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^8.3", 29 | "nyholm/psr7": "^1.2" 30 | }, 31 | "minimum-stability": "stable" 32 | } 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 eos new media GmbH & Co. KG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/HttpClient/Response/HttpResponse.php: -------------------------------------------------------------------------------- 1 | 13 | */ 14 | class HttpResponse implements ResponseInterface 15 | { 16 | /** 17 | * @var int 18 | */ 19 | private $status; 20 | 21 | /** 22 | * @var KeyValueCollectionInterface 23 | */ 24 | private $headers; 25 | 26 | /** 27 | * @var DocumentInterface|null 28 | */ 29 | private $document; 30 | 31 | /** 32 | * @param int $status 33 | * @param array $headers 34 | * @param DocumentInterface|null $document 35 | */ 36 | public function __construct(int $status, array $headers, ?DocumentInterface $document) 37 | { 38 | $this->status = $status; 39 | $this->headers = new KeyValueCollection(); 40 | foreach ($headers as $header => $value) { 41 | if (is_array($value) && count($value) === 1) { 42 | $value = $value[0]; 43 | } 44 | $this->headers->set($header, $value); 45 | } 46 | 47 | $this->document = $document; 48 | } 49 | 50 | /** 51 | * @return int 52 | */ 53 | public function status(): int 54 | { 55 | return $this->status; 56 | } 57 | 58 | /** 59 | * @return KeyValueCollectionInterface 60 | */ 61 | public function headers(): KeyValueCollectionInterface 62 | { 63 | return $this->headers; 64 | } 65 | 66 | /** 67 | * @return DocumentInterface|null 68 | */ 69 | public function document(): ?DocumentInterface 70 | { 71 | return $this->document; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | JSON API Client 2 | =============== 3 | [![Build Status](https://travis-ci.org/eosnewmedia/JSON-API-Client.svg?branch=master)](https://travis-ci.org/eosnewmedia/JSON-API-Client) 4 | 5 | Abstract client-side PHP implementation of the [json api specification](http://jsonapi.org/format/). 6 | 7 | ## Installation 8 | 9 | ```sh 10 | composer require enm/json-api-client 11 | ``` 12 | 13 | It's recommended to install `kriswallsmith/buzz` as http-client and `nyholm/psr7` for http factories. 14 | 15 | ```sh 16 | composer require kriswallsmith/buzz nyholm/psr7 17 | ``` 18 | 19 | You can also use any HTTP client which implements [PSR-18](https://www.php-fig.org/psr/psr-18/). 20 | 21 | ## Usage 22 | First you should read the docs at [enm/json-api-common](https://eosnewmedia.github.io/JSON-API-Common/) where all basic structures are defined. 23 | 24 | Your API client is an instance of `Enm\JsonApi\Client\JsonApiClient`, which requires a PSR-18 HTTP client (`Psr\Http\Client\ClientInterface`) to execute requests. 25 | 26 | ```php 27 | 28 | $client = new JsonApiClient( 29 | 'http://example.com/api', 30 | $httpClient, // instance of Psr\Http\Client\ClientInterface 31 | $uriFactory, // instance of Psr\Http\Message\UriFactoryInterface 32 | $requestFactory, // instance of Psr\Http\Message\RequestFactoryInterface 33 | $streamFactory, // instance of Psr\Http\Message\StreamFactoryInterface 34 | new Serializer(), 35 | new Deserializer() 36 | ); 37 | 38 | $request = $client->createGetRequest(new Uri('/myResources/1')); // will fetch the resource at http://example.com/api/myResources/1 39 | $request->requestInclude('myRelationship'); // include a relationship 40 | 41 | $response = $client->execute($request); 42 | 43 | $document = $response->document(); 44 | $myResource = $document->data()->first(); // the resource fetched by this request 45 | $myIncludedResources = $document->included()->all(); // the included resources fetched with the include parameter 46 | 47 | ``` 48 | -------------------------------------------------------------------------------- /tests/JsonApiTest.php: -------------------------------------------------------------------------------- 1 | 16 | */ 17 | class JsonApiTest extends TestCase 18 | { 19 | public function testCreateGetRequestWithResource(): void 20 | { 21 | try { 22 | $client = $this->createClient('http://example.com/api'); 23 | $request = $client->createGetRequest((new Psr17Factory())->createUri('/myResources/1')); 24 | 25 | $this->assertEquals( 26 | 'http://example.com/api/myResources/1', 27 | (string)$request->uri() 28 | ); 29 | } catch (Throwable $e) { 30 | $this->fail($e->getMessage()); 31 | } 32 | } 33 | 34 | public function testCreateGetRequestWithResources(): void 35 | { 36 | try { 37 | $client = $this->createClient('http://example.com'); 38 | $request = $client->createGetRequest((new Psr17Factory())->createUri('/myResources')); 39 | 40 | $this->assertEquals( 41 | 'http://example.com/myResources', 42 | (string)$request->uri() 43 | ); 44 | } catch (Throwable $e) { 45 | $this->fail($e->getMessage()); 46 | } 47 | } 48 | 49 | public function testCreateGetRequestWithFilteredResourcesAndInclude(): void 50 | { 51 | try { 52 | $client = $this->createClient('http://example.com'); 53 | $request = $client->createGetRequest((new Psr17Factory())->createUri('/myResources?include=test')); 54 | $request->addFilter('name', 'test'); 55 | $request->requestInclude('myRelationship'); 56 | 57 | $this->assertEquals( 58 | 'http://example.com/myResources?sort=&filter%5Bname%5D=test&include=test%2CmyRelationship', 59 | (string)$request->uri() 60 | ); 61 | } catch (Throwable $e) { 62 | $this->fail($e->getMessage()); 63 | } 64 | } 65 | 66 | /** 67 | * @param string $baseUri 68 | * @return JsonApiClient 69 | */ 70 | protected function createClient(string $baseUri): JsonApiClient 71 | { 72 | $psr17Factory = new Psr17Factory(); 73 | /** @noinspection PhpParamsInspection */ 74 | return new JsonApiClient( 75 | $baseUri, 76 | $this->createMock(ClientInterface::class), 77 | $psr17Factory, 78 | $psr17Factory, 79 | $psr17Factory, 80 | $this->createMock(DocumentSerializerInterface::class), 81 | $this->createMock(DocumentDeserializerInterface::class) 82 | ); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/JsonApiClient.php: -------------------------------------------------------------------------------- 1 | 23 | */ 24 | class JsonApiClient 25 | { 26 | /** 27 | * @var string 28 | */ 29 | private $baseUrl; 30 | 31 | /** 32 | * @var ClientInterface 33 | */ 34 | private $httpClient; 35 | 36 | /** 37 | * @var UriFactoryInterface 38 | */ 39 | private $uriFactory; 40 | 41 | /** 42 | * @var RequestFactoryInterface 43 | */ 44 | private $requestFactory; 45 | 46 | /** 47 | * @var StreamFactoryInterface 48 | */ 49 | private $streamFactory; 50 | 51 | /** 52 | * @var DocumentSerializerInterface 53 | */ 54 | private $serializer; 55 | 56 | /** 57 | * @var DocumentDeserializerInterface 58 | */ 59 | private $deserializer; 60 | 61 | /** 62 | * @param string $baseUrl 63 | * @param ClientInterface $httpClient 64 | * @param UriFactoryInterface $uriFactory 65 | * @param RequestFactoryInterface $requestFactory 66 | * @param StreamFactoryInterface $streamFactory 67 | * @param DocumentSerializerInterface $serializer 68 | * @param DocumentDeserializerInterface $deserializer 69 | */ 70 | public function __construct( 71 | string $baseUrl, 72 | ClientInterface $httpClient, 73 | UriFactoryInterface $uriFactory, 74 | RequestFactoryInterface $requestFactory, 75 | StreamFactoryInterface $streamFactory, 76 | DocumentSerializerInterface $serializer, 77 | DocumentDeserializerInterface $deserializer 78 | ) { 79 | $this->baseUrl = $baseUrl; 80 | $this->httpClient = $httpClient; 81 | $this->uriFactory = $uriFactory; 82 | $this->requestFactory = $requestFactory; 83 | $this->streamFactory = $streamFactory; 84 | $this->serializer = $serializer; 85 | $this->deserializer = $deserializer; 86 | } 87 | 88 | /** 89 | * @param UriInterface $path 90 | * @return RequestInterface 91 | * @throws Throwable 92 | */ 93 | public function createGetRequest(UriInterface $path): RequestInterface 94 | { 95 | return $this->createJsonApiRequest('GET', $path); 96 | } 97 | 98 | /** 99 | * @param UriInterface $path 100 | * @param DocumentInterface $body 101 | * @return RequestInterface 102 | * @throws Throwable 103 | */ 104 | public function createPostRequest(UriInterface $path, DocumentInterface $body): RequestInterface 105 | { 106 | return $this->createJsonApiRequest('POST', $path, $body); 107 | } 108 | 109 | /** 110 | * @param UriInterface $path 111 | * @param DocumentInterface $body 112 | * @return RequestInterface 113 | * @throws Throwable 114 | */ 115 | public function createPatchRequest(UriInterface $path, DocumentInterface $body): RequestInterface 116 | { 117 | return $this->createJsonApiRequest('PATCH', $path, $body); 118 | } 119 | 120 | /** 121 | * @param UriInterface $path 122 | * @param DocumentInterface|null $body 123 | * @return RequestInterface 124 | * @throws Throwable 125 | */ 126 | public function createDeleteRequest(UriInterface $path, ?DocumentInterface $body = null): RequestInterface 127 | { 128 | return $this->createJsonApiRequest('DELETE', $path, $body); 129 | } 130 | 131 | /** 132 | * @param RequestInterface $request 133 | * @param bool $exceptionOnFatalError 134 | * @return ResponseInterface 135 | * @throws Throwable 136 | */ 137 | public function execute(RequestInterface $request, bool $exceptionOnFatalError = true): ResponseInterface 138 | { 139 | $httpRequest = $this->requestFactory->createRequest($request->method(), $request->uri()); 140 | foreach ($request->headers()->all() as $header => $value) { 141 | $httpRequest = $httpRequest->withHeader($header, $value); 142 | } 143 | 144 | if ($request->requestBody()) { 145 | $httpRequest = $httpRequest->withBody( 146 | $this->streamFactory->createStream( 147 | json_encode($this->serializer->serializeDocument($request->requestBody())) 148 | ) 149 | ); 150 | } 151 | 152 | $httpResponse = $this->httpClient->sendRequest($httpRequest); 153 | 154 | $response = new HttpResponse( 155 | $httpResponse->getStatusCode(), 156 | $httpResponse->getHeaders(), 157 | $this->createResponseBody($httpResponse->getBody()->getContents()) 158 | ); 159 | 160 | if ($exceptionOnFatalError && $response->status() >= 400) { 161 | $message = 'Non successful http status returned (' . $response->status() . ').'; 162 | 163 | $document = $response->document(); 164 | if ($document && !$document->errors()->isEmpty()) { 165 | foreach ($document->errors()->all() as $error) { 166 | $message .= '\n' . $error->title(); 167 | } 168 | } 169 | 170 | throw new HttpException($response->status(), $message); 171 | } 172 | 173 | return $response; 174 | } 175 | 176 | /** 177 | * @param string|null $responseBody 178 | * @return DocumentInterface|null 179 | */ 180 | private function createResponseBody(?string $responseBody): ?DocumentInterface 181 | { 182 | $responseBody = (string)$responseBody !== '' ? json_decode($responseBody, true) : null; 183 | 184 | return $responseBody ? $this->deserializer->deserializeDocument($responseBody) : $responseBody; 185 | } 186 | 187 | /** 188 | * @param string $method 189 | * @param UriInterface $path 190 | * @param DocumentInterface|null $body 191 | * @return RequestInterface 192 | * @throws Throwable 193 | */ 194 | private function createJsonApiRequest( 195 | string $method, 196 | UriInterface $path, 197 | ?DocumentInterface $body = null 198 | ): RequestInterface { 199 | $uri = $this->uriFactory->createUri($this->baseUrl); 200 | 201 | if ((string)$path->getHost() !== '') { 202 | $uri = $uri->withScheme($path->getScheme()) 203 | ->withHost($path->getHost()) 204 | ->withPort($path->getPort()); 205 | 206 | if ((string)$path->getUserInfo() !== '') { 207 | 208 | $parts = explode(':', $path->getUserInfo(), 2); 209 | $password = null; 210 | if (count($parts) === 2) { 211 | $password = $parts[1]; 212 | } 213 | $uri = $uri->withUserInfo($parts[0], $password); 214 | } 215 | } 216 | 217 | if ((string)$path->getQuery() !== '') { 218 | 219 | if ((string)$uri->getQuery() === '') { 220 | $uri = $uri->withQuery($path->getQuery()); 221 | } else { 222 | $pathQuery = []; 223 | parse_str($path->getQuery(), $pathQuery); 224 | $uriQuery = []; 225 | parse_str($uri->getQuery(), $uriQuery); 226 | $uri->withQuery(http_build_query(array_merge($uriQuery, $pathQuery))); 227 | } 228 | } 229 | 230 | $prefix = null; 231 | if ((string)$uri->getPath() !== '') { 232 | $prefix = trim($uri->getPath(), '/'); 233 | if (!empty($prefix)) { 234 | $prefix .= '/'; 235 | } 236 | } 237 | 238 | $uri = $uri->withPath('/' . $prefix . trim($path->getPath(), '/')); 239 | 240 | return new Request($method, $uri, $body, $prefix); 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "0b799ecba49ac81eeb22f75d5899a28a", 8 | "packages": [ 9 | { 10 | "name": "enm/json-api-common", 11 | "version": "3.2.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/eosnewmedia/JSON-API-Common.git", 15 | "reference": "d868eb4d76bf75518f1bb72a70e5abf78fcae476" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/eosnewmedia/JSON-API-Common/zipball/d868eb4d76bf75518f1bb72a70e5abf78fcae476", 20 | "reference": "d868eb4d76bf75518f1bb72a70e5abf78fcae476", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=7.2", 25 | "psr/http-message": "^1.0" 26 | }, 27 | "require-dev": { 28 | "guzzlehttp/psr7": "^1.4", 29 | "phpunit/phpunit": "^7.0" 30 | }, 31 | "type": "library", 32 | "autoload": { 33 | "psr-4": { 34 | "Enm\\JsonApi\\": "src" 35 | } 36 | }, 37 | "notification-url": "https://packagist.org/downloads/", 38 | "license": [ 39 | "MIT" 40 | ], 41 | "authors": [ 42 | { 43 | "name": "Philipp Marien", 44 | "email": "marien@eosnewmedia.de" 45 | } 46 | ], 47 | "description": "Basic php implementation (shared structures for client and server) of the json api specification (jsonapi.org)", 48 | "time": "2018-10-29T13:01:14+00:00" 49 | }, 50 | { 51 | "name": "psr/http-client", 52 | "version": "1.0.0", 53 | "source": { 54 | "type": "git", 55 | "url": "https://github.com/php-fig/http-client.git", 56 | "reference": "496a823ef742b632934724bf769560c2a5c7c44e" 57 | }, 58 | "dist": { 59 | "type": "zip", 60 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/496a823ef742b632934724bf769560c2a5c7c44e", 61 | "reference": "496a823ef742b632934724bf769560c2a5c7c44e", 62 | "shasum": "" 63 | }, 64 | "require": { 65 | "php": "^7.0", 66 | "psr/http-message": "^1.0" 67 | }, 68 | "type": "library", 69 | "extra": { 70 | "branch-alias": { 71 | "dev-master": "1.0.x-dev" 72 | } 73 | }, 74 | "autoload": { 75 | "psr-4": { 76 | "Psr\\Http\\Client\\": "src/" 77 | } 78 | }, 79 | "notification-url": "https://packagist.org/downloads/", 80 | "license": [ 81 | "MIT" 82 | ], 83 | "authors": [ 84 | { 85 | "name": "PHP-FIG", 86 | "homepage": "http://www.php-fig.org/" 87 | } 88 | ], 89 | "description": "Common interface for HTTP clients", 90 | "homepage": "https://github.com/php-fig/http-client", 91 | "keywords": [ 92 | "http", 93 | "http-client", 94 | "psr", 95 | "psr-18" 96 | ], 97 | "time": "2018-10-30T23:29:13+00:00" 98 | }, 99 | { 100 | "name": "psr/http-factory", 101 | "version": "1.0.1", 102 | "source": { 103 | "type": "git", 104 | "url": "https://github.com/php-fig/http-factory.git", 105 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" 106 | }, 107 | "dist": { 108 | "type": "zip", 109 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 110 | "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", 111 | "shasum": "" 112 | }, 113 | "require": { 114 | "php": ">=7.0.0", 115 | "psr/http-message": "^1.0" 116 | }, 117 | "type": "library", 118 | "extra": { 119 | "branch-alias": { 120 | "dev-master": "1.0.x-dev" 121 | } 122 | }, 123 | "autoload": { 124 | "psr-4": { 125 | "Psr\\Http\\Message\\": "src/" 126 | } 127 | }, 128 | "notification-url": "https://packagist.org/downloads/", 129 | "license": [ 130 | "MIT" 131 | ], 132 | "authors": [ 133 | { 134 | "name": "PHP-FIG", 135 | "homepage": "http://www.php-fig.org/" 136 | } 137 | ], 138 | "description": "Common interfaces for PSR-7 HTTP message factories", 139 | "keywords": [ 140 | "factory", 141 | "http", 142 | "message", 143 | "psr", 144 | "psr-17", 145 | "psr-7", 146 | "request", 147 | "response" 148 | ], 149 | "time": "2019-04-30T12:38:16+00:00" 150 | }, 151 | { 152 | "name": "psr/http-message", 153 | "version": "1.0.1", 154 | "source": { 155 | "type": "git", 156 | "url": "https://github.com/php-fig/http-message.git", 157 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 158 | }, 159 | "dist": { 160 | "type": "zip", 161 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 162 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 163 | "shasum": "" 164 | }, 165 | "require": { 166 | "php": ">=5.3.0" 167 | }, 168 | "type": "library", 169 | "extra": { 170 | "branch-alias": { 171 | "dev-master": "1.0.x-dev" 172 | } 173 | }, 174 | "autoload": { 175 | "psr-4": { 176 | "Psr\\Http\\Message\\": "src/" 177 | } 178 | }, 179 | "notification-url": "https://packagist.org/downloads/", 180 | "license": [ 181 | "MIT" 182 | ], 183 | "authors": [ 184 | { 185 | "name": "PHP-FIG", 186 | "homepage": "http://www.php-fig.org/" 187 | } 188 | ], 189 | "description": "Common interface for HTTP messages", 190 | "homepage": "https://github.com/php-fig/http-message", 191 | "keywords": [ 192 | "http", 193 | "http-message", 194 | "psr", 195 | "psr-7", 196 | "request", 197 | "response" 198 | ], 199 | "time": "2016-08-06T14:39:51+00:00" 200 | } 201 | ], 202 | "packages-dev": [ 203 | { 204 | "name": "doctrine/instantiator", 205 | "version": "1.2.0", 206 | "source": { 207 | "type": "git", 208 | "url": "https://github.com/doctrine/instantiator.git", 209 | "reference": "a2c590166b2133a4633738648b6b064edae0814a" 210 | }, 211 | "dist": { 212 | "type": "zip", 213 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", 214 | "reference": "a2c590166b2133a4633738648b6b064edae0814a", 215 | "shasum": "" 216 | }, 217 | "require": { 218 | "php": "^7.1" 219 | }, 220 | "require-dev": { 221 | "doctrine/coding-standard": "^6.0", 222 | "ext-pdo": "*", 223 | "ext-phar": "*", 224 | "phpbench/phpbench": "^0.13", 225 | "phpstan/phpstan-phpunit": "^0.11", 226 | "phpstan/phpstan-shim": "^0.11", 227 | "phpunit/phpunit": "^7.0" 228 | }, 229 | "type": "library", 230 | "extra": { 231 | "branch-alias": { 232 | "dev-master": "1.2.x-dev" 233 | } 234 | }, 235 | "autoload": { 236 | "psr-4": { 237 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 238 | } 239 | }, 240 | "notification-url": "https://packagist.org/downloads/", 241 | "license": [ 242 | "MIT" 243 | ], 244 | "authors": [ 245 | { 246 | "name": "Marco Pivetta", 247 | "email": "ocramius@gmail.com", 248 | "homepage": "http://ocramius.github.com/" 249 | } 250 | ], 251 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 252 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 253 | "keywords": [ 254 | "constructor", 255 | "instantiate" 256 | ], 257 | "time": "2019-03-17T17:37:11+00:00" 258 | }, 259 | { 260 | "name": "myclabs/deep-copy", 261 | "version": "1.9.3", 262 | "source": { 263 | "type": "git", 264 | "url": "https://github.com/myclabs/DeepCopy.git", 265 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" 266 | }, 267 | "dist": { 268 | "type": "zip", 269 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", 270 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", 271 | "shasum": "" 272 | }, 273 | "require": { 274 | "php": "^7.1" 275 | }, 276 | "replace": { 277 | "myclabs/deep-copy": "self.version" 278 | }, 279 | "require-dev": { 280 | "doctrine/collections": "^1.0", 281 | "doctrine/common": "^2.6", 282 | "phpunit/phpunit": "^7.1" 283 | }, 284 | "type": "library", 285 | "autoload": { 286 | "psr-4": { 287 | "DeepCopy\\": "src/DeepCopy/" 288 | }, 289 | "files": [ 290 | "src/DeepCopy/deep_copy.php" 291 | ] 292 | }, 293 | "notification-url": "https://packagist.org/downloads/", 294 | "license": [ 295 | "MIT" 296 | ], 297 | "description": "Create deep copies (clones) of your objects", 298 | "keywords": [ 299 | "clone", 300 | "copy", 301 | "duplicate", 302 | "object", 303 | "object graph" 304 | ], 305 | "time": "2019-08-09T12:45:53+00:00" 306 | }, 307 | { 308 | "name": "nyholm/psr7", 309 | "version": "1.2.0", 310 | "source": { 311 | "type": "git", 312 | "url": "https://github.com/Nyholm/psr7.git", 313 | "reference": "27c828a165ff936f9fe9056baa9cabe0c70a423c" 314 | }, 315 | "dist": { 316 | "type": "zip", 317 | "url": "https://api.github.com/repos/Nyholm/psr7/zipball/27c828a165ff936f9fe9056baa9cabe0c70a423c", 318 | "reference": "27c828a165ff936f9fe9056baa9cabe0c70a423c", 319 | "shasum": "" 320 | }, 321 | "require": { 322 | "php": "^7.1", 323 | "php-http/message-factory": "^1.0", 324 | "psr/http-factory": "^1.0", 325 | "psr/http-message": "^1.0" 326 | }, 327 | "provide": { 328 | "psr/http-factory-implementation": "1.0", 329 | "psr/http-message-implementation": "1.0" 330 | }, 331 | "require-dev": { 332 | "http-interop/http-factory-tests": "dev-master", 333 | "php-http/psr7-integration-tests": "dev-master", 334 | "phpunit/phpunit": "^7.5" 335 | }, 336 | "type": "library", 337 | "extra": { 338 | "branch-alias": { 339 | "dev-master": "1.0-dev" 340 | } 341 | }, 342 | "autoload": { 343 | "psr-4": { 344 | "Nyholm\\Psr7\\": "src/" 345 | } 346 | }, 347 | "notification-url": "https://packagist.org/downloads/", 348 | "license": [ 349 | "MIT" 350 | ], 351 | "authors": [ 352 | { 353 | "name": "Tobias Nyholm", 354 | "email": "tobias.nyholm@gmail.com" 355 | }, 356 | { 357 | "name": "Martijn van der Ven", 358 | "email": "martijn@vanderven.se" 359 | } 360 | ], 361 | "description": "A fast PHP7 implementation of PSR-7", 362 | "homepage": "http://tnyholm.se", 363 | "keywords": [ 364 | "psr-17", 365 | "psr-7" 366 | ], 367 | "time": "2019-08-22T18:22:08+00:00" 368 | }, 369 | { 370 | "name": "phar-io/manifest", 371 | "version": "1.0.3", 372 | "source": { 373 | "type": "git", 374 | "url": "https://github.com/phar-io/manifest.git", 375 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 376 | }, 377 | "dist": { 378 | "type": "zip", 379 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 380 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 381 | "shasum": "" 382 | }, 383 | "require": { 384 | "ext-dom": "*", 385 | "ext-phar": "*", 386 | "phar-io/version": "^2.0", 387 | "php": "^5.6 || ^7.0" 388 | }, 389 | "type": "library", 390 | "extra": { 391 | "branch-alias": { 392 | "dev-master": "1.0.x-dev" 393 | } 394 | }, 395 | "autoload": { 396 | "classmap": [ 397 | "src/" 398 | ] 399 | }, 400 | "notification-url": "https://packagist.org/downloads/", 401 | "license": [ 402 | "BSD-3-Clause" 403 | ], 404 | "authors": [ 405 | { 406 | "name": "Arne Blankerts", 407 | "email": "arne@blankerts.de", 408 | "role": "Developer" 409 | }, 410 | { 411 | "name": "Sebastian Heuer", 412 | "email": "sebastian@phpeople.de", 413 | "role": "Developer" 414 | }, 415 | { 416 | "name": "Sebastian Bergmann", 417 | "email": "sebastian@phpunit.de", 418 | "role": "Developer" 419 | } 420 | ], 421 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 422 | "time": "2018-07-08T19:23:20+00:00" 423 | }, 424 | { 425 | "name": "phar-io/version", 426 | "version": "2.0.1", 427 | "source": { 428 | "type": "git", 429 | "url": "https://github.com/phar-io/version.git", 430 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 431 | }, 432 | "dist": { 433 | "type": "zip", 434 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 435 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 436 | "shasum": "" 437 | }, 438 | "require": { 439 | "php": "^5.6 || ^7.0" 440 | }, 441 | "type": "library", 442 | "autoload": { 443 | "classmap": [ 444 | "src/" 445 | ] 446 | }, 447 | "notification-url": "https://packagist.org/downloads/", 448 | "license": [ 449 | "BSD-3-Clause" 450 | ], 451 | "authors": [ 452 | { 453 | "name": "Arne Blankerts", 454 | "email": "arne@blankerts.de", 455 | "role": "Developer" 456 | }, 457 | { 458 | "name": "Sebastian Heuer", 459 | "email": "sebastian@phpeople.de", 460 | "role": "Developer" 461 | }, 462 | { 463 | "name": "Sebastian Bergmann", 464 | "email": "sebastian@phpunit.de", 465 | "role": "Developer" 466 | } 467 | ], 468 | "description": "Library for handling version information and constraints", 469 | "time": "2018-07-08T19:19:57+00:00" 470 | }, 471 | { 472 | "name": "php-http/message-factory", 473 | "version": "v1.0.2", 474 | "source": { 475 | "type": "git", 476 | "url": "https://github.com/php-http/message-factory.git", 477 | "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" 478 | }, 479 | "dist": { 480 | "type": "zip", 481 | "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", 482 | "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", 483 | "shasum": "" 484 | }, 485 | "require": { 486 | "php": ">=5.4", 487 | "psr/http-message": "^1.0" 488 | }, 489 | "type": "library", 490 | "extra": { 491 | "branch-alias": { 492 | "dev-master": "1.0-dev" 493 | } 494 | }, 495 | "autoload": { 496 | "psr-4": { 497 | "Http\\Message\\": "src/" 498 | } 499 | }, 500 | "notification-url": "https://packagist.org/downloads/", 501 | "license": [ 502 | "MIT" 503 | ], 504 | "authors": [ 505 | { 506 | "name": "Márk Sági-Kazár", 507 | "email": "mark.sagikazar@gmail.com" 508 | } 509 | ], 510 | "description": "Factory interfaces for PSR-7 HTTP Message", 511 | "homepage": "http://php-http.org", 512 | "keywords": [ 513 | "factory", 514 | "http", 515 | "message", 516 | "stream", 517 | "uri" 518 | ], 519 | "time": "2015-12-19T14:08:53+00:00" 520 | }, 521 | { 522 | "name": "phpdocumentor/reflection-common", 523 | "version": "1.0.1", 524 | "source": { 525 | "type": "git", 526 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 527 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" 528 | }, 529 | "dist": { 530 | "type": "zip", 531 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 532 | "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", 533 | "shasum": "" 534 | }, 535 | "require": { 536 | "php": ">=5.5" 537 | }, 538 | "require-dev": { 539 | "phpunit/phpunit": "^4.6" 540 | }, 541 | "type": "library", 542 | "extra": { 543 | "branch-alias": { 544 | "dev-master": "1.0.x-dev" 545 | } 546 | }, 547 | "autoload": { 548 | "psr-4": { 549 | "phpDocumentor\\Reflection\\": [ 550 | "src" 551 | ] 552 | } 553 | }, 554 | "notification-url": "https://packagist.org/downloads/", 555 | "license": [ 556 | "MIT" 557 | ], 558 | "authors": [ 559 | { 560 | "name": "Jaap van Otterdijk", 561 | "email": "opensource@ijaap.nl" 562 | } 563 | ], 564 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 565 | "homepage": "http://www.phpdoc.org", 566 | "keywords": [ 567 | "FQSEN", 568 | "phpDocumentor", 569 | "phpdoc", 570 | "reflection", 571 | "static analysis" 572 | ], 573 | "time": "2017-09-11T18:02:19+00:00" 574 | }, 575 | { 576 | "name": "phpdocumentor/reflection-docblock", 577 | "version": "4.3.1", 578 | "source": { 579 | "type": "git", 580 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 581 | "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" 582 | }, 583 | "dist": { 584 | "type": "zip", 585 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", 586 | "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", 587 | "shasum": "" 588 | }, 589 | "require": { 590 | "php": "^7.0", 591 | "phpdocumentor/reflection-common": "^1.0.0", 592 | "phpdocumentor/type-resolver": "^0.4.0", 593 | "webmozart/assert": "^1.0" 594 | }, 595 | "require-dev": { 596 | "doctrine/instantiator": "~1.0.5", 597 | "mockery/mockery": "^1.0", 598 | "phpunit/phpunit": "^6.4" 599 | }, 600 | "type": "library", 601 | "extra": { 602 | "branch-alias": { 603 | "dev-master": "4.x-dev" 604 | } 605 | }, 606 | "autoload": { 607 | "psr-4": { 608 | "phpDocumentor\\Reflection\\": [ 609 | "src/" 610 | ] 611 | } 612 | }, 613 | "notification-url": "https://packagist.org/downloads/", 614 | "license": [ 615 | "MIT" 616 | ], 617 | "authors": [ 618 | { 619 | "name": "Mike van Riel", 620 | "email": "me@mikevanriel.com" 621 | } 622 | ], 623 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 624 | "time": "2019-04-30T17:48:53+00:00" 625 | }, 626 | { 627 | "name": "phpdocumentor/type-resolver", 628 | "version": "0.4.0", 629 | "source": { 630 | "type": "git", 631 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 632 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" 633 | }, 634 | "dist": { 635 | "type": "zip", 636 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", 637 | "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", 638 | "shasum": "" 639 | }, 640 | "require": { 641 | "php": "^5.5 || ^7.0", 642 | "phpdocumentor/reflection-common": "^1.0" 643 | }, 644 | "require-dev": { 645 | "mockery/mockery": "^0.9.4", 646 | "phpunit/phpunit": "^5.2||^4.8.24" 647 | }, 648 | "type": "library", 649 | "extra": { 650 | "branch-alias": { 651 | "dev-master": "1.0.x-dev" 652 | } 653 | }, 654 | "autoload": { 655 | "psr-4": { 656 | "phpDocumentor\\Reflection\\": [ 657 | "src/" 658 | ] 659 | } 660 | }, 661 | "notification-url": "https://packagist.org/downloads/", 662 | "license": [ 663 | "MIT" 664 | ], 665 | "authors": [ 666 | { 667 | "name": "Mike van Riel", 668 | "email": "me@mikevanriel.com" 669 | } 670 | ], 671 | "time": "2017-07-14T14:27:02+00:00" 672 | }, 673 | { 674 | "name": "phpspec/prophecy", 675 | "version": "1.8.1", 676 | "source": { 677 | "type": "git", 678 | "url": "https://github.com/phpspec/prophecy.git", 679 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" 680 | }, 681 | "dist": { 682 | "type": "zip", 683 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", 684 | "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", 685 | "shasum": "" 686 | }, 687 | "require": { 688 | "doctrine/instantiator": "^1.0.2", 689 | "php": "^5.3|^7.0", 690 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", 691 | "sebastian/comparator": "^1.1|^2.0|^3.0", 692 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 693 | }, 694 | "require-dev": { 695 | "phpspec/phpspec": "^2.5|^3.2", 696 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 697 | }, 698 | "type": "library", 699 | "extra": { 700 | "branch-alias": { 701 | "dev-master": "1.8.x-dev" 702 | } 703 | }, 704 | "autoload": { 705 | "psr-4": { 706 | "Prophecy\\": "src/Prophecy" 707 | } 708 | }, 709 | "notification-url": "https://packagist.org/downloads/", 710 | "license": [ 711 | "MIT" 712 | ], 713 | "authors": [ 714 | { 715 | "name": "Konstantin Kudryashov", 716 | "email": "ever.zet@gmail.com", 717 | "homepage": "http://everzet.com" 718 | }, 719 | { 720 | "name": "Marcello Duarte", 721 | "email": "marcello.duarte@gmail.com" 722 | } 723 | ], 724 | "description": "Highly opinionated mocking framework for PHP 5.3+", 725 | "homepage": "https://github.com/phpspec/prophecy", 726 | "keywords": [ 727 | "Double", 728 | "Dummy", 729 | "fake", 730 | "mock", 731 | "spy", 732 | "stub" 733 | ], 734 | "time": "2019-06-13T12:50:23+00:00" 735 | }, 736 | { 737 | "name": "phpunit/php-code-coverage", 738 | "version": "7.0.7", 739 | "source": { 740 | "type": "git", 741 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 742 | "reference": "7743bbcfff2a907e9ee4a25be13d0f8ec5e73800" 743 | }, 744 | "dist": { 745 | "type": "zip", 746 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7743bbcfff2a907e9ee4a25be13d0f8ec5e73800", 747 | "reference": "7743bbcfff2a907e9ee4a25be13d0f8ec5e73800", 748 | "shasum": "" 749 | }, 750 | "require": { 751 | "ext-dom": "*", 752 | "ext-xmlwriter": "*", 753 | "php": "^7.2", 754 | "phpunit/php-file-iterator": "^2.0.2", 755 | "phpunit/php-text-template": "^1.2.1", 756 | "phpunit/php-token-stream": "^3.1.0", 757 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 758 | "sebastian/environment": "^4.2.2", 759 | "sebastian/version": "^2.0.1", 760 | "theseer/tokenizer": "^1.1.3" 761 | }, 762 | "require-dev": { 763 | "phpunit/phpunit": "^8.2.2" 764 | }, 765 | "suggest": { 766 | "ext-xdebug": "^2.7.2" 767 | }, 768 | "type": "library", 769 | "extra": { 770 | "branch-alias": { 771 | "dev-master": "7.0-dev" 772 | } 773 | }, 774 | "autoload": { 775 | "classmap": [ 776 | "src/" 777 | ] 778 | }, 779 | "notification-url": "https://packagist.org/downloads/", 780 | "license": [ 781 | "BSD-3-Clause" 782 | ], 783 | "authors": [ 784 | { 785 | "name": "Sebastian Bergmann", 786 | "role": "lead", 787 | "email": "sebastian@phpunit.de" 788 | } 789 | ], 790 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 791 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 792 | "keywords": [ 793 | "coverage", 794 | "testing", 795 | "xunit" 796 | ], 797 | "time": "2019-07-25T05:31:54+00:00" 798 | }, 799 | { 800 | "name": "phpunit/php-file-iterator", 801 | "version": "2.0.2", 802 | "source": { 803 | "type": "git", 804 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 805 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 806 | }, 807 | "dist": { 808 | "type": "zip", 809 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 810 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 811 | "shasum": "" 812 | }, 813 | "require": { 814 | "php": "^7.1" 815 | }, 816 | "require-dev": { 817 | "phpunit/phpunit": "^7.1" 818 | }, 819 | "type": "library", 820 | "extra": { 821 | "branch-alias": { 822 | "dev-master": "2.0.x-dev" 823 | } 824 | }, 825 | "autoload": { 826 | "classmap": [ 827 | "src/" 828 | ] 829 | }, 830 | "notification-url": "https://packagist.org/downloads/", 831 | "license": [ 832 | "BSD-3-Clause" 833 | ], 834 | "authors": [ 835 | { 836 | "name": "Sebastian Bergmann", 837 | "email": "sebastian@phpunit.de", 838 | "role": "lead" 839 | } 840 | ], 841 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 842 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 843 | "keywords": [ 844 | "filesystem", 845 | "iterator" 846 | ], 847 | "time": "2018-09-13T20:33:42+00:00" 848 | }, 849 | { 850 | "name": "phpunit/php-text-template", 851 | "version": "1.2.1", 852 | "source": { 853 | "type": "git", 854 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 855 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 856 | }, 857 | "dist": { 858 | "type": "zip", 859 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 860 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 861 | "shasum": "" 862 | }, 863 | "require": { 864 | "php": ">=5.3.3" 865 | }, 866 | "type": "library", 867 | "autoload": { 868 | "classmap": [ 869 | "src/" 870 | ] 871 | }, 872 | "notification-url": "https://packagist.org/downloads/", 873 | "license": [ 874 | "BSD-3-Clause" 875 | ], 876 | "authors": [ 877 | { 878 | "name": "Sebastian Bergmann", 879 | "email": "sebastian@phpunit.de", 880 | "role": "lead" 881 | } 882 | ], 883 | "description": "Simple template engine.", 884 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 885 | "keywords": [ 886 | "template" 887 | ], 888 | "time": "2015-06-21T13:50:34+00:00" 889 | }, 890 | { 891 | "name": "phpunit/php-timer", 892 | "version": "2.1.2", 893 | "source": { 894 | "type": "git", 895 | "url": "https://github.com/sebastianbergmann/php-timer.git", 896 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 897 | }, 898 | "dist": { 899 | "type": "zip", 900 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 901 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 902 | "shasum": "" 903 | }, 904 | "require": { 905 | "php": "^7.1" 906 | }, 907 | "require-dev": { 908 | "phpunit/phpunit": "^7.0" 909 | }, 910 | "type": "library", 911 | "extra": { 912 | "branch-alias": { 913 | "dev-master": "2.1-dev" 914 | } 915 | }, 916 | "autoload": { 917 | "classmap": [ 918 | "src/" 919 | ] 920 | }, 921 | "notification-url": "https://packagist.org/downloads/", 922 | "license": [ 923 | "BSD-3-Clause" 924 | ], 925 | "authors": [ 926 | { 927 | "name": "Sebastian Bergmann", 928 | "role": "lead", 929 | "email": "sebastian@phpunit.de" 930 | } 931 | ], 932 | "description": "Utility class for timing", 933 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 934 | "keywords": [ 935 | "timer" 936 | ], 937 | "time": "2019-06-07T04:22:29+00:00" 938 | }, 939 | { 940 | "name": "phpunit/php-token-stream", 941 | "version": "3.1.0", 942 | "source": { 943 | "type": "git", 944 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 945 | "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a" 946 | }, 947 | "dist": { 948 | "type": "zip", 949 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e899757bb3df5ff6e95089132f32cd59aac2220a", 950 | "reference": "e899757bb3df5ff6e95089132f32cd59aac2220a", 951 | "shasum": "" 952 | }, 953 | "require": { 954 | "ext-tokenizer": "*", 955 | "php": "^7.1" 956 | }, 957 | "require-dev": { 958 | "phpunit/phpunit": "^7.0" 959 | }, 960 | "type": "library", 961 | "extra": { 962 | "branch-alias": { 963 | "dev-master": "3.1-dev" 964 | } 965 | }, 966 | "autoload": { 967 | "classmap": [ 968 | "src/" 969 | ] 970 | }, 971 | "notification-url": "https://packagist.org/downloads/", 972 | "license": [ 973 | "BSD-3-Clause" 974 | ], 975 | "authors": [ 976 | { 977 | "name": "Sebastian Bergmann", 978 | "email": "sebastian@phpunit.de" 979 | } 980 | ], 981 | "description": "Wrapper around PHP's tokenizer extension.", 982 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 983 | "keywords": [ 984 | "tokenizer" 985 | ], 986 | "time": "2019-07-25T05:29:42+00:00" 987 | }, 988 | { 989 | "name": "phpunit/phpunit", 990 | "version": "8.3.4", 991 | "source": { 992 | "type": "git", 993 | "url": "https://github.com/sebastianbergmann/phpunit.git", 994 | "reference": "e31cce0cf4499c0ccdbbb211a3280d36ab341e36" 995 | }, 996 | "dist": { 997 | "type": "zip", 998 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e31cce0cf4499c0ccdbbb211a3280d36ab341e36", 999 | "reference": "e31cce0cf4499c0ccdbbb211a3280d36ab341e36", 1000 | "shasum": "" 1001 | }, 1002 | "require": { 1003 | "doctrine/instantiator": "^1.2.0", 1004 | "ext-dom": "*", 1005 | "ext-json": "*", 1006 | "ext-libxml": "*", 1007 | "ext-mbstring": "*", 1008 | "ext-xml": "*", 1009 | "ext-xmlwriter": "*", 1010 | "myclabs/deep-copy": "^1.9.1", 1011 | "phar-io/manifest": "^1.0.3", 1012 | "phar-io/version": "^2.0.1", 1013 | "php": "^7.2", 1014 | "phpspec/prophecy": "^1.8.1", 1015 | "phpunit/php-code-coverage": "^7.0.7", 1016 | "phpunit/php-file-iterator": "^2.0.2", 1017 | "phpunit/php-text-template": "^1.2.1", 1018 | "phpunit/php-timer": "^2.1.2", 1019 | "sebastian/comparator": "^3.0.2", 1020 | "sebastian/diff": "^3.0.2", 1021 | "sebastian/environment": "^4.2.2", 1022 | "sebastian/exporter": "^3.1.0", 1023 | "sebastian/global-state": "^3.0.0", 1024 | "sebastian/object-enumerator": "^3.0.3", 1025 | "sebastian/resource-operations": "^2.0.1", 1026 | "sebastian/type": "^1.1.3", 1027 | "sebastian/version": "^2.0.1" 1028 | }, 1029 | "require-dev": { 1030 | "ext-pdo": "*" 1031 | }, 1032 | "suggest": { 1033 | "ext-soap": "*", 1034 | "ext-xdebug": "*", 1035 | "phpunit/php-invoker": "^2.0.0" 1036 | }, 1037 | "bin": [ 1038 | "phpunit" 1039 | ], 1040 | "type": "library", 1041 | "extra": { 1042 | "branch-alias": { 1043 | "dev-master": "8.3-dev" 1044 | } 1045 | }, 1046 | "autoload": { 1047 | "classmap": [ 1048 | "src/" 1049 | ] 1050 | }, 1051 | "notification-url": "https://packagist.org/downloads/", 1052 | "license": [ 1053 | "BSD-3-Clause" 1054 | ], 1055 | "authors": [ 1056 | { 1057 | "name": "Sebastian Bergmann", 1058 | "role": "lead", 1059 | "email": "sebastian@phpunit.de" 1060 | } 1061 | ], 1062 | "description": "The PHP Unit Testing framework.", 1063 | "homepage": "https://phpunit.de/", 1064 | "keywords": [ 1065 | "phpunit", 1066 | "testing", 1067 | "xunit" 1068 | ], 1069 | "time": "2019-08-11T06:56:55+00:00" 1070 | }, 1071 | { 1072 | "name": "sebastian/code-unit-reverse-lookup", 1073 | "version": "1.0.1", 1074 | "source": { 1075 | "type": "git", 1076 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1077 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1078 | }, 1079 | "dist": { 1080 | "type": "zip", 1081 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1082 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1083 | "shasum": "" 1084 | }, 1085 | "require": { 1086 | "php": "^5.6 || ^7.0" 1087 | }, 1088 | "require-dev": { 1089 | "phpunit/phpunit": "^5.7 || ^6.0" 1090 | }, 1091 | "type": "library", 1092 | "extra": { 1093 | "branch-alias": { 1094 | "dev-master": "1.0.x-dev" 1095 | } 1096 | }, 1097 | "autoload": { 1098 | "classmap": [ 1099 | "src/" 1100 | ] 1101 | }, 1102 | "notification-url": "https://packagist.org/downloads/", 1103 | "license": [ 1104 | "BSD-3-Clause" 1105 | ], 1106 | "authors": [ 1107 | { 1108 | "name": "Sebastian Bergmann", 1109 | "email": "sebastian@phpunit.de" 1110 | } 1111 | ], 1112 | "description": "Looks up which function or method a line of code belongs to", 1113 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1114 | "time": "2017-03-04T06:30:41+00:00" 1115 | }, 1116 | { 1117 | "name": "sebastian/comparator", 1118 | "version": "3.0.2", 1119 | "source": { 1120 | "type": "git", 1121 | "url": "https://github.com/sebastianbergmann/comparator.git", 1122 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 1123 | }, 1124 | "dist": { 1125 | "type": "zip", 1126 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1127 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1128 | "shasum": "" 1129 | }, 1130 | "require": { 1131 | "php": "^7.1", 1132 | "sebastian/diff": "^3.0", 1133 | "sebastian/exporter": "^3.1" 1134 | }, 1135 | "require-dev": { 1136 | "phpunit/phpunit": "^7.1" 1137 | }, 1138 | "type": "library", 1139 | "extra": { 1140 | "branch-alias": { 1141 | "dev-master": "3.0-dev" 1142 | } 1143 | }, 1144 | "autoload": { 1145 | "classmap": [ 1146 | "src/" 1147 | ] 1148 | }, 1149 | "notification-url": "https://packagist.org/downloads/", 1150 | "license": [ 1151 | "BSD-3-Clause" 1152 | ], 1153 | "authors": [ 1154 | { 1155 | "name": "Jeff Welch", 1156 | "email": "whatthejeff@gmail.com" 1157 | }, 1158 | { 1159 | "name": "Volker Dusch", 1160 | "email": "github@wallbash.com" 1161 | }, 1162 | { 1163 | "name": "Bernhard Schussek", 1164 | "email": "bschussek@2bepublished.at" 1165 | }, 1166 | { 1167 | "name": "Sebastian Bergmann", 1168 | "email": "sebastian@phpunit.de" 1169 | } 1170 | ], 1171 | "description": "Provides the functionality to compare PHP values for equality", 1172 | "homepage": "https://github.com/sebastianbergmann/comparator", 1173 | "keywords": [ 1174 | "comparator", 1175 | "compare", 1176 | "equality" 1177 | ], 1178 | "time": "2018-07-12T15:12:46+00:00" 1179 | }, 1180 | { 1181 | "name": "sebastian/diff", 1182 | "version": "3.0.2", 1183 | "source": { 1184 | "type": "git", 1185 | "url": "https://github.com/sebastianbergmann/diff.git", 1186 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 1187 | }, 1188 | "dist": { 1189 | "type": "zip", 1190 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1191 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1192 | "shasum": "" 1193 | }, 1194 | "require": { 1195 | "php": "^7.1" 1196 | }, 1197 | "require-dev": { 1198 | "phpunit/phpunit": "^7.5 || ^8.0", 1199 | "symfony/process": "^2 || ^3.3 || ^4" 1200 | }, 1201 | "type": "library", 1202 | "extra": { 1203 | "branch-alias": { 1204 | "dev-master": "3.0-dev" 1205 | } 1206 | }, 1207 | "autoload": { 1208 | "classmap": [ 1209 | "src/" 1210 | ] 1211 | }, 1212 | "notification-url": "https://packagist.org/downloads/", 1213 | "license": [ 1214 | "BSD-3-Clause" 1215 | ], 1216 | "authors": [ 1217 | { 1218 | "name": "Kore Nordmann", 1219 | "email": "mail@kore-nordmann.de" 1220 | }, 1221 | { 1222 | "name": "Sebastian Bergmann", 1223 | "email": "sebastian@phpunit.de" 1224 | } 1225 | ], 1226 | "description": "Diff implementation", 1227 | "homepage": "https://github.com/sebastianbergmann/diff", 1228 | "keywords": [ 1229 | "diff", 1230 | "udiff", 1231 | "unidiff", 1232 | "unified diff" 1233 | ], 1234 | "time": "2019-02-04T06:01:07+00:00" 1235 | }, 1236 | { 1237 | "name": "sebastian/environment", 1238 | "version": "4.2.2", 1239 | "source": { 1240 | "type": "git", 1241 | "url": "https://github.com/sebastianbergmann/environment.git", 1242 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404" 1243 | }, 1244 | "dist": { 1245 | "type": "zip", 1246 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 1247 | "reference": "f2a2c8e1c97c11ace607a7a667d73d47c19fe404", 1248 | "shasum": "" 1249 | }, 1250 | "require": { 1251 | "php": "^7.1" 1252 | }, 1253 | "require-dev": { 1254 | "phpunit/phpunit": "^7.5" 1255 | }, 1256 | "suggest": { 1257 | "ext-posix": "*" 1258 | }, 1259 | "type": "library", 1260 | "extra": { 1261 | "branch-alias": { 1262 | "dev-master": "4.2-dev" 1263 | } 1264 | }, 1265 | "autoload": { 1266 | "classmap": [ 1267 | "src/" 1268 | ] 1269 | }, 1270 | "notification-url": "https://packagist.org/downloads/", 1271 | "license": [ 1272 | "BSD-3-Clause" 1273 | ], 1274 | "authors": [ 1275 | { 1276 | "name": "Sebastian Bergmann", 1277 | "email": "sebastian@phpunit.de" 1278 | } 1279 | ], 1280 | "description": "Provides functionality to handle HHVM/PHP environments", 1281 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1282 | "keywords": [ 1283 | "Xdebug", 1284 | "environment", 1285 | "hhvm" 1286 | ], 1287 | "time": "2019-05-05T09:05:15+00:00" 1288 | }, 1289 | { 1290 | "name": "sebastian/exporter", 1291 | "version": "3.1.1", 1292 | "source": { 1293 | "type": "git", 1294 | "url": "https://github.com/sebastianbergmann/exporter.git", 1295 | "reference": "06a9a5947f47b3029d76118eb5c22802e5869687" 1296 | }, 1297 | "dist": { 1298 | "type": "zip", 1299 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/06a9a5947f47b3029d76118eb5c22802e5869687", 1300 | "reference": "06a9a5947f47b3029d76118eb5c22802e5869687", 1301 | "shasum": "" 1302 | }, 1303 | "require": { 1304 | "php": "^7.0", 1305 | "sebastian/recursion-context": "^3.0" 1306 | }, 1307 | "require-dev": { 1308 | "ext-mbstring": "*", 1309 | "phpunit/phpunit": "^6.0" 1310 | }, 1311 | "type": "library", 1312 | "extra": { 1313 | "branch-alias": { 1314 | "dev-master": "3.1.x-dev" 1315 | } 1316 | }, 1317 | "autoload": { 1318 | "classmap": [ 1319 | "src/" 1320 | ] 1321 | }, 1322 | "notification-url": "https://packagist.org/downloads/", 1323 | "license": [ 1324 | "BSD-3-Clause" 1325 | ], 1326 | "authors": [ 1327 | { 1328 | "name": "Sebastian Bergmann", 1329 | "email": "sebastian@phpunit.de" 1330 | }, 1331 | { 1332 | "name": "Jeff Welch", 1333 | "email": "whatthejeff@gmail.com" 1334 | }, 1335 | { 1336 | "name": "Volker Dusch", 1337 | "email": "github@wallbash.com" 1338 | }, 1339 | { 1340 | "name": "Adam Harvey", 1341 | "email": "aharvey@php.net" 1342 | }, 1343 | { 1344 | "name": "Bernhard Schussek", 1345 | "email": "bschussek@gmail.com" 1346 | } 1347 | ], 1348 | "description": "Provides the functionality to export PHP variables for visualization", 1349 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1350 | "keywords": [ 1351 | "export", 1352 | "exporter" 1353 | ], 1354 | "time": "2019-08-11T12:43:14+00:00" 1355 | }, 1356 | { 1357 | "name": "sebastian/global-state", 1358 | "version": "3.0.0", 1359 | "source": { 1360 | "type": "git", 1361 | "url": "https://github.com/sebastianbergmann/global-state.git", 1362 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" 1363 | }, 1364 | "dist": { 1365 | "type": "zip", 1366 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", 1367 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", 1368 | "shasum": "" 1369 | }, 1370 | "require": { 1371 | "php": "^7.2", 1372 | "sebastian/object-reflector": "^1.1.1", 1373 | "sebastian/recursion-context": "^3.0" 1374 | }, 1375 | "require-dev": { 1376 | "ext-dom": "*", 1377 | "phpunit/phpunit": "^8.0" 1378 | }, 1379 | "suggest": { 1380 | "ext-uopz": "*" 1381 | }, 1382 | "type": "library", 1383 | "extra": { 1384 | "branch-alias": { 1385 | "dev-master": "3.0-dev" 1386 | } 1387 | }, 1388 | "autoload": { 1389 | "classmap": [ 1390 | "src/" 1391 | ] 1392 | }, 1393 | "notification-url": "https://packagist.org/downloads/", 1394 | "license": [ 1395 | "BSD-3-Clause" 1396 | ], 1397 | "authors": [ 1398 | { 1399 | "name": "Sebastian Bergmann", 1400 | "email": "sebastian@phpunit.de" 1401 | } 1402 | ], 1403 | "description": "Snapshotting of global state", 1404 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1405 | "keywords": [ 1406 | "global state" 1407 | ], 1408 | "time": "2019-02-01T05:30:01+00:00" 1409 | }, 1410 | { 1411 | "name": "sebastian/object-enumerator", 1412 | "version": "3.0.3", 1413 | "source": { 1414 | "type": "git", 1415 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1416 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1417 | }, 1418 | "dist": { 1419 | "type": "zip", 1420 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1421 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1422 | "shasum": "" 1423 | }, 1424 | "require": { 1425 | "php": "^7.0", 1426 | "sebastian/object-reflector": "^1.1.1", 1427 | "sebastian/recursion-context": "^3.0" 1428 | }, 1429 | "require-dev": { 1430 | "phpunit/phpunit": "^6.0" 1431 | }, 1432 | "type": "library", 1433 | "extra": { 1434 | "branch-alias": { 1435 | "dev-master": "3.0.x-dev" 1436 | } 1437 | }, 1438 | "autoload": { 1439 | "classmap": [ 1440 | "src/" 1441 | ] 1442 | }, 1443 | "notification-url": "https://packagist.org/downloads/", 1444 | "license": [ 1445 | "BSD-3-Clause" 1446 | ], 1447 | "authors": [ 1448 | { 1449 | "name": "Sebastian Bergmann", 1450 | "email": "sebastian@phpunit.de" 1451 | } 1452 | ], 1453 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1454 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1455 | "time": "2017-08-03T12:35:26+00:00" 1456 | }, 1457 | { 1458 | "name": "sebastian/object-reflector", 1459 | "version": "1.1.1", 1460 | "source": { 1461 | "type": "git", 1462 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1463 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1464 | }, 1465 | "dist": { 1466 | "type": "zip", 1467 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1468 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1469 | "shasum": "" 1470 | }, 1471 | "require": { 1472 | "php": "^7.0" 1473 | }, 1474 | "require-dev": { 1475 | "phpunit/phpunit": "^6.0" 1476 | }, 1477 | "type": "library", 1478 | "extra": { 1479 | "branch-alias": { 1480 | "dev-master": "1.1-dev" 1481 | } 1482 | }, 1483 | "autoload": { 1484 | "classmap": [ 1485 | "src/" 1486 | ] 1487 | }, 1488 | "notification-url": "https://packagist.org/downloads/", 1489 | "license": [ 1490 | "BSD-3-Clause" 1491 | ], 1492 | "authors": [ 1493 | { 1494 | "name": "Sebastian Bergmann", 1495 | "email": "sebastian@phpunit.de" 1496 | } 1497 | ], 1498 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1499 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1500 | "time": "2017-03-29T09:07:27+00:00" 1501 | }, 1502 | { 1503 | "name": "sebastian/recursion-context", 1504 | "version": "3.0.0", 1505 | "source": { 1506 | "type": "git", 1507 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1508 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1509 | }, 1510 | "dist": { 1511 | "type": "zip", 1512 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1513 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1514 | "shasum": "" 1515 | }, 1516 | "require": { 1517 | "php": "^7.0" 1518 | }, 1519 | "require-dev": { 1520 | "phpunit/phpunit": "^6.0" 1521 | }, 1522 | "type": "library", 1523 | "extra": { 1524 | "branch-alias": { 1525 | "dev-master": "3.0.x-dev" 1526 | } 1527 | }, 1528 | "autoload": { 1529 | "classmap": [ 1530 | "src/" 1531 | ] 1532 | }, 1533 | "notification-url": "https://packagist.org/downloads/", 1534 | "license": [ 1535 | "BSD-3-Clause" 1536 | ], 1537 | "authors": [ 1538 | { 1539 | "name": "Jeff Welch", 1540 | "email": "whatthejeff@gmail.com" 1541 | }, 1542 | { 1543 | "name": "Sebastian Bergmann", 1544 | "email": "sebastian@phpunit.de" 1545 | }, 1546 | { 1547 | "name": "Adam Harvey", 1548 | "email": "aharvey@php.net" 1549 | } 1550 | ], 1551 | "description": "Provides functionality to recursively process PHP variables", 1552 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1553 | "time": "2017-03-03T06:23:57+00:00" 1554 | }, 1555 | { 1556 | "name": "sebastian/resource-operations", 1557 | "version": "2.0.1", 1558 | "source": { 1559 | "type": "git", 1560 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1561 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 1562 | }, 1563 | "dist": { 1564 | "type": "zip", 1565 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1566 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1567 | "shasum": "" 1568 | }, 1569 | "require": { 1570 | "php": "^7.1" 1571 | }, 1572 | "type": "library", 1573 | "extra": { 1574 | "branch-alias": { 1575 | "dev-master": "2.0-dev" 1576 | } 1577 | }, 1578 | "autoload": { 1579 | "classmap": [ 1580 | "src/" 1581 | ] 1582 | }, 1583 | "notification-url": "https://packagist.org/downloads/", 1584 | "license": [ 1585 | "BSD-3-Clause" 1586 | ], 1587 | "authors": [ 1588 | { 1589 | "name": "Sebastian Bergmann", 1590 | "email": "sebastian@phpunit.de" 1591 | } 1592 | ], 1593 | "description": "Provides a list of PHP built-in functions that operate on resources", 1594 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1595 | "time": "2018-10-04T04:07:39+00:00" 1596 | }, 1597 | { 1598 | "name": "sebastian/type", 1599 | "version": "1.1.3", 1600 | "source": { 1601 | "type": "git", 1602 | "url": "https://github.com/sebastianbergmann/type.git", 1603 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" 1604 | }, 1605 | "dist": { 1606 | "type": "zip", 1607 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", 1608 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", 1609 | "shasum": "" 1610 | }, 1611 | "require": { 1612 | "php": "^7.2" 1613 | }, 1614 | "require-dev": { 1615 | "phpunit/phpunit": "^8.2" 1616 | }, 1617 | "type": "library", 1618 | "extra": { 1619 | "branch-alias": { 1620 | "dev-master": "1.1-dev" 1621 | } 1622 | }, 1623 | "autoload": { 1624 | "classmap": [ 1625 | "src/" 1626 | ] 1627 | }, 1628 | "notification-url": "https://packagist.org/downloads/", 1629 | "license": [ 1630 | "BSD-3-Clause" 1631 | ], 1632 | "authors": [ 1633 | { 1634 | "name": "Sebastian Bergmann", 1635 | "role": "lead", 1636 | "email": "sebastian@phpunit.de" 1637 | } 1638 | ], 1639 | "description": "Collection of value objects that represent the types of the PHP type system", 1640 | "homepage": "https://github.com/sebastianbergmann/type", 1641 | "time": "2019-07-02T08:10:15+00:00" 1642 | }, 1643 | { 1644 | "name": "sebastian/version", 1645 | "version": "2.0.1", 1646 | "source": { 1647 | "type": "git", 1648 | "url": "https://github.com/sebastianbergmann/version.git", 1649 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1650 | }, 1651 | "dist": { 1652 | "type": "zip", 1653 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1654 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1655 | "shasum": "" 1656 | }, 1657 | "require": { 1658 | "php": ">=5.6" 1659 | }, 1660 | "type": "library", 1661 | "extra": { 1662 | "branch-alias": { 1663 | "dev-master": "2.0.x-dev" 1664 | } 1665 | }, 1666 | "autoload": { 1667 | "classmap": [ 1668 | "src/" 1669 | ] 1670 | }, 1671 | "notification-url": "https://packagist.org/downloads/", 1672 | "license": [ 1673 | "BSD-3-Clause" 1674 | ], 1675 | "authors": [ 1676 | { 1677 | "name": "Sebastian Bergmann", 1678 | "email": "sebastian@phpunit.de", 1679 | "role": "lead" 1680 | } 1681 | ], 1682 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1683 | "homepage": "https://github.com/sebastianbergmann/version", 1684 | "time": "2016-10-03T07:35:21+00:00" 1685 | }, 1686 | { 1687 | "name": "symfony/polyfill-ctype", 1688 | "version": "v1.12.0", 1689 | "source": { 1690 | "type": "git", 1691 | "url": "https://github.com/symfony/polyfill-ctype.git", 1692 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4" 1693 | }, 1694 | "dist": { 1695 | "type": "zip", 1696 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4", 1697 | "reference": "550ebaac289296ce228a706d0867afc34687e3f4", 1698 | "shasum": "" 1699 | }, 1700 | "require": { 1701 | "php": ">=5.3.3" 1702 | }, 1703 | "suggest": { 1704 | "ext-ctype": "For best performance" 1705 | }, 1706 | "type": "library", 1707 | "extra": { 1708 | "branch-alias": { 1709 | "dev-master": "1.12-dev" 1710 | } 1711 | }, 1712 | "autoload": { 1713 | "psr-4": { 1714 | "Symfony\\Polyfill\\Ctype\\": "" 1715 | }, 1716 | "files": [ 1717 | "bootstrap.php" 1718 | ] 1719 | }, 1720 | "notification-url": "https://packagist.org/downloads/", 1721 | "license": [ 1722 | "MIT" 1723 | ], 1724 | "authors": [ 1725 | { 1726 | "name": "Gert de Pagter", 1727 | "email": "BackEndTea@gmail.com" 1728 | }, 1729 | { 1730 | "name": "Symfony Community", 1731 | "homepage": "https://symfony.com/contributors" 1732 | } 1733 | ], 1734 | "description": "Symfony polyfill for ctype functions", 1735 | "homepage": "https://symfony.com", 1736 | "keywords": [ 1737 | "compatibility", 1738 | "ctype", 1739 | "polyfill", 1740 | "portable" 1741 | ], 1742 | "time": "2019-08-06T08:03:45+00:00" 1743 | }, 1744 | { 1745 | "name": "theseer/tokenizer", 1746 | "version": "1.1.3", 1747 | "source": { 1748 | "type": "git", 1749 | "url": "https://github.com/theseer/tokenizer.git", 1750 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 1751 | }, 1752 | "dist": { 1753 | "type": "zip", 1754 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 1755 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 1756 | "shasum": "" 1757 | }, 1758 | "require": { 1759 | "ext-dom": "*", 1760 | "ext-tokenizer": "*", 1761 | "ext-xmlwriter": "*", 1762 | "php": "^7.0" 1763 | }, 1764 | "type": "library", 1765 | "autoload": { 1766 | "classmap": [ 1767 | "src/" 1768 | ] 1769 | }, 1770 | "notification-url": "https://packagist.org/downloads/", 1771 | "license": [ 1772 | "BSD-3-Clause" 1773 | ], 1774 | "authors": [ 1775 | { 1776 | "name": "Arne Blankerts", 1777 | "role": "Developer", 1778 | "email": "arne@blankerts.de" 1779 | } 1780 | ], 1781 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1782 | "time": "2019-06-13T22:48:21+00:00" 1783 | }, 1784 | { 1785 | "name": "webmozart/assert", 1786 | "version": "1.5.0", 1787 | "source": { 1788 | "type": "git", 1789 | "url": "https://github.com/webmozart/assert.git", 1790 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" 1791 | }, 1792 | "dist": { 1793 | "type": "zip", 1794 | "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", 1795 | "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", 1796 | "shasum": "" 1797 | }, 1798 | "require": { 1799 | "php": "^5.3.3 || ^7.0", 1800 | "symfony/polyfill-ctype": "^1.8" 1801 | }, 1802 | "require-dev": { 1803 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 1804 | }, 1805 | "type": "library", 1806 | "extra": { 1807 | "branch-alias": { 1808 | "dev-master": "1.3-dev" 1809 | } 1810 | }, 1811 | "autoload": { 1812 | "psr-4": { 1813 | "Webmozart\\Assert\\": "src/" 1814 | } 1815 | }, 1816 | "notification-url": "https://packagist.org/downloads/", 1817 | "license": [ 1818 | "MIT" 1819 | ], 1820 | "authors": [ 1821 | { 1822 | "name": "Bernhard Schussek", 1823 | "email": "bschussek@gmail.com" 1824 | } 1825 | ], 1826 | "description": "Assertions to validate method input/output with nice error messages.", 1827 | "keywords": [ 1828 | "assert", 1829 | "check", 1830 | "validate" 1831 | ], 1832 | "time": "2019-08-24T08:43:50+00:00" 1833 | } 1834 | ], 1835 | "aliases": [], 1836 | "minimum-stability": "stable", 1837 | "stability-flags": [], 1838 | "prefer-stable": false, 1839 | "prefer-lowest": false, 1840 | "platform": [], 1841 | "platform-dev": [] 1842 | } 1843 | --------------------------------------------------------------------------------