├── .gitignore ├── src ├── exceptions │ └── CepPromiseException.php ├── interfaces │ ├── CepServiceInterface.php │ ├── CepValidatorInterface.php │ └── CepSanitizerInterface.php ├── ResponseAddress.php ├── CepValidator.php ├── services │ ├── ViaCepService.php │ ├── WideNetService.php │ └── CorreiosService.php ├── CepSanitizer.php └── CepPromise.php ├── .github └── workflows │ └── php.yml ├── tests ├── Services │ ├── ViaCepServiceTest.php │ ├── WideNetServiceTest.php │ └── CorreiosServiceTest.php ├── CepValidatorTest.php ├── CepSanitizerTest.php └── CepPromiseTest.php ├── composer.json ├── phpunit.xml ├── LICENSE ├── readme.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | vendor/* -------------------------------------------------------------------------------- /src/exceptions/CepPromiseException.php: -------------------------------------------------------------------------------- 1 | fetch('83322170'); 15 | 16 | $this->assertInstanceOf(ResponseAddress::class, $response); 17 | $this->assertEquals('Pinhais', $response->city); 18 | $this->assertEquals('PR', $response->state); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tests/Services/WideNetServiceTest.php: -------------------------------------------------------------------------------- 1 | fetch('83322170'); 15 | 16 | $this->assertInstanceOf(ResponseAddress::class, $response); 17 | $this->assertEquals('Pinhais', $response->city); 18 | $this->assertEquals('PR', $response->state); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tests/Services/CorreiosServiceTest.php: -------------------------------------------------------------------------------- 1 | fetch('83322170'); 15 | 16 | $this->assertInstanceOf(ResponseAddress::class, $response); 17 | $this->assertEquals('Pinhais', $response->city); 18 | $this->assertEquals('PR', $response->state); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/ResponseAddress.php: -------------------------------------------------------------------------------- 1 | cep = $cep; 16 | $this->street = $street; 17 | $this->neighborhood = $neighborhood; 18 | $this->city = $city; 19 | $this->state = $state; 20 | } 21 | 22 | public function __toString() 23 | { 24 | return json_encode([ 25 | 'street' => $this->street, 26 | 'neighborhood' => $this->neighborhood, 27 | 'cep' => $this->cep, 28 | 'city' => $this->city, 29 | 'state' => $this->state, 30 | ]); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "andersonef/cep-promise-php", 3 | "description": "Cópia do projeto filipedeschamps/cep-promise, porém em PHP. A idéia não é copiar fielmente a implementação, mas a funcionalidade afim de praticar apenas.", 4 | "type": "library", 5 | "require": { 6 | "guzzlehttp/guzzle": "^6.5" 7 | }, 8 | "require-dev": { 9 | "phpunit/phpunit": "^9" 10 | }, 11 | "autoload": { 12 | "classmap": [ 13 | "src/" 14 | ] 15 | }, 16 | "scripts": { 17 | "test": [ 18 | "phpunit" 19 | ], 20 | "post-package-update": [ 21 | "composer run-script test" 22 | ] 23 | }, 24 | "license": "MIT", 25 | "authors": [ 26 | { 27 | "name": "Anderson N Silva", 28 | "email": "anderson.nuneseth@gmail.com" 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | tests 14 | 15 | 16 | 17 | 18 | 19 | src 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /tests/CepValidatorTest.php: -------------------------------------------------------------------------------- 1 | expectException(CepPromiseException::class); 16 | $validator 17 | ->input($invalidInputCep) 18 | ->validateInputType(); 19 | } 20 | 21 | public function testItDoesValidForStringTypes() 22 | { 23 | $validator = new CepValidator(); 24 | 25 | $invalidInputCep = '65446545456464'; 26 | $validator 27 | ->input($invalidInputCep) 28 | ->validateInputType(); 29 | $this->assertTrue(true); 30 | } 31 | } -------------------------------------------------------------------------------- /src/CepValidator.php: -------------------------------------------------------------------------------- 1 | cep = $cep; 17 | 18 | return $this; 19 | } 20 | 21 | public function validateInputType(): CepValidatorInterface 22 | { 23 | if (!is_string($this->cep)) { 24 | throw new CepPromiseException('CEP must be a string.'); 25 | } 26 | 27 | return $this; 28 | } 29 | 30 | public function validateInputLength(): CepValidatorInterface 31 | { 32 | if (strlen($this->cep) != self::EXPECTED_CEP_LENGTH) { 33 | throw new CepPromiseException('Invalid cep length!'); 34 | } 35 | 36 | return $this; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/services/ViaCepService.php: -------------------------------------------------------------------------------- 1 | 'application/json;charset=UTF-8', 16 | 'cache-control' => 'no-cache', 17 | ]; 18 | $client = new Client(); 19 | $request = new Request('GET', 'https://viacep.com.br/ws/'.$cep.'/json/', $headers); 20 | $response = $client->send($request); 21 | $response = $response->getBody()->getContents(); 22 | $response = json_decode($response); 23 | 24 | return new ResponseAddress( 25 | $cep, 26 | $response->logradouro, 27 | $response->bairro, 28 | $response->localidade, 29 | $response->uf 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /tests/CepSanitizerTest.php: -------------------------------------------------------------------------------- 1 | input($invalidCep) 17 | ->removeSpecialCharacters() 18 | ->getSanitizedCep(); 19 | 20 | $this->assertEquals($expectedCEp, $obtainedCep); 21 | } 22 | 23 | public function testItDoesPaddingWithZeros() 24 | { 25 | $sanitizer = new CepSanitizer(); 26 | $invalidCep = '322170'; 27 | $expectedCEp = '00322170'; 28 | $obtainedCep = $sanitizer 29 | ->input($invalidCep) 30 | ->leftPadWithZeros() 31 | ->getSanitizedCep(); 32 | 33 | $this->assertEquals($expectedCEp, $obtainedCep); 34 | } 35 | } -------------------------------------------------------------------------------- /src/services/WideNetService.php: -------------------------------------------------------------------------------- 1 | 'application/json;charset=UTF-8', 16 | 'cache-control' => 'no-cache', 17 | ]; 18 | $client = new Client(); 19 | $request = new Request('GET', 'https://cep.widenet.host/busca-cep/api/cep/'.$cep.'.json', $headers); 20 | $response = $client->send($request); 21 | $response = $response->getBody()->getContents(); 22 | $response = json_decode($response); 23 | 24 | return new ResponseAddress( 25 | $cep, 26 | $response->address, 27 | $response->district, 28 | $response->city, 29 | $response->state 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Anderson Nunes 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/services/CorreiosService.php: -------------------------------------------------------------------------------- 1 | 'text/xml;charset=UTF-8', 17 | 'cache-control' => 'no-cache', 18 | ]; 19 | $body = ''.$cep.''; 20 | $client = new Client(); 21 | $request = new Request('POST', 'https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente', $headers, $body); 22 | $response = $client->send($request); 23 | $response = $response->getBody()->getContents(); 24 | 25 | $dom = new DOMDocument(); 26 | $dom->loadXML($response); 27 | 28 | return new ResponseAddress( 29 | $cep, 30 | $dom->getElementsByTagName('end')[0]->nodeValue, 31 | $dom->getElementsByTagName('bairro')[0]->nodeValue, 32 | $dom->getElementsByTagName('cidade')[0]->nodeValue, 33 | $dom->getElementsByTagName('uf')[0]->nodeValue 34 | ); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/CepSanitizer.php: -------------------------------------------------------------------------------- 1 | cep = $cep; 21 | 22 | return $this; 23 | } 24 | 25 | public function removeSpecialCharacters(): CepSanitizerInterface 26 | { 27 | try { 28 | $this->cep = preg_replace('/([^0-9])/', '', $this->cep); 29 | } catch (\Exception $e) { 30 | throw new CepPromiseException('Couldn\'t remove special chars from cep "'.$this->cep.'"', 0, $e); 31 | } 32 | 33 | $this->removedSpecialChars = true; 34 | 35 | return $this; 36 | } 37 | 38 | public function leftPadWithZeros(): CepSanitizerInterface 39 | { 40 | try { 41 | $this->cep = str_pad($this->cep, self::CEP_EXPECTED_LENGTH, '0', STR_PAD_LEFT); 42 | } catch (\Exception $e) { 43 | throw new CepPromiseException('Couldn\'t pad cep "'.$this->cep.'" with zeros', 0, $e); 44 | } 45 | $this->leftPaddedWithZeros = true; 46 | 47 | return $this; 48 | } 49 | 50 | public function getSanitizedCep() 51 | { 52 | if (!$this->removedSpecialChars) { 53 | $this->removeSpecialCharacters(); 54 | } 55 | if (!$this->leftPaddedWithZeros) { 56 | $this->leftPadWithZeros(); 57 | } 58 | 59 | return $this->cep; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /tests/CepPromiseTest.php: -------------------------------------------------------------------------------- 1 | fetch()->wait(); 17 | $this->assertInstanceOf(ResponseAddress::class, $response); 18 | $this->assertEquals('83322170', $response->cep); 19 | $this->assertEquals('PR', $response->state); 20 | } 21 | 22 | public function testItDoesLaunchTheCorrectTypeOfException() 23 | { 24 | $cep = '00000000'; 25 | $this->expectException(CepPromiseException::class); 26 | $response = (new CepPromise($cep))->fetch()->wait(); 27 | } 28 | 29 | public function testShouldThrowExceptionIfThereIsNoService() 30 | { 31 | $cep = '83322-170'; 32 | $this->expectException(CepPromiseException::class); 33 | $promiser = new CepPromise($cep); 34 | $promiser->clearServices(); 35 | $response = $promiser->fetch()->wait(); 36 | } 37 | 38 | public function testShouldAvoidFetchingInAllTheServices() 39 | { 40 | $cep = '83322-170'; 41 | $service1 = $this->createMock(CepServiceInterface::class); 42 | $service2 = $this->createMock(CepServiceInterface::class); 43 | $response = $this->createMock(ResponseAddress::class); 44 | 45 | 46 | $service1->expects($this->once())->method('fetch')->willReturn($response); 47 | $service2->expects($this->never())->method('fetch')->willReturn($response); 48 | 49 | $promise = new CepPromise($cep, null, null, $service1); 50 | $promise->appendCepService($service2); 51 | 52 | 53 | $response = $promise->fetch()->wait(); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/CepPromise.php: -------------------------------------------------------------------------------- 1 | rawCep = $rawCep; 34 | $this->cepSanitizer = $cepSanitizer ?? new CepSanitizer(); 35 | $this->cepValidator = $cepValidator ?? new CepValidator(); 36 | $this->cepServices = (count($cepServices) > 0) ? $cepServices : [ 37 | new CorreiosService(), 38 | // new ViaCepService(), 39 | // new WideNetService(), 40 | ]; 41 | } 42 | 43 | public function appendCepService(CepServiceInterface $cepService): CepPromise 44 | { 45 | $this->cepServices[] = $cepService; 46 | 47 | return $this; 48 | } 49 | 50 | public function clearServices(): CepPromise 51 | { 52 | $this->cepServices = []; 53 | 54 | return $this; 55 | } 56 | 57 | public function fetch(): Promise 58 | { 59 | if (count($this->cepServices) == 0) { 60 | throw new CepPromiseException('Empty service list.'); 61 | } 62 | $this->finalCep = $this 63 | ->cepSanitizer 64 | ->input($this->rawCep) 65 | ->removeSpecialCharacters() 66 | ->leftPadWithZeros() 67 | ->getSanitizedCep(); 68 | 69 | $this->cepValidator 70 | ->input($this->finalCep) 71 | ->validateInputLength() 72 | ->validateInputType(); 73 | 74 | $promises = []; 75 | $promise = null; 76 | foreach ($this->cepServices as $i => $service) { 77 | $promises[$i] = new Promise(function () use (&$promises, $service, $i) { 78 | try { 79 | $response = $service->fetch($this->finalCep); 80 | $promises[$i]->resolve($response); 81 | } catch (\Exception $e) { 82 | $promises[$i]->reject($e->getMessage()); 83 | 84 | return; 85 | } 86 | }); 87 | } 88 | 89 | return any($promises) 90 | ->then(function ($response) { 91 | return $response; 92 | }, function ($error) { 93 | throw new CepPromiseException('Couldn\'t fetch from any service!'.$error->getMessage()); 94 | }); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 |

CEP Promise

6 | Busca por CEP integrado diretamente aos serviços dos Correios, ViaCEP e WideNet. 7 | 8 | ## Descrição 9 | 10 | Essa biblioteca é uma cópia da original feita pelo Filipe Deschamps (Michel Teló) que achei a premissa bastante interessante e decidi copiá-la em PHP e Python. 11 | 12 | O estilo do código é outro, visto que o Filipe usa JS com uma abordagem funcional, já eu nesse projeto optei por utilizar orientação a objetos guiada por testes. 13 | 14 | ## Features 15 | 16 | * Sempre atualizado em tempo-real por se conectar diretamente aos serviços dos Correios, ViaCEP e WideNet. 17 | * Possui alta disponibilidade por usar vários serviços como fallback. 18 | * Sem limites de uso (rate limits) conhecidos. 19 | * 100% de code coverage com testes unitários e integração. 20 | 21 | ## Como Utilizar 22 | 23 | ### Instalação 24 | 25 | Instale via composer diretamente no bash com o comando: 26 | 27 | ```bash 28 | composer require andersonef/cep-promise-php 29 | ``` 30 | 31 | Ou modifique seu arquivo **composer.json** acrescentando a biblioteca nas dependências: 32 | 33 | ```json 34 | "require": { 35 | "andersonef/cep-promise-php": "^1.0.0" 36 | } 37 | ``` 38 | 39 | ### Utilização 40 | 41 | A utilização é bem simples: 42 | 43 | ```php 44 | $promise = (new CepPromise('83322170'))->fetch(); 45 | 46 | // ASSÍNCRONO: Com a promise em mãos, eu posso tanto: 47 | $promise->then(function($endereco) { 48 | // sua lógica aqui 49 | }); 50 | 51 | // SÍNCRONO: 52 | $endereco = $promise->wait(); 53 | 54 | /** Endereço: 55 | * { 56 | "cep": "83322170", 57 | "street": "Rua Rio Tocantins", 58 | "neighborhood": "Weissópolis", 59 | "city": "Pinhais", 60 | "state": "PR" 61 | } 62 | */ 63 | ``` 64 | 65 | O retorno será sempre um objeto do tipo **Andersonef\CepPromise\ResponseAddress**. 66 | 67 | ### Customizando 68 | 69 | Você pode criar novos serviços para fallback facilmente com essa biblioteca. 70 | 71 | Um serviço é qualquer classe que implemente a interface **Andersonef\CepPromise\Interfaces\ServiceInterface**, logo: 72 | 73 | ```php 74 | class CepFromDatabase implements ServiceInterface 75 | { 76 | public function fetch($cep): ResponseAddress 77 | { 78 | // .. your custom logic here 79 | $response = new ResponseAddress( 80 | $cep, 81 | $rua, 82 | $bairro, 83 | $cidade, 84 | $estado 85 | ); 86 | return $response; 87 | } 88 | } 89 | ``` 90 | 91 | Após criar seu service customizado, basta adicioná-lo à sua instância CepPromise, assim: 92 | 93 | ```php 94 | 95 | $cepFromDatabaseService = new CepFromDatabase(); 96 | $cepPromise = new CepPromise(); 97 | 98 | $endereco = $cepPromise 99 | ->clearServices() // OPCIONAL: elimina os services padrão (correios, viacep e widenet) 100 | ->appendService($cepFromDatabaseService) 101 | ->fetch('83322170'); // Agora a classe irá usar seu service customizado! 102 | ``` 103 | 104 | ## Tratando falhas 105 | 106 | Qualquer erro nessa biblioteca irá disparar uma exception do tipo **Andersonef\CepPromise\CepPromiseException**. 107 | 108 | ## Deixe suas sugestões 109 | 110 | Fique a vontade para deixar sugestões nas issues! 111 | 112 | ## Fonte 113 | 114 | Esse pacote foi inspirado no original https://github.com/filipedeschamps/cep-promise 115 | -------------------------------------------------------------------------------- /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": "a7f881de6d14975a9222f7b642d2f185", 8 | "packages": [ 9 | { 10 | "name": "guzzlehttp/guzzle", 11 | "version": "6.5.3", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/guzzle/guzzle.git", 15 | "reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/aab4ebd862aa7d04f01a4b51849d657db56d882e", 20 | "reference": "aab4ebd862aa7d04f01a4b51849d657db56d882e", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-json": "*", 25 | "guzzlehttp/promises": "^1.0", 26 | "guzzlehttp/psr7": "^1.6.1", 27 | "php": ">=5.5", 28 | "symfony/polyfill-intl-idn": "^1.11" 29 | }, 30 | "require-dev": { 31 | "ext-curl": "*", 32 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", 33 | "psr/log": "^1.1" 34 | }, 35 | "suggest": { 36 | "psr/log": "Required for using the Log middleware" 37 | }, 38 | "type": "library", 39 | "extra": { 40 | "branch-alias": { 41 | "dev-master": "6.5-dev" 42 | } 43 | }, 44 | "autoload": { 45 | "psr-4": { 46 | "GuzzleHttp\\": "src/" 47 | }, 48 | "files": [ 49 | "src/functions_include.php" 50 | ] 51 | }, 52 | "notification-url": "https://packagist.org/downloads/", 53 | "license": [ 54 | "MIT" 55 | ], 56 | "authors": [ 57 | { 58 | "name": "Michael Dowling", 59 | "email": "mtdowling@gmail.com", 60 | "homepage": "https://github.com/mtdowling" 61 | } 62 | ], 63 | "description": "Guzzle is a PHP HTTP client library", 64 | "homepage": "http://guzzlephp.org/", 65 | "keywords": [ 66 | "client", 67 | "curl", 68 | "framework", 69 | "http", 70 | "http client", 71 | "rest", 72 | "web service" 73 | ], 74 | "time": "2020-04-18T10:38:46+00:00" 75 | }, 76 | { 77 | "name": "guzzlehttp/promises", 78 | "version": "v1.3.1", 79 | "source": { 80 | "type": "git", 81 | "url": "https://github.com/guzzle/promises.git", 82 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 83 | }, 84 | "dist": { 85 | "type": "zip", 86 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 87 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 88 | "shasum": "" 89 | }, 90 | "require": { 91 | "php": ">=5.5.0" 92 | }, 93 | "require-dev": { 94 | "phpunit/phpunit": "^4.0" 95 | }, 96 | "type": "library", 97 | "extra": { 98 | "branch-alias": { 99 | "dev-master": "1.4-dev" 100 | } 101 | }, 102 | "autoload": { 103 | "psr-4": { 104 | "GuzzleHttp\\Promise\\": "src/" 105 | }, 106 | "files": [ 107 | "src/functions_include.php" 108 | ] 109 | }, 110 | "notification-url": "https://packagist.org/downloads/", 111 | "license": [ 112 | "MIT" 113 | ], 114 | "authors": [ 115 | { 116 | "name": "Michael Dowling", 117 | "email": "mtdowling@gmail.com", 118 | "homepage": "https://github.com/mtdowling" 119 | } 120 | ], 121 | "description": "Guzzle promises library", 122 | "keywords": [ 123 | "promise" 124 | ], 125 | "time": "2016-12-20T10:07:11+00:00" 126 | }, 127 | { 128 | "name": "guzzlehttp/psr7", 129 | "version": "1.6.1", 130 | "source": { 131 | "type": "git", 132 | "url": "https://github.com/guzzle/psr7.git", 133 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a" 134 | }, 135 | "dist": { 136 | "type": "zip", 137 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", 138 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a", 139 | "shasum": "" 140 | }, 141 | "require": { 142 | "php": ">=5.4.0", 143 | "psr/http-message": "~1.0", 144 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 145 | }, 146 | "provide": { 147 | "psr/http-message-implementation": "1.0" 148 | }, 149 | "require-dev": { 150 | "ext-zlib": "*", 151 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" 152 | }, 153 | "suggest": { 154 | "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" 155 | }, 156 | "type": "library", 157 | "extra": { 158 | "branch-alias": { 159 | "dev-master": "1.6-dev" 160 | } 161 | }, 162 | "autoload": { 163 | "psr-4": { 164 | "GuzzleHttp\\Psr7\\": "src/" 165 | }, 166 | "files": [ 167 | "src/functions_include.php" 168 | ] 169 | }, 170 | "notification-url": "https://packagist.org/downloads/", 171 | "license": [ 172 | "MIT" 173 | ], 174 | "authors": [ 175 | { 176 | "name": "Michael Dowling", 177 | "email": "mtdowling@gmail.com", 178 | "homepage": "https://github.com/mtdowling" 179 | }, 180 | { 181 | "name": "Tobias Schultze", 182 | "homepage": "https://github.com/Tobion" 183 | } 184 | ], 185 | "description": "PSR-7 message implementation that also provides common utility methods", 186 | "keywords": [ 187 | "http", 188 | "message", 189 | "psr-7", 190 | "request", 191 | "response", 192 | "stream", 193 | "uri", 194 | "url" 195 | ], 196 | "time": "2019-07-01T23:21:34+00:00" 197 | }, 198 | { 199 | "name": "psr/http-message", 200 | "version": "1.0.1", 201 | "source": { 202 | "type": "git", 203 | "url": "https://github.com/php-fig/http-message.git", 204 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 205 | }, 206 | "dist": { 207 | "type": "zip", 208 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 209 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 210 | "shasum": "" 211 | }, 212 | "require": { 213 | "php": ">=5.3.0" 214 | }, 215 | "type": "library", 216 | "extra": { 217 | "branch-alias": { 218 | "dev-master": "1.0.x-dev" 219 | } 220 | }, 221 | "autoload": { 222 | "psr-4": { 223 | "Psr\\Http\\Message\\": "src/" 224 | } 225 | }, 226 | "notification-url": "https://packagist.org/downloads/", 227 | "license": [ 228 | "MIT" 229 | ], 230 | "authors": [ 231 | { 232 | "name": "PHP-FIG", 233 | "homepage": "http://www.php-fig.org/" 234 | } 235 | ], 236 | "description": "Common interface for HTTP messages", 237 | "homepage": "https://github.com/php-fig/http-message", 238 | "keywords": [ 239 | "http", 240 | "http-message", 241 | "psr", 242 | "psr-7", 243 | "request", 244 | "response" 245 | ], 246 | "time": "2016-08-06T14:39:51+00:00" 247 | }, 248 | { 249 | "name": "ralouphie/getallheaders", 250 | "version": "3.0.3", 251 | "source": { 252 | "type": "git", 253 | "url": "https://github.com/ralouphie/getallheaders.git", 254 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 255 | }, 256 | "dist": { 257 | "type": "zip", 258 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 259 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 260 | "shasum": "" 261 | }, 262 | "require": { 263 | "php": ">=5.6" 264 | }, 265 | "require-dev": { 266 | "php-coveralls/php-coveralls": "^2.1", 267 | "phpunit/phpunit": "^5 || ^6.5" 268 | }, 269 | "type": "library", 270 | "autoload": { 271 | "files": [ 272 | "src/getallheaders.php" 273 | ] 274 | }, 275 | "notification-url": "https://packagist.org/downloads/", 276 | "license": [ 277 | "MIT" 278 | ], 279 | "authors": [ 280 | { 281 | "name": "Ralph Khattar", 282 | "email": "ralph.khattar@gmail.com" 283 | } 284 | ], 285 | "description": "A polyfill for getallheaders.", 286 | "time": "2019-03-08T08:55:37+00:00" 287 | }, 288 | { 289 | "name": "symfony/polyfill-intl-idn", 290 | "version": "v1.15.0", 291 | "source": { 292 | "type": "git", 293 | "url": "https://github.com/symfony/polyfill-intl-idn.git", 294 | "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf" 295 | }, 296 | "dist": { 297 | "type": "zip", 298 | "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", 299 | "reference": "47bd6aa45beb1cd7c6a16b7d1810133b728bdfcf", 300 | "shasum": "" 301 | }, 302 | "require": { 303 | "php": ">=5.3.3", 304 | "symfony/polyfill-mbstring": "^1.3", 305 | "symfony/polyfill-php72": "^1.10" 306 | }, 307 | "suggest": { 308 | "ext-intl": "For best performance" 309 | }, 310 | "type": "library", 311 | "extra": { 312 | "branch-alias": { 313 | "dev-master": "1.15-dev" 314 | } 315 | }, 316 | "autoload": { 317 | "psr-4": { 318 | "Symfony\\Polyfill\\Intl\\Idn\\": "" 319 | }, 320 | "files": [ 321 | "bootstrap.php" 322 | ] 323 | }, 324 | "notification-url": "https://packagist.org/downloads/", 325 | "license": [ 326 | "MIT" 327 | ], 328 | "authors": [ 329 | { 330 | "name": "Laurent Bassin", 331 | "email": "laurent@bassin.info" 332 | }, 333 | { 334 | "name": "Symfony Community", 335 | "homepage": "https://symfony.com/contributors" 336 | } 337 | ], 338 | "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", 339 | "homepage": "https://symfony.com", 340 | "keywords": [ 341 | "compatibility", 342 | "idn", 343 | "intl", 344 | "polyfill", 345 | "portable", 346 | "shim" 347 | ], 348 | "time": "2020-03-09T19:04:49+00:00" 349 | }, 350 | { 351 | "name": "symfony/polyfill-mbstring", 352 | "version": "v1.15.0", 353 | "source": { 354 | "type": "git", 355 | "url": "https://github.com/symfony/polyfill-mbstring.git", 356 | "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac" 357 | }, 358 | "dist": { 359 | "type": "zip", 360 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac", 361 | "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac", 362 | "shasum": "" 363 | }, 364 | "require": { 365 | "php": ">=5.3.3" 366 | }, 367 | "suggest": { 368 | "ext-mbstring": "For best performance" 369 | }, 370 | "type": "library", 371 | "extra": { 372 | "branch-alias": { 373 | "dev-master": "1.15-dev" 374 | } 375 | }, 376 | "autoload": { 377 | "psr-4": { 378 | "Symfony\\Polyfill\\Mbstring\\": "" 379 | }, 380 | "files": [ 381 | "bootstrap.php" 382 | ] 383 | }, 384 | "notification-url": "https://packagist.org/downloads/", 385 | "license": [ 386 | "MIT" 387 | ], 388 | "authors": [ 389 | { 390 | "name": "Nicolas Grekas", 391 | "email": "p@tchwork.com" 392 | }, 393 | { 394 | "name": "Symfony Community", 395 | "homepage": "https://symfony.com/contributors" 396 | } 397 | ], 398 | "description": "Symfony polyfill for the Mbstring extension", 399 | "homepage": "https://symfony.com", 400 | "keywords": [ 401 | "compatibility", 402 | "mbstring", 403 | "polyfill", 404 | "portable", 405 | "shim" 406 | ], 407 | "time": "2020-03-09T19:04:49+00:00" 408 | }, 409 | { 410 | "name": "symfony/polyfill-php72", 411 | "version": "v1.15.0", 412 | "source": { 413 | "type": "git", 414 | "url": "https://github.com/symfony/polyfill-php72.git", 415 | "reference": "37b0976c78b94856543260ce09b460a7bc852747" 416 | }, 417 | "dist": { 418 | "type": "zip", 419 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747", 420 | "reference": "37b0976c78b94856543260ce09b460a7bc852747", 421 | "shasum": "" 422 | }, 423 | "require": { 424 | "php": ">=5.3.3" 425 | }, 426 | "type": "library", 427 | "extra": { 428 | "branch-alias": { 429 | "dev-master": "1.15-dev" 430 | } 431 | }, 432 | "autoload": { 433 | "psr-4": { 434 | "Symfony\\Polyfill\\Php72\\": "" 435 | }, 436 | "files": [ 437 | "bootstrap.php" 438 | ] 439 | }, 440 | "notification-url": "https://packagist.org/downloads/", 441 | "license": [ 442 | "MIT" 443 | ], 444 | "authors": [ 445 | { 446 | "name": "Nicolas Grekas", 447 | "email": "p@tchwork.com" 448 | }, 449 | { 450 | "name": "Symfony Community", 451 | "homepage": "https://symfony.com/contributors" 452 | } 453 | ], 454 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 455 | "homepage": "https://symfony.com", 456 | "keywords": [ 457 | "compatibility", 458 | "polyfill", 459 | "portable", 460 | "shim" 461 | ], 462 | "time": "2020-02-27T09:26:54+00:00" 463 | } 464 | ], 465 | "packages-dev": [ 466 | { 467 | "name": "doctrine/instantiator", 468 | "version": "1.3.0", 469 | "source": { 470 | "type": "git", 471 | "url": "https://github.com/doctrine/instantiator.git", 472 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" 473 | }, 474 | "dist": { 475 | "type": "zip", 476 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", 477 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", 478 | "shasum": "" 479 | }, 480 | "require": { 481 | "php": "^7.1" 482 | }, 483 | "require-dev": { 484 | "doctrine/coding-standard": "^6.0", 485 | "ext-pdo": "*", 486 | "ext-phar": "*", 487 | "phpbench/phpbench": "^0.13", 488 | "phpstan/phpstan-phpunit": "^0.11", 489 | "phpstan/phpstan-shim": "^0.11", 490 | "phpunit/phpunit": "^7.0" 491 | }, 492 | "type": "library", 493 | "extra": { 494 | "branch-alias": { 495 | "dev-master": "1.2.x-dev" 496 | } 497 | }, 498 | "autoload": { 499 | "psr-4": { 500 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 501 | } 502 | }, 503 | "notification-url": "https://packagist.org/downloads/", 504 | "license": [ 505 | "MIT" 506 | ], 507 | "authors": [ 508 | { 509 | "name": "Marco Pivetta", 510 | "email": "ocramius@gmail.com", 511 | "homepage": "http://ocramius.github.com/" 512 | } 513 | ], 514 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 515 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 516 | "keywords": [ 517 | "constructor", 518 | "instantiate" 519 | ], 520 | "time": "2019-10-21T16:45:58+00:00" 521 | }, 522 | { 523 | "name": "myclabs/deep-copy", 524 | "version": "1.9.5", 525 | "source": { 526 | "type": "git", 527 | "url": "https://github.com/myclabs/DeepCopy.git", 528 | "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef" 529 | }, 530 | "dist": { 531 | "type": "zip", 532 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef", 533 | "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef", 534 | "shasum": "" 535 | }, 536 | "require": { 537 | "php": "^7.1" 538 | }, 539 | "replace": { 540 | "myclabs/deep-copy": "self.version" 541 | }, 542 | "require-dev": { 543 | "doctrine/collections": "^1.0", 544 | "doctrine/common": "^2.6", 545 | "phpunit/phpunit": "^7.1" 546 | }, 547 | "type": "library", 548 | "autoload": { 549 | "psr-4": { 550 | "DeepCopy\\": "src/DeepCopy/" 551 | }, 552 | "files": [ 553 | "src/DeepCopy/deep_copy.php" 554 | ] 555 | }, 556 | "notification-url": "https://packagist.org/downloads/", 557 | "license": [ 558 | "MIT" 559 | ], 560 | "description": "Create deep copies (clones) of your objects", 561 | "keywords": [ 562 | "clone", 563 | "copy", 564 | "duplicate", 565 | "object", 566 | "object graph" 567 | ], 568 | "time": "2020-01-17T21:11:47+00:00" 569 | }, 570 | { 571 | "name": "phar-io/manifest", 572 | "version": "1.0.3", 573 | "source": { 574 | "type": "git", 575 | "url": "https://github.com/phar-io/manifest.git", 576 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 577 | }, 578 | "dist": { 579 | "type": "zip", 580 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 581 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 582 | "shasum": "" 583 | }, 584 | "require": { 585 | "ext-dom": "*", 586 | "ext-phar": "*", 587 | "phar-io/version": "^2.0", 588 | "php": "^5.6 || ^7.0" 589 | }, 590 | "type": "library", 591 | "extra": { 592 | "branch-alias": { 593 | "dev-master": "1.0.x-dev" 594 | } 595 | }, 596 | "autoload": { 597 | "classmap": [ 598 | "src/" 599 | ] 600 | }, 601 | "notification-url": "https://packagist.org/downloads/", 602 | "license": [ 603 | "BSD-3-Clause" 604 | ], 605 | "authors": [ 606 | { 607 | "name": "Arne Blankerts", 608 | "email": "arne@blankerts.de", 609 | "role": "Developer" 610 | }, 611 | { 612 | "name": "Sebastian Heuer", 613 | "email": "sebastian@phpeople.de", 614 | "role": "Developer" 615 | }, 616 | { 617 | "name": "Sebastian Bergmann", 618 | "email": "sebastian@phpunit.de", 619 | "role": "Developer" 620 | } 621 | ], 622 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 623 | "time": "2018-07-08T19:23:20+00:00" 624 | }, 625 | { 626 | "name": "phar-io/version", 627 | "version": "2.0.1", 628 | "source": { 629 | "type": "git", 630 | "url": "https://github.com/phar-io/version.git", 631 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 632 | }, 633 | "dist": { 634 | "type": "zip", 635 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 636 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 637 | "shasum": "" 638 | }, 639 | "require": { 640 | "php": "^5.6 || ^7.0" 641 | }, 642 | "type": "library", 643 | "autoload": { 644 | "classmap": [ 645 | "src/" 646 | ] 647 | }, 648 | "notification-url": "https://packagist.org/downloads/", 649 | "license": [ 650 | "BSD-3-Clause" 651 | ], 652 | "authors": [ 653 | { 654 | "name": "Arne Blankerts", 655 | "email": "arne@blankerts.de", 656 | "role": "Developer" 657 | }, 658 | { 659 | "name": "Sebastian Heuer", 660 | "email": "sebastian@phpeople.de", 661 | "role": "Developer" 662 | }, 663 | { 664 | "name": "Sebastian Bergmann", 665 | "email": "sebastian@phpunit.de", 666 | "role": "Developer" 667 | } 668 | ], 669 | "description": "Library for handling version information and constraints", 670 | "time": "2018-07-08T19:19:57+00:00" 671 | }, 672 | { 673 | "name": "phpdocumentor/reflection-common", 674 | "version": "2.1.0", 675 | "source": { 676 | "type": "git", 677 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 678 | "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b" 679 | }, 680 | "dist": { 681 | "type": "zip", 682 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/6568f4687e5b41b054365f9ae03fcb1ed5f2069b", 683 | "reference": "6568f4687e5b41b054365f9ae03fcb1ed5f2069b", 684 | "shasum": "" 685 | }, 686 | "require": { 687 | "php": ">=7.1" 688 | }, 689 | "type": "library", 690 | "extra": { 691 | "branch-alias": { 692 | "dev-master": "2.x-dev" 693 | } 694 | }, 695 | "autoload": { 696 | "psr-4": { 697 | "phpDocumentor\\Reflection\\": "src/" 698 | } 699 | }, 700 | "notification-url": "https://packagist.org/downloads/", 701 | "license": [ 702 | "MIT" 703 | ], 704 | "authors": [ 705 | { 706 | "name": "Jaap van Otterdijk", 707 | "email": "opensource@ijaap.nl" 708 | } 709 | ], 710 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 711 | "homepage": "http://www.phpdoc.org", 712 | "keywords": [ 713 | "FQSEN", 714 | "phpDocumentor", 715 | "phpdoc", 716 | "reflection", 717 | "static analysis" 718 | ], 719 | "time": "2020-04-27T09:25:28+00:00" 720 | }, 721 | { 722 | "name": "phpdocumentor/reflection-docblock", 723 | "version": "5.1.0", 724 | "source": { 725 | "type": "git", 726 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 727 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" 728 | }, 729 | "dist": { 730 | "type": "zip", 731 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", 732 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", 733 | "shasum": "" 734 | }, 735 | "require": { 736 | "ext-filter": "^7.1", 737 | "php": "^7.2", 738 | "phpdocumentor/reflection-common": "^2.0", 739 | "phpdocumentor/type-resolver": "^1.0", 740 | "webmozart/assert": "^1" 741 | }, 742 | "require-dev": { 743 | "doctrine/instantiator": "^1", 744 | "mockery/mockery": "^1" 745 | }, 746 | "type": "library", 747 | "extra": { 748 | "branch-alias": { 749 | "dev-master": "5.x-dev" 750 | } 751 | }, 752 | "autoload": { 753 | "psr-4": { 754 | "phpDocumentor\\Reflection\\": "src" 755 | } 756 | }, 757 | "notification-url": "https://packagist.org/downloads/", 758 | "license": [ 759 | "MIT" 760 | ], 761 | "authors": [ 762 | { 763 | "name": "Mike van Riel", 764 | "email": "me@mikevanriel.com" 765 | }, 766 | { 767 | "name": "Jaap van Otterdijk", 768 | "email": "account@ijaap.nl" 769 | } 770 | ], 771 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 772 | "time": "2020-02-22T12:28:44+00:00" 773 | }, 774 | { 775 | "name": "phpdocumentor/type-resolver", 776 | "version": "1.1.0", 777 | "source": { 778 | "type": "git", 779 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 780 | "reference": "7462d5f123dfc080dfdf26897032a6513644fc95" 781 | }, 782 | "dist": { 783 | "type": "zip", 784 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95", 785 | "reference": "7462d5f123dfc080dfdf26897032a6513644fc95", 786 | "shasum": "" 787 | }, 788 | "require": { 789 | "php": "^7.2", 790 | "phpdocumentor/reflection-common": "^2.0" 791 | }, 792 | "require-dev": { 793 | "ext-tokenizer": "^7.2", 794 | "mockery/mockery": "~1" 795 | }, 796 | "type": "library", 797 | "extra": { 798 | "branch-alias": { 799 | "dev-master": "1.x-dev" 800 | } 801 | }, 802 | "autoload": { 803 | "psr-4": { 804 | "phpDocumentor\\Reflection\\": "src" 805 | } 806 | }, 807 | "notification-url": "https://packagist.org/downloads/", 808 | "license": [ 809 | "MIT" 810 | ], 811 | "authors": [ 812 | { 813 | "name": "Mike van Riel", 814 | "email": "me@mikevanriel.com" 815 | } 816 | ], 817 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 818 | "time": "2020-02-18T18:59:58+00:00" 819 | }, 820 | { 821 | "name": "phpspec/prophecy", 822 | "version": "v1.10.3", 823 | "source": { 824 | "type": "git", 825 | "url": "https://github.com/phpspec/prophecy.git", 826 | "reference": "451c3cd1418cf640de218914901e51b064abb093" 827 | }, 828 | "dist": { 829 | "type": "zip", 830 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", 831 | "reference": "451c3cd1418cf640de218914901e51b064abb093", 832 | "shasum": "" 833 | }, 834 | "require": { 835 | "doctrine/instantiator": "^1.0.2", 836 | "php": "^5.3|^7.0", 837 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", 838 | "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", 839 | "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" 840 | }, 841 | "require-dev": { 842 | "phpspec/phpspec": "^2.5 || ^3.2", 843 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 844 | }, 845 | "type": "library", 846 | "extra": { 847 | "branch-alias": { 848 | "dev-master": "1.10.x-dev" 849 | } 850 | }, 851 | "autoload": { 852 | "psr-4": { 853 | "Prophecy\\": "src/Prophecy" 854 | } 855 | }, 856 | "notification-url": "https://packagist.org/downloads/", 857 | "license": [ 858 | "MIT" 859 | ], 860 | "authors": [ 861 | { 862 | "name": "Konstantin Kudryashov", 863 | "email": "ever.zet@gmail.com", 864 | "homepage": "http://everzet.com" 865 | }, 866 | { 867 | "name": "Marcello Duarte", 868 | "email": "marcello.duarte@gmail.com" 869 | } 870 | ], 871 | "description": "Highly opinionated mocking framework for PHP 5.3+", 872 | "homepage": "https://github.com/phpspec/prophecy", 873 | "keywords": [ 874 | "Double", 875 | "Dummy", 876 | "fake", 877 | "mock", 878 | "spy", 879 | "stub" 880 | ], 881 | "time": "2020-03-05T15:02:03+00:00" 882 | }, 883 | { 884 | "name": "phpunit/php-code-coverage", 885 | "version": "8.0.1", 886 | "source": { 887 | "type": "git", 888 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 889 | "reference": "31e94ccc084025d6abee0585df533eb3a792b96a" 890 | }, 891 | "dist": { 892 | "type": "zip", 893 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/31e94ccc084025d6abee0585df533eb3a792b96a", 894 | "reference": "31e94ccc084025d6abee0585df533eb3a792b96a", 895 | "shasum": "" 896 | }, 897 | "require": { 898 | "ext-dom": "*", 899 | "ext-xmlwriter": "*", 900 | "php": "^7.3", 901 | "phpunit/php-file-iterator": "^3.0", 902 | "phpunit/php-text-template": "^2.0", 903 | "phpunit/php-token-stream": "^4.0", 904 | "sebastian/code-unit-reverse-lookup": "^2.0", 905 | "sebastian/environment": "^5.0", 906 | "sebastian/version": "^3.0", 907 | "theseer/tokenizer": "^1.1.3" 908 | }, 909 | "require-dev": { 910 | "phpunit/phpunit": "^9.0" 911 | }, 912 | "suggest": { 913 | "ext-pcov": "*", 914 | "ext-xdebug": "*" 915 | }, 916 | "type": "library", 917 | "extra": { 918 | "branch-alias": { 919 | "dev-master": "8.0-dev" 920 | } 921 | }, 922 | "autoload": { 923 | "classmap": [ 924 | "src/" 925 | ] 926 | }, 927 | "notification-url": "https://packagist.org/downloads/", 928 | "license": [ 929 | "BSD-3-Clause" 930 | ], 931 | "authors": [ 932 | { 933 | "name": "Sebastian Bergmann", 934 | "email": "sebastian@phpunit.de", 935 | "role": "lead" 936 | } 937 | ], 938 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 939 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 940 | "keywords": [ 941 | "coverage", 942 | "testing", 943 | "xunit" 944 | ], 945 | "time": "2020-02-19T13:41:19+00:00" 946 | }, 947 | { 948 | "name": "phpunit/php-file-iterator", 949 | "version": "3.0.1", 950 | "source": { 951 | "type": "git", 952 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 953 | "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4" 954 | }, 955 | "dist": { 956 | "type": "zip", 957 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4", 958 | "reference": "4ac5b3e13df14829daa60a2eb4fdd2f2b7d33cf4", 959 | "shasum": "" 960 | }, 961 | "require": { 962 | "php": "^7.3" 963 | }, 964 | "require-dev": { 965 | "phpunit/phpunit": "^9.0" 966 | }, 967 | "type": "library", 968 | "extra": { 969 | "branch-alias": { 970 | "dev-master": "3.0-dev" 971 | } 972 | }, 973 | "autoload": { 974 | "classmap": [ 975 | "src/" 976 | ] 977 | }, 978 | "notification-url": "https://packagist.org/downloads/", 979 | "license": [ 980 | "BSD-3-Clause" 981 | ], 982 | "authors": [ 983 | { 984 | "name": "Sebastian Bergmann", 985 | "email": "sebastian@phpunit.de", 986 | "role": "lead" 987 | } 988 | ], 989 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 990 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 991 | "keywords": [ 992 | "filesystem", 993 | "iterator" 994 | ], 995 | "time": "2020-04-18T05:02:12+00:00" 996 | }, 997 | { 998 | "name": "phpunit/php-invoker", 999 | "version": "3.0.0", 1000 | "source": { 1001 | "type": "git", 1002 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1003 | "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a" 1004 | }, 1005 | "dist": { 1006 | "type": "zip", 1007 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/7579d5a1ba7f3ac11c80004d205877911315ae7a", 1008 | "reference": "7579d5a1ba7f3ac11c80004d205877911315ae7a", 1009 | "shasum": "" 1010 | }, 1011 | "require": { 1012 | "php": "^7.3" 1013 | }, 1014 | "require-dev": { 1015 | "ext-pcntl": "*", 1016 | "phpunit/phpunit": "^9.0" 1017 | }, 1018 | "suggest": { 1019 | "ext-pcntl": "*" 1020 | }, 1021 | "type": "library", 1022 | "extra": { 1023 | "branch-alias": { 1024 | "dev-master": "3.0-dev" 1025 | } 1026 | }, 1027 | "autoload": { 1028 | "classmap": [ 1029 | "src/" 1030 | ] 1031 | }, 1032 | "notification-url": "https://packagist.org/downloads/", 1033 | "license": [ 1034 | "BSD-3-Clause" 1035 | ], 1036 | "authors": [ 1037 | { 1038 | "name": "Sebastian Bergmann", 1039 | "email": "sebastian@phpunit.de", 1040 | "role": "lead" 1041 | } 1042 | ], 1043 | "description": "Invoke callables with a timeout", 1044 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1045 | "keywords": [ 1046 | "process" 1047 | ], 1048 | "time": "2020-02-07T06:06:11+00:00" 1049 | }, 1050 | { 1051 | "name": "phpunit/php-text-template", 1052 | "version": "2.0.0", 1053 | "source": { 1054 | "type": "git", 1055 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1056 | "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346" 1057 | }, 1058 | "dist": { 1059 | "type": "zip", 1060 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/526dc996cc0ebdfa428cd2dfccd79b7b53fee346", 1061 | "reference": "526dc996cc0ebdfa428cd2dfccd79b7b53fee346", 1062 | "shasum": "" 1063 | }, 1064 | "require": { 1065 | "php": "^7.3" 1066 | }, 1067 | "type": "library", 1068 | "extra": { 1069 | "branch-alias": { 1070 | "dev-master": "2.0-dev" 1071 | } 1072 | }, 1073 | "autoload": { 1074 | "classmap": [ 1075 | "src/" 1076 | ] 1077 | }, 1078 | "notification-url": "https://packagist.org/downloads/", 1079 | "license": [ 1080 | "BSD-3-Clause" 1081 | ], 1082 | "authors": [ 1083 | { 1084 | "name": "Sebastian Bergmann", 1085 | "email": "sebastian@phpunit.de", 1086 | "role": "lead" 1087 | } 1088 | ], 1089 | "description": "Simple template engine.", 1090 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1091 | "keywords": [ 1092 | "template" 1093 | ], 1094 | "time": "2020-02-01T07:43:44+00:00" 1095 | }, 1096 | { 1097 | "name": "phpunit/php-timer", 1098 | "version": "3.1.4", 1099 | "source": { 1100 | "type": "git", 1101 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1102 | "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258" 1103 | }, 1104 | "dist": { 1105 | "type": "zip", 1106 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/dc9368fae6ef2ffa57eba80a7410bcef81df6258", 1107 | "reference": "dc9368fae6ef2ffa57eba80a7410bcef81df6258", 1108 | "shasum": "" 1109 | }, 1110 | "require": { 1111 | "php": "^7.3" 1112 | }, 1113 | "require-dev": { 1114 | "phpunit/phpunit": "^9.0" 1115 | }, 1116 | "type": "library", 1117 | "extra": { 1118 | "branch-alias": { 1119 | "dev-master": "3.1-dev" 1120 | } 1121 | }, 1122 | "autoload": { 1123 | "classmap": [ 1124 | "src/" 1125 | ] 1126 | }, 1127 | "notification-url": "https://packagist.org/downloads/", 1128 | "license": [ 1129 | "BSD-3-Clause" 1130 | ], 1131 | "authors": [ 1132 | { 1133 | "name": "Sebastian Bergmann", 1134 | "email": "sebastian@phpunit.de", 1135 | "role": "lead" 1136 | } 1137 | ], 1138 | "description": "Utility class for timing", 1139 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1140 | "keywords": [ 1141 | "timer" 1142 | ], 1143 | "time": "2020-04-20T06:00:37+00:00" 1144 | }, 1145 | { 1146 | "name": "phpunit/php-token-stream", 1147 | "version": "4.0.1", 1148 | "source": { 1149 | "type": "git", 1150 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1151 | "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c" 1152 | }, 1153 | "dist": { 1154 | "type": "zip", 1155 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c", 1156 | "reference": "cdc0db5aed8fbfaf475fbd95bfd7bab83c7a779c", 1157 | "shasum": "" 1158 | }, 1159 | "require": { 1160 | "ext-tokenizer": "*", 1161 | "php": "^7.3" 1162 | }, 1163 | "require-dev": { 1164 | "phpunit/phpunit": "^9.0" 1165 | }, 1166 | "type": "library", 1167 | "extra": { 1168 | "branch-alias": { 1169 | "dev-master": "4.0-dev" 1170 | } 1171 | }, 1172 | "autoload": { 1173 | "classmap": [ 1174 | "src/" 1175 | ] 1176 | }, 1177 | "notification-url": "https://packagist.org/downloads/", 1178 | "license": [ 1179 | "BSD-3-Clause" 1180 | ], 1181 | "authors": [ 1182 | { 1183 | "name": "Sebastian Bergmann", 1184 | "email": "sebastian@phpunit.de" 1185 | } 1186 | ], 1187 | "description": "Wrapper around PHP's tokenizer extension.", 1188 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1189 | "keywords": [ 1190 | "tokenizer" 1191 | ], 1192 | "time": "2020-05-06T09:56:31+00:00" 1193 | }, 1194 | { 1195 | "name": "phpunit/phpunit", 1196 | "version": "9.1.4", 1197 | "source": { 1198 | "type": "git", 1199 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1200 | "reference": "2d7080c622cf7884992e7c3cf87853877bae8ff4" 1201 | }, 1202 | "dist": { 1203 | "type": "zip", 1204 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2d7080c622cf7884992e7c3cf87853877bae8ff4", 1205 | "reference": "2d7080c622cf7884992e7c3cf87853877bae8ff4", 1206 | "shasum": "" 1207 | }, 1208 | "require": { 1209 | "doctrine/instantiator": "^1.2.0", 1210 | "ext-dom": "*", 1211 | "ext-json": "*", 1212 | "ext-libxml": "*", 1213 | "ext-mbstring": "*", 1214 | "ext-xml": "*", 1215 | "ext-xmlwriter": "*", 1216 | "myclabs/deep-copy": "^1.9.1", 1217 | "phar-io/manifest": "^1.0.3", 1218 | "phar-io/version": "^2.0.1", 1219 | "php": "^7.3", 1220 | "phpspec/prophecy": "^1.8.1", 1221 | "phpunit/php-code-coverage": "^8.0.1", 1222 | "phpunit/php-file-iterator": "^3.0", 1223 | "phpunit/php-invoker": "^3.0", 1224 | "phpunit/php-text-template": "^2.0", 1225 | "phpunit/php-timer": "^3.1.4", 1226 | "sebastian/code-unit": "^1.0.2", 1227 | "sebastian/comparator": "^4.0", 1228 | "sebastian/diff": "^4.0", 1229 | "sebastian/environment": "^5.0.1", 1230 | "sebastian/exporter": "^4.0", 1231 | "sebastian/global-state": "^4.0", 1232 | "sebastian/object-enumerator": "^4.0", 1233 | "sebastian/resource-operations": "^3.0", 1234 | "sebastian/type": "^2.0", 1235 | "sebastian/version": "^3.0" 1236 | }, 1237 | "require-dev": { 1238 | "ext-pdo": "*", 1239 | "phpspec/prophecy-phpunit": "^2.0" 1240 | }, 1241 | "suggest": { 1242 | "ext-soap": "*", 1243 | "ext-xdebug": "*" 1244 | }, 1245 | "bin": [ 1246 | "phpunit" 1247 | ], 1248 | "type": "library", 1249 | "extra": { 1250 | "branch-alias": { 1251 | "dev-master": "9.1-dev" 1252 | } 1253 | }, 1254 | "autoload": { 1255 | "classmap": [ 1256 | "src/" 1257 | ], 1258 | "files": [ 1259 | "src/Framework/Assert/Functions.php" 1260 | ] 1261 | }, 1262 | "notification-url": "https://packagist.org/downloads/", 1263 | "license": [ 1264 | "BSD-3-Clause" 1265 | ], 1266 | "authors": [ 1267 | { 1268 | "name": "Sebastian Bergmann", 1269 | "email": "sebastian@phpunit.de", 1270 | "role": "lead" 1271 | } 1272 | ], 1273 | "description": "The PHP Unit Testing framework.", 1274 | "homepage": "https://phpunit.de/", 1275 | "keywords": [ 1276 | "phpunit", 1277 | "testing", 1278 | "xunit" 1279 | ], 1280 | "time": "2020-04-30T06:32:53+00:00" 1281 | }, 1282 | { 1283 | "name": "sebastian/code-unit", 1284 | "version": "1.0.2", 1285 | "source": { 1286 | "type": "git", 1287 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1288 | "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5" 1289 | }, 1290 | "dist": { 1291 | "type": "zip", 1292 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ac958085bc19fcd1d36425c781ef4cbb5b06e2a5", 1293 | "reference": "ac958085bc19fcd1d36425c781ef4cbb5b06e2a5", 1294 | "shasum": "" 1295 | }, 1296 | "require": { 1297 | "php": "^7.3" 1298 | }, 1299 | "require-dev": { 1300 | "phpunit/phpunit": "^9.0" 1301 | }, 1302 | "type": "library", 1303 | "extra": { 1304 | "branch-alias": { 1305 | "dev-master": "1.0-dev" 1306 | } 1307 | }, 1308 | "autoload": { 1309 | "classmap": [ 1310 | "src/" 1311 | ] 1312 | }, 1313 | "notification-url": "https://packagist.org/downloads/", 1314 | "license": [ 1315 | "BSD-3-Clause" 1316 | ], 1317 | "authors": [ 1318 | { 1319 | "name": "Sebastian Bergmann", 1320 | "email": "sebastian@phpunit.de", 1321 | "role": "lead" 1322 | } 1323 | ], 1324 | "description": "Collection of value objects that represent the PHP code units", 1325 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1326 | "time": "2020-04-30T05:58:10+00:00" 1327 | }, 1328 | { 1329 | "name": "sebastian/code-unit-reverse-lookup", 1330 | "version": "2.0.0", 1331 | "source": { 1332 | "type": "git", 1333 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1334 | "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e" 1335 | }, 1336 | "dist": { 1337 | "type": "zip", 1338 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5b5dbe0044085ac41df47e79d34911a15b96d82e", 1339 | "reference": "5b5dbe0044085ac41df47e79d34911a15b96d82e", 1340 | "shasum": "" 1341 | }, 1342 | "require": { 1343 | "php": "^7.3" 1344 | }, 1345 | "require-dev": { 1346 | "phpunit/phpunit": "^9.0" 1347 | }, 1348 | "type": "library", 1349 | "extra": { 1350 | "branch-alias": { 1351 | "dev-master": "2.0-dev" 1352 | } 1353 | }, 1354 | "autoload": { 1355 | "classmap": [ 1356 | "src/" 1357 | ] 1358 | }, 1359 | "notification-url": "https://packagist.org/downloads/", 1360 | "license": [ 1361 | "BSD-3-Clause" 1362 | ], 1363 | "authors": [ 1364 | { 1365 | "name": "Sebastian Bergmann", 1366 | "email": "sebastian@phpunit.de" 1367 | } 1368 | ], 1369 | "description": "Looks up which function or method a line of code belongs to", 1370 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1371 | "time": "2020-02-07T06:20:13+00:00" 1372 | }, 1373 | { 1374 | "name": "sebastian/comparator", 1375 | "version": "4.0.0", 1376 | "source": { 1377 | "type": "git", 1378 | "url": "https://github.com/sebastianbergmann/comparator.git", 1379 | "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8" 1380 | }, 1381 | "dist": { 1382 | "type": "zip", 1383 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85b3435da967696ed618ff745f32be3ff4a2b8e8", 1384 | "reference": "85b3435da967696ed618ff745f32be3ff4a2b8e8", 1385 | "shasum": "" 1386 | }, 1387 | "require": { 1388 | "php": "^7.3", 1389 | "sebastian/diff": "^4.0", 1390 | "sebastian/exporter": "^4.0" 1391 | }, 1392 | "require-dev": { 1393 | "phpunit/phpunit": "^9.0" 1394 | }, 1395 | "type": "library", 1396 | "extra": { 1397 | "branch-alias": { 1398 | "dev-master": "4.0-dev" 1399 | } 1400 | }, 1401 | "autoload": { 1402 | "classmap": [ 1403 | "src/" 1404 | ] 1405 | }, 1406 | "notification-url": "https://packagist.org/downloads/", 1407 | "license": [ 1408 | "BSD-3-Clause" 1409 | ], 1410 | "authors": [ 1411 | { 1412 | "name": "Sebastian Bergmann", 1413 | "email": "sebastian@phpunit.de" 1414 | }, 1415 | { 1416 | "name": "Jeff Welch", 1417 | "email": "whatthejeff@gmail.com" 1418 | }, 1419 | { 1420 | "name": "Volker Dusch", 1421 | "email": "github@wallbash.com" 1422 | }, 1423 | { 1424 | "name": "Bernhard Schussek", 1425 | "email": "bschussek@2bepublished.at" 1426 | } 1427 | ], 1428 | "description": "Provides the functionality to compare PHP values for equality", 1429 | "homepage": "https://github.com/sebastianbergmann/comparator", 1430 | "keywords": [ 1431 | "comparator", 1432 | "compare", 1433 | "equality" 1434 | ], 1435 | "time": "2020-02-07T06:08:51+00:00" 1436 | }, 1437 | { 1438 | "name": "sebastian/diff", 1439 | "version": "4.0.0", 1440 | "source": { 1441 | "type": "git", 1442 | "url": "https://github.com/sebastianbergmann/diff.git", 1443 | "reference": "c0c26c9188b538bfa985ae10c9f05d278f12060d" 1444 | }, 1445 | "dist": { 1446 | "type": "zip", 1447 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c0c26c9188b538bfa985ae10c9f05d278f12060d", 1448 | "reference": "c0c26c9188b538bfa985ae10c9f05d278f12060d", 1449 | "shasum": "" 1450 | }, 1451 | "require": { 1452 | "php": "^7.3" 1453 | }, 1454 | "require-dev": { 1455 | "phpunit/phpunit": "^9.0", 1456 | "symfony/process": "^4 || ^5" 1457 | }, 1458 | "type": "library", 1459 | "extra": { 1460 | "branch-alias": { 1461 | "dev-master": "4.0-dev" 1462 | } 1463 | }, 1464 | "autoload": { 1465 | "classmap": [ 1466 | "src/" 1467 | ] 1468 | }, 1469 | "notification-url": "https://packagist.org/downloads/", 1470 | "license": [ 1471 | "BSD-3-Clause" 1472 | ], 1473 | "authors": [ 1474 | { 1475 | "name": "Sebastian Bergmann", 1476 | "email": "sebastian@phpunit.de" 1477 | }, 1478 | { 1479 | "name": "Kore Nordmann", 1480 | "email": "mail@kore-nordmann.de" 1481 | } 1482 | ], 1483 | "description": "Diff implementation", 1484 | "homepage": "https://github.com/sebastianbergmann/diff", 1485 | "keywords": [ 1486 | "diff", 1487 | "udiff", 1488 | "unidiff", 1489 | "unified diff" 1490 | ], 1491 | "time": "2020-02-07T06:09:38+00:00" 1492 | }, 1493 | { 1494 | "name": "sebastian/environment", 1495 | "version": "5.1.0", 1496 | "source": { 1497 | "type": "git", 1498 | "url": "https://github.com/sebastianbergmann/environment.git", 1499 | "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c" 1500 | }, 1501 | "dist": { 1502 | "type": "zip", 1503 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/c753f04d68cd489b6973cf9b4e505e191af3b05c", 1504 | "reference": "c753f04d68cd489b6973cf9b4e505e191af3b05c", 1505 | "shasum": "" 1506 | }, 1507 | "require": { 1508 | "php": "^7.3" 1509 | }, 1510 | "require-dev": { 1511 | "phpunit/phpunit": "^9.0" 1512 | }, 1513 | "suggest": { 1514 | "ext-posix": "*" 1515 | }, 1516 | "type": "library", 1517 | "extra": { 1518 | "branch-alias": { 1519 | "dev-master": "5.0-dev" 1520 | } 1521 | }, 1522 | "autoload": { 1523 | "classmap": [ 1524 | "src/" 1525 | ] 1526 | }, 1527 | "notification-url": "https://packagist.org/downloads/", 1528 | "license": [ 1529 | "BSD-3-Clause" 1530 | ], 1531 | "authors": [ 1532 | { 1533 | "name": "Sebastian Bergmann", 1534 | "email": "sebastian@phpunit.de" 1535 | } 1536 | ], 1537 | "description": "Provides functionality to handle HHVM/PHP environments", 1538 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1539 | "keywords": [ 1540 | "Xdebug", 1541 | "environment", 1542 | "hhvm" 1543 | ], 1544 | "time": "2020-04-14T13:36:52+00:00" 1545 | }, 1546 | { 1547 | "name": "sebastian/exporter", 1548 | "version": "4.0.0", 1549 | "source": { 1550 | "type": "git", 1551 | "url": "https://github.com/sebastianbergmann/exporter.git", 1552 | "reference": "80c26562e964016538f832f305b2286e1ec29566" 1553 | }, 1554 | "dist": { 1555 | "type": "zip", 1556 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/80c26562e964016538f832f305b2286e1ec29566", 1557 | "reference": "80c26562e964016538f832f305b2286e1ec29566", 1558 | "shasum": "" 1559 | }, 1560 | "require": { 1561 | "php": "^7.3", 1562 | "sebastian/recursion-context": "^4.0" 1563 | }, 1564 | "require-dev": { 1565 | "ext-mbstring": "*", 1566 | "phpunit/phpunit": "^9.0" 1567 | }, 1568 | "type": "library", 1569 | "extra": { 1570 | "branch-alias": { 1571 | "dev-master": "4.0-dev" 1572 | } 1573 | }, 1574 | "autoload": { 1575 | "classmap": [ 1576 | "src/" 1577 | ] 1578 | }, 1579 | "notification-url": "https://packagist.org/downloads/", 1580 | "license": [ 1581 | "BSD-3-Clause" 1582 | ], 1583 | "authors": [ 1584 | { 1585 | "name": "Sebastian Bergmann", 1586 | "email": "sebastian@phpunit.de" 1587 | }, 1588 | { 1589 | "name": "Jeff Welch", 1590 | "email": "whatthejeff@gmail.com" 1591 | }, 1592 | { 1593 | "name": "Volker Dusch", 1594 | "email": "github@wallbash.com" 1595 | }, 1596 | { 1597 | "name": "Adam Harvey", 1598 | "email": "aharvey@php.net" 1599 | }, 1600 | { 1601 | "name": "Bernhard Schussek", 1602 | "email": "bschussek@gmail.com" 1603 | } 1604 | ], 1605 | "description": "Provides the functionality to export PHP variables for visualization", 1606 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1607 | "keywords": [ 1608 | "export", 1609 | "exporter" 1610 | ], 1611 | "time": "2020-02-07T06:10:52+00:00" 1612 | }, 1613 | { 1614 | "name": "sebastian/global-state", 1615 | "version": "4.0.0", 1616 | "source": { 1617 | "type": "git", 1618 | "url": "https://github.com/sebastianbergmann/global-state.git", 1619 | "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" 1620 | }, 1621 | "dist": { 1622 | "type": "zip", 1623 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", 1624 | "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", 1625 | "shasum": "" 1626 | }, 1627 | "require": { 1628 | "php": "^7.3", 1629 | "sebastian/object-reflector": "^2.0", 1630 | "sebastian/recursion-context": "^4.0" 1631 | }, 1632 | "require-dev": { 1633 | "ext-dom": "*", 1634 | "phpunit/phpunit": "^9.0" 1635 | }, 1636 | "suggest": { 1637 | "ext-uopz": "*" 1638 | }, 1639 | "type": "library", 1640 | "extra": { 1641 | "branch-alias": { 1642 | "dev-master": "4.0-dev" 1643 | } 1644 | }, 1645 | "autoload": { 1646 | "classmap": [ 1647 | "src/" 1648 | ] 1649 | }, 1650 | "notification-url": "https://packagist.org/downloads/", 1651 | "license": [ 1652 | "BSD-3-Clause" 1653 | ], 1654 | "authors": [ 1655 | { 1656 | "name": "Sebastian Bergmann", 1657 | "email": "sebastian@phpunit.de" 1658 | } 1659 | ], 1660 | "description": "Snapshotting of global state", 1661 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1662 | "keywords": [ 1663 | "global state" 1664 | ], 1665 | "time": "2020-02-07T06:11:37+00:00" 1666 | }, 1667 | { 1668 | "name": "sebastian/object-enumerator", 1669 | "version": "4.0.0", 1670 | "source": { 1671 | "type": "git", 1672 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1673 | "reference": "e67516b175550abad905dc952f43285957ef4363" 1674 | }, 1675 | "dist": { 1676 | "type": "zip", 1677 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67516b175550abad905dc952f43285957ef4363", 1678 | "reference": "e67516b175550abad905dc952f43285957ef4363", 1679 | "shasum": "" 1680 | }, 1681 | "require": { 1682 | "php": "^7.3", 1683 | "sebastian/object-reflector": "^2.0", 1684 | "sebastian/recursion-context": "^4.0" 1685 | }, 1686 | "require-dev": { 1687 | "phpunit/phpunit": "^9.0" 1688 | }, 1689 | "type": "library", 1690 | "extra": { 1691 | "branch-alias": { 1692 | "dev-master": "4.0-dev" 1693 | } 1694 | }, 1695 | "autoload": { 1696 | "classmap": [ 1697 | "src/" 1698 | ] 1699 | }, 1700 | "notification-url": "https://packagist.org/downloads/", 1701 | "license": [ 1702 | "BSD-3-Clause" 1703 | ], 1704 | "authors": [ 1705 | { 1706 | "name": "Sebastian Bergmann", 1707 | "email": "sebastian@phpunit.de" 1708 | } 1709 | ], 1710 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1711 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1712 | "time": "2020-02-07T06:12:23+00:00" 1713 | }, 1714 | { 1715 | "name": "sebastian/object-reflector", 1716 | "version": "2.0.0", 1717 | "source": { 1718 | "type": "git", 1719 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1720 | "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7" 1721 | }, 1722 | "dist": { 1723 | "type": "zip", 1724 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", 1725 | "reference": "f4fd0835cabb0d4a6546d9fe291e5740037aa1e7", 1726 | "shasum": "" 1727 | }, 1728 | "require": { 1729 | "php": "^7.3" 1730 | }, 1731 | "require-dev": { 1732 | "phpunit/phpunit": "^9.0" 1733 | }, 1734 | "type": "library", 1735 | "extra": { 1736 | "branch-alias": { 1737 | "dev-master": "2.0-dev" 1738 | } 1739 | }, 1740 | "autoload": { 1741 | "classmap": [ 1742 | "src/" 1743 | ] 1744 | }, 1745 | "notification-url": "https://packagist.org/downloads/", 1746 | "license": [ 1747 | "BSD-3-Clause" 1748 | ], 1749 | "authors": [ 1750 | { 1751 | "name": "Sebastian Bergmann", 1752 | "email": "sebastian@phpunit.de" 1753 | } 1754 | ], 1755 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1756 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1757 | "time": "2020-02-07T06:19:40+00:00" 1758 | }, 1759 | { 1760 | "name": "sebastian/recursion-context", 1761 | "version": "4.0.0", 1762 | "source": { 1763 | "type": "git", 1764 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1765 | "reference": "cdd86616411fc3062368b720b0425de10bd3d579" 1766 | }, 1767 | "dist": { 1768 | "type": "zip", 1769 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cdd86616411fc3062368b720b0425de10bd3d579", 1770 | "reference": "cdd86616411fc3062368b720b0425de10bd3d579", 1771 | "shasum": "" 1772 | }, 1773 | "require": { 1774 | "php": "^7.3" 1775 | }, 1776 | "require-dev": { 1777 | "phpunit/phpunit": "^9.0" 1778 | }, 1779 | "type": "library", 1780 | "extra": { 1781 | "branch-alias": { 1782 | "dev-master": "4.0-dev" 1783 | } 1784 | }, 1785 | "autoload": { 1786 | "classmap": [ 1787 | "src/" 1788 | ] 1789 | }, 1790 | "notification-url": "https://packagist.org/downloads/", 1791 | "license": [ 1792 | "BSD-3-Clause" 1793 | ], 1794 | "authors": [ 1795 | { 1796 | "name": "Sebastian Bergmann", 1797 | "email": "sebastian@phpunit.de" 1798 | }, 1799 | { 1800 | "name": "Jeff Welch", 1801 | "email": "whatthejeff@gmail.com" 1802 | }, 1803 | { 1804 | "name": "Adam Harvey", 1805 | "email": "aharvey@php.net" 1806 | } 1807 | ], 1808 | "description": "Provides functionality to recursively process PHP variables", 1809 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1810 | "time": "2020-02-07T06:18:20+00:00" 1811 | }, 1812 | { 1813 | "name": "sebastian/resource-operations", 1814 | "version": "3.0.0", 1815 | "source": { 1816 | "type": "git", 1817 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1818 | "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98" 1819 | }, 1820 | "dist": { 1821 | "type": "zip", 1822 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", 1823 | "reference": "8c98bf0dfa1f9256d0468b9803a1e1df31b6fa98", 1824 | "shasum": "" 1825 | }, 1826 | "require": { 1827 | "php": "^7.3" 1828 | }, 1829 | "require-dev": { 1830 | "phpunit/phpunit": "^9.0" 1831 | }, 1832 | "type": "library", 1833 | "extra": { 1834 | "branch-alias": { 1835 | "dev-master": "3.0-dev" 1836 | } 1837 | }, 1838 | "autoload": { 1839 | "classmap": [ 1840 | "src/" 1841 | ] 1842 | }, 1843 | "notification-url": "https://packagist.org/downloads/", 1844 | "license": [ 1845 | "BSD-3-Clause" 1846 | ], 1847 | "authors": [ 1848 | { 1849 | "name": "Sebastian Bergmann", 1850 | "email": "sebastian@phpunit.de" 1851 | } 1852 | ], 1853 | "description": "Provides a list of PHP built-in functions that operate on resources", 1854 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1855 | "time": "2020-02-07T06:13:02+00:00" 1856 | }, 1857 | { 1858 | "name": "sebastian/type", 1859 | "version": "2.0.0", 1860 | "source": { 1861 | "type": "git", 1862 | "url": "https://github.com/sebastianbergmann/type.git", 1863 | "reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1" 1864 | }, 1865 | "dist": { 1866 | "type": "zip", 1867 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/9e8f42f740afdea51f5f4e8cec2035580e797ee1", 1868 | "reference": "9e8f42f740afdea51f5f4e8cec2035580e797ee1", 1869 | "shasum": "" 1870 | }, 1871 | "require": { 1872 | "php": "^7.3" 1873 | }, 1874 | "require-dev": { 1875 | "phpunit/phpunit": "^9.0" 1876 | }, 1877 | "type": "library", 1878 | "extra": { 1879 | "branch-alias": { 1880 | "dev-master": "2.0-dev" 1881 | } 1882 | }, 1883 | "autoload": { 1884 | "classmap": [ 1885 | "src/" 1886 | ] 1887 | }, 1888 | "notification-url": "https://packagist.org/downloads/", 1889 | "license": [ 1890 | "BSD-3-Clause" 1891 | ], 1892 | "authors": [ 1893 | { 1894 | "name": "Sebastian Bergmann", 1895 | "email": "sebastian@phpunit.de", 1896 | "role": "lead" 1897 | } 1898 | ], 1899 | "description": "Collection of value objects that represent the types of the PHP type system", 1900 | "homepage": "https://github.com/sebastianbergmann/type", 1901 | "time": "2020-02-07T06:13:43+00:00" 1902 | }, 1903 | { 1904 | "name": "sebastian/version", 1905 | "version": "3.0.0", 1906 | "source": { 1907 | "type": "git", 1908 | "url": "https://github.com/sebastianbergmann/version.git", 1909 | "reference": "0411bde656dce64202b39c2f4473993a9081d39e" 1910 | }, 1911 | "dist": { 1912 | "type": "zip", 1913 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/0411bde656dce64202b39c2f4473993a9081d39e", 1914 | "reference": "0411bde656dce64202b39c2f4473993a9081d39e", 1915 | "shasum": "" 1916 | }, 1917 | "require": { 1918 | "php": "^7.3" 1919 | }, 1920 | "type": "library", 1921 | "extra": { 1922 | "branch-alias": { 1923 | "dev-master": "3.0-dev" 1924 | } 1925 | }, 1926 | "autoload": { 1927 | "classmap": [ 1928 | "src/" 1929 | ] 1930 | }, 1931 | "notification-url": "https://packagist.org/downloads/", 1932 | "license": [ 1933 | "BSD-3-Clause" 1934 | ], 1935 | "authors": [ 1936 | { 1937 | "name": "Sebastian Bergmann", 1938 | "email": "sebastian@phpunit.de", 1939 | "role": "lead" 1940 | } 1941 | ], 1942 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1943 | "homepage": "https://github.com/sebastianbergmann/version", 1944 | "time": "2020-01-21T06:36:37+00:00" 1945 | }, 1946 | { 1947 | "name": "symfony/polyfill-ctype", 1948 | "version": "v1.15.0", 1949 | "source": { 1950 | "type": "git", 1951 | "url": "https://github.com/symfony/polyfill-ctype.git", 1952 | "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14" 1953 | }, 1954 | "dist": { 1955 | "type": "zip", 1956 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14", 1957 | "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14", 1958 | "shasum": "" 1959 | }, 1960 | "require": { 1961 | "php": ">=5.3.3" 1962 | }, 1963 | "suggest": { 1964 | "ext-ctype": "For best performance" 1965 | }, 1966 | "type": "library", 1967 | "extra": { 1968 | "branch-alias": { 1969 | "dev-master": "1.15-dev" 1970 | } 1971 | }, 1972 | "autoload": { 1973 | "psr-4": { 1974 | "Symfony\\Polyfill\\Ctype\\": "" 1975 | }, 1976 | "files": [ 1977 | "bootstrap.php" 1978 | ] 1979 | }, 1980 | "notification-url": "https://packagist.org/downloads/", 1981 | "license": [ 1982 | "MIT" 1983 | ], 1984 | "authors": [ 1985 | { 1986 | "name": "Gert de Pagter", 1987 | "email": "BackEndTea@gmail.com" 1988 | }, 1989 | { 1990 | "name": "Symfony Community", 1991 | "homepage": "https://symfony.com/contributors" 1992 | } 1993 | ], 1994 | "description": "Symfony polyfill for ctype functions", 1995 | "homepage": "https://symfony.com", 1996 | "keywords": [ 1997 | "compatibility", 1998 | "ctype", 1999 | "polyfill", 2000 | "portable" 2001 | ], 2002 | "time": "2020-02-27T09:26:54+00:00" 2003 | }, 2004 | { 2005 | "name": "theseer/tokenizer", 2006 | "version": "1.1.3", 2007 | "source": { 2008 | "type": "git", 2009 | "url": "https://github.com/theseer/tokenizer.git", 2010 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 2011 | }, 2012 | "dist": { 2013 | "type": "zip", 2014 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 2015 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 2016 | "shasum": "" 2017 | }, 2018 | "require": { 2019 | "ext-dom": "*", 2020 | "ext-tokenizer": "*", 2021 | "ext-xmlwriter": "*", 2022 | "php": "^7.0" 2023 | }, 2024 | "type": "library", 2025 | "autoload": { 2026 | "classmap": [ 2027 | "src/" 2028 | ] 2029 | }, 2030 | "notification-url": "https://packagist.org/downloads/", 2031 | "license": [ 2032 | "BSD-3-Clause" 2033 | ], 2034 | "authors": [ 2035 | { 2036 | "name": "Arne Blankerts", 2037 | "email": "arne@blankerts.de", 2038 | "role": "Developer" 2039 | } 2040 | ], 2041 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2042 | "time": "2019-06-13T22:48:21+00:00" 2043 | }, 2044 | { 2045 | "name": "webmozart/assert", 2046 | "version": "1.8.0", 2047 | "source": { 2048 | "type": "git", 2049 | "url": "https://github.com/webmozart/assert.git", 2050 | "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6" 2051 | }, 2052 | "dist": { 2053 | "type": "zip", 2054 | "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6", 2055 | "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6", 2056 | "shasum": "" 2057 | }, 2058 | "require": { 2059 | "php": "^5.3.3 || ^7.0", 2060 | "symfony/polyfill-ctype": "^1.8" 2061 | }, 2062 | "conflict": { 2063 | "vimeo/psalm": "<3.9.1" 2064 | }, 2065 | "require-dev": { 2066 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 2067 | }, 2068 | "type": "library", 2069 | "autoload": { 2070 | "psr-4": { 2071 | "Webmozart\\Assert\\": "src/" 2072 | } 2073 | }, 2074 | "notification-url": "https://packagist.org/downloads/", 2075 | "license": [ 2076 | "MIT" 2077 | ], 2078 | "authors": [ 2079 | { 2080 | "name": "Bernhard Schussek", 2081 | "email": "bschussek@gmail.com" 2082 | } 2083 | ], 2084 | "description": "Assertions to validate method input/output with nice error messages.", 2085 | "keywords": [ 2086 | "assert", 2087 | "check", 2088 | "validate" 2089 | ], 2090 | "time": "2020-04-18T12:12:48+00:00" 2091 | } 2092 | ], 2093 | "aliases": [], 2094 | "minimum-stability": "stable", 2095 | "stability-flags": [], 2096 | "prefer-stable": false, 2097 | "prefer-lowest": false, 2098 | "platform": [], 2099 | "platform-dev": [] 2100 | } 2101 | --------------------------------------------------------------------------------