├── .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 |
--------------------------------------------------------------------------------