├── .gitignore
├── LICENCE
├── README.md
├── composer.json
├── composer.lock
├── phpunit.xml
├── src
├── ApiResponse.php
├── Config.php
├── CustomField.php
├── Enums
│ ├── Currency.php
│ └── Environment.php
├── Exceptions
│ └── CurrencyException.php
├── Invoice
│ └── InvoiceItem.php
├── PayTech.php
└── Utils
│ ├── Check.php
│ ├── MakeRequest.php
│ └── Serializer.php
└── tests
└── Unit
├── Exceptions
└── CurrencyExceptionTest.php
├── Invoice
└── InvoiceItemTest.php
├── PayTech
├── ApiResponseTest.php
├── ConfigTest.php
├── CustomFieldTest.php
└── PayTechTest.php
└── Utils
├── CheckTest.php
├── MakeRequestTest.php
└── SerializerTest.php
/.gitignore:
--------------------------------------------------------------------------------
1 | vendor/
2 | .vscode
--------------------------------------------------------------------------------
/LICENCE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 PapiHack (MBCM)
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.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # PayTech - PHP API Client
2 |
3 | [](https://coveralls.io/github/PapiHack/paytech-php-client?branch=master)
4 | 
5 | 
6 | [](//packagist.org/packages/papihack/paytech-php-client)
7 | [](//packagist.org/packages/papihack/paytech-php-client)
8 | [](//packagist.org/packages/papihack/paytech-php-client)
9 | [](//packagist.org/packages/papihack/paytech-php-client)
10 | [](https://github.com/ellerbrock/open-source-badges/)
11 |
12 | This is a simple `SDK Client` or `API Client` for `PayTech Online Payment Gateway`.
13 |
14 | Check out [PayTech SN Website](https://paytech.sn).
15 |
16 | ## How to use it
17 |
18 | First of all, install the package or library via composer
19 |
20 | - `composer require papihack/paytech-php-client`
21 |
22 | After that, setup the API config with your parameters like this :
23 |
24 | ```php
25 | \PayTech\Config::setApiKey('your_api_key');
26 | \PayTech\Config::setApiSecret('your_api_secret');
27 |
28 | /*
29 | * you can set one of this two environment TEST or PROD
30 | * you can just set the env mode via \PayTech\Enums\Env::TEST or \PayTech\Enums\Env::PROD
31 | * Like the following example
32 | * !!! By default env is PROD !!!
33 | * You can also directly set test or prod as a string if you want
34 | * Like \PayTech\Config::setEnv('test') or \PayTech\Config::setEnv('prod')
35 | */
36 |
37 | \PayTech\Config::setEnv(\PayTech\Enums\Env::PROD);
38 |
39 | /*
40 | * The PayTech\Enums\Currency class defined authorized currencies
41 | * You can change XOF (in the following example) by USD, CAD or another currency
42 | * All allowed currencies are in \PayTech\Enums\Currency class
43 | * !!! Notice that XOF is the default currency !!!
44 | */
45 |
46 | \PayTech\Config::setCurrency(\PayTech\Enums\Currency::XOF);
47 |
48 | /* !!! Note that if you decide to set the ipn_url, it must be in https !!! */
49 |
50 | \PayTech\Config::setIpnUrl('your_ipn_url');
51 | \PayTech\Config::setSuccessUrl('your_success_url');
52 | \PayTech\Config::setCanceUrl('your_cancel_url');
53 |
54 | /*
55 | * if you want the mobile success or cancel page, you can set
56 | * the following parameter
57 | */
58 |
59 | \PayTech\Config::setIsMobile(true);
60 | ```
61 |
62 | Then you can proceed with :
63 |
64 | ```php
65 | $article_price = 15000;
66 | $article = new \PayTech\Invoice\InvoiceItem('article_name', $article_price, 'command_name', 'ref_command');
67 |
68 | /* You can also add custom data or fields like this */
69 |
70 | \PayTech\CustomField::set('your_field_name', 'your_field_value');
71 |
72 | /* Make the payment request demand to the API */
73 |
74 | \PayTech\PayTech::send($article);
75 |
76 | /* Get the API Response */
77 |
78 | $response = [
79 | 'success' => \PayTech\ApiResponse::getSuccess(),
80 | 'errors' => \PayTech\ApiResponse::getErrors(),
81 | 'token' => \PayTech\ApiResponse::getToken(),
82 | 'redirect_url' => \PayTech\ApiResponse::getRedirectUrl(),
83 | ];
84 | ```
85 |
86 | After that, if you have a success response, you can redirect your user to the `$response['redirect_url']` so that he can make the payment.
87 | You can process the response as you wish by directly manipulating `\PayTech\ApiResponse`.
88 |
89 | ## TODO
90 |
91 | - tests: cover all use cases ✅
92 | - get the support team at [paytech.sn](https://paytech.sn) to clarify certain points
93 |
94 | ## Contributing
95 |
96 | Feel free to make a PR or report an issue 😃
97 |
98 | Regarding the tests, I use the elegant PHP Testing Framework [Pest](https://pestphp.com/) 😎
99 |
100 | Oh, one more thing, please do not forget to put a description when you make your PR 🙂
101 |
102 | ## Contributors
103 |
104 | - [M.B.C.M](https://itdev.herokuapp.com)
105 | [](https://twitter.com/the_it_dev)
106 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "papihack/paytech-php-client",
3 | "description": "A PHP Client or SDK for PayTech Online Payment Gateway.",
4 | "keywords": [
5 | "Plateforme de paiement en ligne Afrique",
6 | "Paiement Sénégal", "Paiement", "paiement en ligne", "Sénégal",
7 | "Passerelle de paiement en ligne", "PAYTECH", "paytech", "paytech.sn",
8 | "orange money", "client php", "api", "php client", "library", "sdk",
9 | "php sdk", "paytech php sdk", "client api"
10 | ],
11 | "type": "library",
12 | "license": "MIT",
13 | "authors": [
14 | {
15 | "name": "PapiHack",
16 | "email": "itdev94@gmail.com"
17 | }
18 | ],
19 | "minimum-stability": "dev",
20 | "prefer-stable": true,
21 | "require": {
22 | "php": "^7.3",
23 | "rmccue/requests": "^1.7"
24 | },
25 | "autoload": {
26 | "psr-4": {
27 | "PayTech\\": "src/"
28 | }
29 | },
30 | "autoload-dev": {
31 | "psr-4": {
32 | "PayTech\\Tests\\": "tests/"
33 | }
34 | },
35 | "require-dev": {
36 | "phpunit/phpunit": "^9.0",
37 | "pestphp/pest": "^0.2.3"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/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": "5664c8366476af06fe9587d3ac68f39d",
8 | "packages": [
9 | {
10 | "name": "rmccue/requests",
11 | "version": "v1.8.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/WordPress/Requests.git",
15 | "reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/WordPress/Requests/zipball/afbe4790e4def03581c4a0963a1e8aa01f6030f1",
20 | "reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "php": ">=5.2"
25 | },
26 | "require-dev": {
27 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
28 | "php-parallel-lint/php-console-highlighter": "^0.5.0",
29 | "php-parallel-lint/php-parallel-lint": "^1.3",
30 | "phpcompatibility/php-compatibility": "^9.0",
31 | "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5",
32 | "requests/test-server": "dev-master",
33 | "squizlabs/php_codesniffer": "^3.5",
34 | "wp-coding-standards/wpcs": "^2.0"
35 | },
36 | "type": "library",
37 | "autoload": {
38 | "psr-0": {
39 | "Requests": "library/"
40 | }
41 | },
42 | "notification-url": "https://packagist.org/downloads/",
43 | "license": [
44 | "ISC"
45 | ],
46 | "authors": [
47 | {
48 | "name": "Ryan McCue",
49 | "homepage": "http://ryanmccue.info"
50 | }
51 | ],
52 | "description": "A HTTP library written in PHP, for human beings.",
53 | "homepage": "http://github.com/WordPress/Requests",
54 | "keywords": [
55 | "curl",
56 | "fsockopen",
57 | "http",
58 | "idna",
59 | "ipv6",
60 | "iri",
61 | "sockets"
62 | ],
63 | "support": {
64 | "issues": "https://github.com/WordPress/Requests/issues",
65 | "source": "https://github.com/WordPress/Requests/tree/v1.8.0"
66 | },
67 | "time": "2021-04-27T11:05:25+00:00"
68 | }
69 | ],
70 | "packages-dev": [
71 | {
72 | "name": "doctrine/instantiator",
73 | "version": "1.3.1",
74 | "source": {
75 | "type": "git",
76 | "url": "https://github.com/doctrine/instantiator.git",
77 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
78 | },
79 | "dist": {
80 | "type": "zip",
81 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
82 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
83 | "shasum": ""
84 | },
85 | "require": {
86 | "php": "^7.1 || ^8.0"
87 | },
88 | "require-dev": {
89 | "doctrine/coding-standard": "^6.0",
90 | "ext-pdo": "*",
91 | "ext-phar": "*",
92 | "phpbench/phpbench": "^0.13",
93 | "phpstan/phpstan-phpunit": "^0.11",
94 | "phpstan/phpstan-shim": "^0.11",
95 | "phpunit/phpunit": "^7.0"
96 | },
97 | "type": "library",
98 | "extra": {
99 | "branch-alias": {
100 | "dev-master": "1.2.x-dev"
101 | }
102 | },
103 | "autoload": {
104 | "psr-4": {
105 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
106 | }
107 | },
108 | "notification-url": "https://packagist.org/downloads/",
109 | "license": [
110 | "MIT"
111 | ],
112 | "authors": [
113 | {
114 | "name": "Marco Pivetta",
115 | "email": "ocramius@gmail.com",
116 | "homepage": "http://ocramius.github.com/"
117 | }
118 | ],
119 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
120 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
121 | "keywords": [
122 | "constructor",
123 | "instantiate"
124 | ],
125 | "time": "2020-05-29T17:27:14+00:00"
126 | },
127 | {
128 | "name": "facade/ignition-contracts",
129 | "version": "1.0.1",
130 | "source": {
131 | "type": "git",
132 | "url": "https://github.com/facade/ignition-contracts.git",
133 | "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b"
134 | },
135 | "dist": {
136 | "type": "zip",
137 | "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/aeab1ce8b68b188a43e81758e750151ad7da796b",
138 | "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b",
139 | "shasum": ""
140 | },
141 | "require": {
142 | "php": "^7.1"
143 | },
144 | "require-dev": {
145 | "friendsofphp/php-cs-fixer": "^2.14",
146 | "phpunit/phpunit": "^7.5|^8.0",
147 | "vimeo/psalm": "^3.12"
148 | },
149 | "type": "library",
150 | "autoload": {
151 | "psr-4": {
152 | "Facade\\IgnitionContracts\\": "src"
153 | }
154 | },
155 | "notification-url": "https://packagist.org/downloads/",
156 | "license": [
157 | "MIT"
158 | ],
159 | "authors": [
160 | {
161 | "name": "Freek Van der Herten",
162 | "email": "freek@spatie.be",
163 | "homepage": "https://flareapp.io",
164 | "role": "Developer"
165 | }
166 | ],
167 | "description": "Solution contracts for Ignition",
168 | "homepage": "https://github.com/facade/ignition-contracts",
169 | "keywords": [
170 | "contracts",
171 | "flare",
172 | "ignition"
173 | ],
174 | "time": "2020-07-14T10:10:28+00:00"
175 | },
176 | {
177 | "name": "filp/whoops",
178 | "version": "2.7.3",
179 | "source": {
180 | "type": "git",
181 | "url": "https://github.com/filp/whoops.git",
182 | "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d"
183 | },
184 | "dist": {
185 | "type": "zip",
186 | "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d",
187 | "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d",
188 | "shasum": ""
189 | },
190 | "require": {
191 | "php": "^5.5.9 || ^7.0",
192 | "psr/log": "^1.0.1"
193 | },
194 | "require-dev": {
195 | "mockery/mockery": "^0.9 || ^1.0",
196 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0",
197 | "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
198 | },
199 | "suggest": {
200 | "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
201 | "whoops/soap": "Formats errors as SOAP responses"
202 | },
203 | "type": "library",
204 | "extra": {
205 | "branch-alias": {
206 | "dev-master": "2.6-dev"
207 | }
208 | },
209 | "autoload": {
210 | "psr-4": {
211 | "Whoops\\": "src/Whoops/"
212 | }
213 | },
214 | "notification-url": "https://packagist.org/downloads/",
215 | "license": [
216 | "MIT"
217 | ],
218 | "authors": [
219 | {
220 | "name": "Filipe Dobreira",
221 | "homepage": "https://github.com/filp",
222 | "role": "Developer"
223 | }
224 | ],
225 | "description": "php error handling for cool kids",
226 | "homepage": "https://filp.github.io/whoops/",
227 | "keywords": [
228 | "error",
229 | "exception",
230 | "handling",
231 | "library",
232 | "throwable",
233 | "whoops"
234 | ],
235 | "time": "2020-06-14T09:00:00+00:00"
236 | },
237 | {
238 | "name": "myclabs/deep-copy",
239 | "version": "1.10.1",
240 | "source": {
241 | "type": "git",
242 | "url": "https://github.com/myclabs/DeepCopy.git",
243 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
244 | },
245 | "dist": {
246 | "type": "zip",
247 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
248 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
249 | "shasum": ""
250 | },
251 | "require": {
252 | "php": "^7.1 || ^8.0"
253 | },
254 | "replace": {
255 | "myclabs/deep-copy": "self.version"
256 | },
257 | "require-dev": {
258 | "doctrine/collections": "^1.0",
259 | "doctrine/common": "^2.6",
260 | "phpunit/phpunit": "^7.1"
261 | },
262 | "type": "library",
263 | "autoload": {
264 | "psr-4": {
265 | "DeepCopy\\": "src/DeepCopy/"
266 | },
267 | "files": [
268 | "src/DeepCopy/deep_copy.php"
269 | ]
270 | },
271 | "notification-url": "https://packagist.org/downloads/",
272 | "license": [
273 | "MIT"
274 | ],
275 | "description": "Create deep copies (clones) of your objects",
276 | "keywords": [
277 | "clone",
278 | "copy",
279 | "duplicate",
280 | "object",
281 | "object graph"
282 | ],
283 | "time": "2020-06-29T13:22:24+00:00"
284 | },
285 | {
286 | "name": "nunomaduro/collision",
287 | "version": "v5.0.0-BETA4",
288 | "source": {
289 | "type": "git",
290 | "url": "https://github.com/nunomaduro/collision.git",
291 | "reference": "805929cb4bb6b24ef56a28a4121eb1336803effd"
292 | },
293 | "dist": {
294 | "type": "zip",
295 | "url": "https://api.github.com/repos/nunomaduro/collision/zipball/805929cb4bb6b24ef56a28a4121eb1336803effd",
296 | "reference": "805929cb4bb6b24ef56a28a4121eb1336803effd",
297 | "shasum": ""
298 | },
299 | "require": {
300 | "facade/ignition-contracts": "^1.0",
301 | "filp/whoops": "^2.7.2",
302 | "php": "^7.3",
303 | "symfony/console": "^5.0"
304 | },
305 | "require-dev": {
306 | "fideloper/proxy": "^4.3",
307 | "friendsofphp/php-cs-fixer": "^2.16.3",
308 | "fruitcake/laravel-cors": "^2.0.1",
309 | "laravel/framework": "^8.0",
310 | "laravel/tinker": "^2.4",
311 | "nunomaduro/larastan": "^0.6.1",
312 | "nunomaduro/mock-final-classes": "^1.0",
313 | "orchestra/testbench": "^6.0",
314 | "phpstan/phpstan": "^0.12.30",
315 | "phpunit/phpunit": "^9.2.4",
316 | "rector/rector": "^0.7.37"
317 | },
318 | "type": "library",
319 | "extra": {
320 | "laravel": {
321 | "providers": [
322 | "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
323 | ]
324 | }
325 | },
326 | "autoload": {
327 | "psr-4": {
328 | "NunoMaduro\\Collision\\": "src/"
329 | }
330 | },
331 | "notification-url": "https://packagist.org/downloads/",
332 | "license": [
333 | "MIT"
334 | ],
335 | "authors": [
336 | {
337 | "name": "Nuno Maduro",
338 | "email": "enunomaduro@gmail.com"
339 | }
340 | ],
341 | "description": "Cli error handling for console/command-line PHP applications.",
342 | "keywords": [
343 | "artisan",
344 | "cli",
345 | "command-line",
346 | "console",
347 | "error",
348 | "handling",
349 | "laravel",
350 | "laravel-zero",
351 | "php",
352 | "symfony"
353 | ],
354 | "time": "2020-06-25T16:51:17+00:00"
355 | },
356 | {
357 | "name": "pestphp/pest",
358 | "version": "v0.2.3",
359 | "source": {
360 | "type": "git",
361 | "url": "https://github.com/pestphp/pest.git",
362 | "reference": "1241e929b1441097c9be2467d2a75c6d2b3e0a84"
363 | },
364 | "dist": {
365 | "type": "zip",
366 | "url": "https://api.github.com/repos/pestphp/pest/zipball/1241e929b1441097c9be2467d2a75c6d2b3e0a84",
367 | "reference": "1241e929b1441097c9be2467d2a75c6d2b3e0a84",
368 | "shasum": ""
369 | },
370 | "require": {
371 | "nunomaduro/collision": "^5.0.0-BETA3",
372 | "pestphp/pest-plugin": "^0.2",
373 | "pestphp/pest-plugin-coverage": "^0.2",
374 | "pestphp/pest-plugin-init": "^0.2",
375 | "php": "^7.3",
376 | "phpunit/phpunit": "^9.1.4",
377 | "sebastian/environment": "^5.1"
378 | },
379 | "require-dev": {
380 | "ergebnis/phpstan-rules": "^0.15.0",
381 | "friendsofphp/php-cs-fixer": "^2.16.3",
382 | "illuminate/console": "^7.16.1",
383 | "illuminate/support": "^7.16.1",
384 | "mockery/mockery": "^1.4.0",
385 | "phpstan/phpstan": "^0.12.30",
386 | "phpstan/phpstan-strict-rules": "^0.12.2",
387 | "rector/rector": "^0.7.37",
388 | "symfony/var-dumper": "^5.1.2",
389 | "thecodingmachine/phpstan-strict-rules": "^0.12.0"
390 | },
391 | "bin": [
392 | "bin/pest"
393 | ],
394 | "type": "library",
395 | "extra": {
396 | "branch-alias": {
397 | "dev-master": "0.2.x-dev"
398 | },
399 | "pest": {
400 | "plugins": [
401 | "Pest\\Plugins\\Version"
402 | ]
403 | },
404 | "laravel": {
405 | "providers": [
406 | "Pest\\Laravel\\PestServiceProvider"
407 | ]
408 | }
409 | },
410 | "autoload": {
411 | "psr-4": {
412 | "Pest\\": "src/"
413 | },
414 | "files": [
415 | "src/globals.php",
416 | "src/Pest.php",
417 | "compiled/globals.php"
418 | ]
419 | },
420 | "notification-url": "https://packagist.org/downloads/",
421 | "license": [
422 | "MIT"
423 | ],
424 | "authors": [
425 | {
426 | "name": "Nuno Maduro",
427 | "email": "enunomaduro@gmail.com"
428 | }
429 | ],
430 | "description": "An elegant PHP Testing Framework.",
431 | "keywords": [
432 | "framework",
433 | "pest",
434 | "php",
435 | "test",
436 | "testing",
437 | "unit"
438 | ],
439 | "time": "2020-07-01T18:26:18+00:00"
440 | },
441 | {
442 | "name": "pestphp/pest-plugin",
443 | "version": "v0.2.1",
444 | "source": {
445 | "type": "git",
446 | "url": "https://github.com/pestphp/pest-plugin.git",
447 | "reference": "99d21abb7b1a44aa26c2416ca729d2a989ee2850"
448 | },
449 | "dist": {
450 | "type": "zip",
451 | "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/99d21abb7b1a44aa26c2416ca729d2a989ee2850",
452 | "reference": "99d21abb7b1a44aa26c2416ca729d2a989ee2850",
453 | "shasum": ""
454 | },
455 | "require": {
456 | "composer-plugin-api": "^1.1||^2.0",
457 | "php": "^7.3"
458 | },
459 | "conflict": {
460 | "pestphp/pest": "<0.2"
461 | },
462 | "require-dev": {
463 | "composer/composer": "^1.10",
464 | "pestphp/pest": "^0.2",
465 | "pestphp/pest-dev-tools": "dev-master"
466 | },
467 | "type": "composer-plugin",
468 | "extra": {
469 | "branch-alias": {
470 | "dev-master": "0.2.x-dev"
471 | },
472 | "class": "Pest\\Plugin\\Manager"
473 | },
474 | "autoload": {
475 | "psr-4": {
476 | "Pest\\Plugin\\": "src/"
477 | }
478 | },
479 | "notification-url": "https://packagist.org/downloads/",
480 | "license": [
481 | "MIT"
482 | ],
483 | "description": "The Pest plugin manager",
484 | "keywords": [
485 | "framework",
486 | "manager",
487 | "pest",
488 | "php",
489 | "plugin",
490 | "test",
491 | "testing",
492 | "unit"
493 | ],
494 | "time": "2020-06-16T18:07:24+00:00"
495 | },
496 | {
497 | "name": "pestphp/pest-plugin-coverage",
498 | "version": "v0.2.0",
499 | "source": {
500 | "type": "git",
501 | "url": "https://github.com/pestphp/pest-plugin-coverage.git",
502 | "reference": "0849cf8d394124c21f2370f8e37b4bc272ea07c0"
503 | },
504 | "dist": {
505 | "type": "zip",
506 | "url": "https://api.github.com/repos/pestphp/pest-plugin-coverage/zipball/0849cf8d394124c21f2370f8e37b4bc272ea07c0",
507 | "reference": "0849cf8d394124c21f2370f8e37b4bc272ea07c0",
508 | "shasum": ""
509 | },
510 | "require": {
511 | "pestphp/pest-plugin": "^0.2",
512 | "php": "^7.3"
513 | },
514 | "conflict": {
515 | "pestphp/pest": "<0.2"
516 | },
517 | "require-dev": {
518 | "pestphp/pest": "^0.2",
519 | "pestphp/pest-dev-tools": "dev-master"
520 | },
521 | "type": "library",
522 | "extra": {
523 | "pest": {
524 | "plugins": [
525 | "Pest\\PluginCoverage\\Plugin"
526 | ]
527 | }
528 | },
529 | "autoload": {
530 | "psr-4": {
531 | "Pest\\PluginCoverage\\": "src/"
532 | }
533 | },
534 | "notification-url": "https://packagist.org/downloads/",
535 | "license": [
536 | "MIT"
537 | ],
538 | "description": "The Pest Coverage Plugin",
539 | "keywords": [
540 | "coverage",
541 | "framework",
542 | "pest",
543 | "php",
544 | "plugin",
545 | "test",
546 | "testing",
547 | "unit"
548 | ],
549 | "time": "2020-06-11T20:42:52+00:00"
550 | },
551 | {
552 | "name": "pestphp/pest-plugin-init",
553 | "version": "v0.2.3",
554 | "source": {
555 | "type": "git",
556 | "url": "https://github.com/pestphp/pest-plugin-init.git",
557 | "reference": "718771dbfcc5bb8ceca238c4754dbc7bfdcb1b09"
558 | },
559 | "dist": {
560 | "type": "zip",
561 | "url": "https://api.github.com/repos/pestphp/pest-plugin-init/zipball/718771dbfcc5bb8ceca238c4754dbc7bfdcb1b09",
562 | "reference": "718771dbfcc5bb8ceca238c4754dbc7bfdcb1b09",
563 | "shasum": ""
564 | },
565 | "require": {
566 | "pestphp/pest-plugin": "^0.2",
567 | "php": "^7.3"
568 | },
569 | "conflict": {
570 | "pestphp/pest": "<0.2.3"
571 | },
572 | "require-dev": {
573 | "pestphp/pest": "^0.2",
574 | "pestphp/pest-dev-tools": "dev-master"
575 | },
576 | "type": "library",
577 | "extra": {
578 | "branch-alias": {
579 | "dev-master": "0.2.x-dev"
580 | },
581 | "pest": {
582 | "plugins": [
583 | "Pest\\Init\\Plugin"
584 | ]
585 | }
586 | },
587 | "autoload": {
588 | "psr-4": {
589 | "Pest\\Init\\": "src/"
590 | }
591 | },
592 | "notification-url": "https://packagist.org/downloads/",
593 | "license": [
594 | "MIT"
595 | ],
596 | "description": "The Pest Init plugin",
597 | "keywords": [
598 | "framework",
599 | "init",
600 | "pest",
601 | "php",
602 | "plugin",
603 | "test",
604 | "testing",
605 | "unit"
606 | ],
607 | "time": "2020-07-01T18:35:16+00:00"
608 | },
609 | {
610 | "name": "phar-io/manifest",
611 | "version": "1.0.3",
612 | "source": {
613 | "type": "git",
614 | "url": "https://github.com/phar-io/manifest.git",
615 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
616 | },
617 | "dist": {
618 | "type": "zip",
619 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
620 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
621 | "shasum": ""
622 | },
623 | "require": {
624 | "ext-dom": "*",
625 | "ext-phar": "*",
626 | "phar-io/version": "^2.0",
627 | "php": "^5.6 || ^7.0"
628 | },
629 | "type": "library",
630 | "extra": {
631 | "branch-alias": {
632 | "dev-master": "1.0.x-dev"
633 | }
634 | },
635 | "autoload": {
636 | "classmap": [
637 | "src/"
638 | ]
639 | },
640 | "notification-url": "https://packagist.org/downloads/",
641 | "license": [
642 | "BSD-3-Clause"
643 | ],
644 | "authors": [
645 | {
646 | "name": "Arne Blankerts",
647 | "email": "arne@blankerts.de",
648 | "role": "Developer"
649 | },
650 | {
651 | "name": "Sebastian Heuer",
652 | "email": "sebastian@phpeople.de",
653 | "role": "Developer"
654 | },
655 | {
656 | "name": "Sebastian Bergmann",
657 | "email": "sebastian@phpunit.de",
658 | "role": "Developer"
659 | }
660 | ],
661 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
662 | "time": "2018-07-08T19:23:20+00:00"
663 | },
664 | {
665 | "name": "phar-io/version",
666 | "version": "2.0.1",
667 | "source": {
668 | "type": "git",
669 | "url": "https://github.com/phar-io/version.git",
670 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
671 | },
672 | "dist": {
673 | "type": "zip",
674 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
675 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
676 | "shasum": ""
677 | },
678 | "require": {
679 | "php": "^5.6 || ^7.0"
680 | },
681 | "type": "library",
682 | "autoload": {
683 | "classmap": [
684 | "src/"
685 | ]
686 | },
687 | "notification-url": "https://packagist.org/downloads/",
688 | "license": [
689 | "BSD-3-Clause"
690 | ],
691 | "authors": [
692 | {
693 | "name": "Arne Blankerts",
694 | "email": "arne@blankerts.de",
695 | "role": "Developer"
696 | },
697 | {
698 | "name": "Sebastian Heuer",
699 | "email": "sebastian@phpeople.de",
700 | "role": "Developer"
701 | },
702 | {
703 | "name": "Sebastian Bergmann",
704 | "email": "sebastian@phpunit.de",
705 | "role": "Developer"
706 | }
707 | ],
708 | "description": "Library for handling version information and constraints",
709 | "time": "2018-07-08T19:19:57+00:00"
710 | },
711 | {
712 | "name": "phpdocumentor/reflection-common",
713 | "version": "2.2.0",
714 | "source": {
715 | "type": "git",
716 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
717 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
718 | },
719 | "dist": {
720 | "type": "zip",
721 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
722 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
723 | "shasum": ""
724 | },
725 | "require": {
726 | "php": "^7.2 || ^8.0"
727 | },
728 | "type": "library",
729 | "extra": {
730 | "branch-alias": {
731 | "dev-2.x": "2.x-dev"
732 | }
733 | },
734 | "autoload": {
735 | "psr-4": {
736 | "phpDocumentor\\Reflection\\": "src/"
737 | }
738 | },
739 | "notification-url": "https://packagist.org/downloads/",
740 | "license": [
741 | "MIT"
742 | ],
743 | "authors": [
744 | {
745 | "name": "Jaap van Otterdijk",
746 | "email": "opensource@ijaap.nl"
747 | }
748 | ],
749 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
750 | "homepage": "http://www.phpdoc.org",
751 | "keywords": [
752 | "FQSEN",
753 | "phpDocumentor",
754 | "phpdoc",
755 | "reflection",
756 | "static analysis"
757 | ],
758 | "time": "2020-06-27T09:03:43+00:00"
759 | },
760 | {
761 | "name": "phpdocumentor/reflection-docblock",
762 | "version": "5.1.0",
763 | "source": {
764 | "type": "git",
765 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
766 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
767 | },
768 | "dist": {
769 | "type": "zip",
770 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
771 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
772 | "shasum": ""
773 | },
774 | "require": {
775 | "ext-filter": "^7.1",
776 | "php": "^7.2",
777 | "phpdocumentor/reflection-common": "^2.0",
778 | "phpdocumentor/type-resolver": "^1.0",
779 | "webmozart/assert": "^1"
780 | },
781 | "require-dev": {
782 | "doctrine/instantiator": "^1",
783 | "mockery/mockery": "^1"
784 | },
785 | "type": "library",
786 | "extra": {
787 | "branch-alias": {
788 | "dev-master": "5.x-dev"
789 | }
790 | },
791 | "autoload": {
792 | "psr-4": {
793 | "phpDocumentor\\Reflection\\": "src"
794 | }
795 | },
796 | "notification-url": "https://packagist.org/downloads/",
797 | "license": [
798 | "MIT"
799 | ],
800 | "authors": [
801 | {
802 | "name": "Mike van Riel",
803 | "email": "me@mikevanriel.com"
804 | },
805 | {
806 | "name": "Jaap van Otterdijk",
807 | "email": "account@ijaap.nl"
808 | }
809 | ],
810 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
811 | "time": "2020-02-22T12:28:44+00:00"
812 | },
813 | {
814 | "name": "phpdocumentor/type-resolver",
815 | "version": "1.3.0",
816 | "source": {
817 | "type": "git",
818 | "url": "https://github.com/phpDocumentor/TypeResolver.git",
819 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651"
820 | },
821 | "dist": {
822 | "type": "zip",
823 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651",
824 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651",
825 | "shasum": ""
826 | },
827 | "require": {
828 | "php": "^7.2 || ^8.0",
829 | "phpdocumentor/reflection-common": "^2.0"
830 | },
831 | "require-dev": {
832 | "ext-tokenizer": "*"
833 | },
834 | "type": "library",
835 | "extra": {
836 | "branch-alias": {
837 | "dev-1.x": "1.x-dev"
838 | }
839 | },
840 | "autoload": {
841 | "psr-4": {
842 | "phpDocumentor\\Reflection\\": "src"
843 | }
844 | },
845 | "notification-url": "https://packagist.org/downloads/",
846 | "license": [
847 | "MIT"
848 | ],
849 | "authors": [
850 | {
851 | "name": "Mike van Riel",
852 | "email": "me@mikevanriel.com"
853 | }
854 | ],
855 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
856 | "time": "2020-06-27T10:12:23+00:00"
857 | },
858 | {
859 | "name": "phpspec/prophecy",
860 | "version": "1.11.1",
861 | "source": {
862 | "type": "git",
863 | "url": "https://github.com/phpspec/prophecy.git",
864 | "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160"
865 | },
866 | "dist": {
867 | "type": "zip",
868 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160",
869 | "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160",
870 | "shasum": ""
871 | },
872 | "require": {
873 | "doctrine/instantiator": "^1.2",
874 | "php": "^7.2",
875 | "phpdocumentor/reflection-docblock": "^5.0",
876 | "sebastian/comparator": "^3.0 || ^4.0",
877 | "sebastian/recursion-context": "^3.0 || ^4.0"
878 | },
879 | "require-dev": {
880 | "phpspec/phpspec": "^6.0",
881 | "phpunit/phpunit": "^8.0"
882 | },
883 | "type": "library",
884 | "extra": {
885 | "branch-alias": {
886 | "dev-master": "1.11.x-dev"
887 | }
888 | },
889 | "autoload": {
890 | "psr-4": {
891 | "Prophecy\\": "src/Prophecy"
892 | }
893 | },
894 | "notification-url": "https://packagist.org/downloads/",
895 | "license": [
896 | "MIT"
897 | ],
898 | "authors": [
899 | {
900 | "name": "Konstantin Kudryashov",
901 | "email": "ever.zet@gmail.com",
902 | "homepage": "http://everzet.com"
903 | },
904 | {
905 | "name": "Marcello Duarte",
906 | "email": "marcello.duarte@gmail.com"
907 | }
908 | ],
909 | "description": "Highly opinionated mocking framework for PHP 5.3+",
910 | "homepage": "https://github.com/phpspec/prophecy",
911 | "keywords": [
912 | "Double",
913 | "Dummy",
914 | "fake",
915 | "mock",
916 | "spy",
917 | "stub"
918 | ],
919 | "time": "2020-07-08T12:44:21+00:00"
920 | },
921 | {
922 | "name": "phpunit/php-code-coverage",
923 | "version": "8.0.2",
924 | "source": {
925 | "type": "git",
926 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
927 | "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc"
928 | },
929 | "dist": {
930 | "type": "zip",
931 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc",
932 | "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc",
933 | "shasum": ""
934 | },
935 | "require": {
936 | "ext-dom": "*",
937 | "ext-xmlwriter": "*",
938 | "php": "^7.3",
939 | "phpunit/php-file-iterator": "^3.0",
940 | "phpunit/php-text-template": "^2.0",
941 | "phpunit/php-token-stream": "^4.0",
942 | "sebastian/code-unit-reverse-lookup": "^2.0",
943 | "sebastian/environment": "^5.0",
944 | "sebastian/version": "^3.0",
945 | "theseer/tokenizer": "^1.1.3"
946 | },
947 | "require-dev": {
948 | "phpunit/phpunit": "^9.0"
949 | },
950 | "suggest": {
951 | "ext-pcov": "*",
952 | "ext-xdebug": "*"
953 | },
954 | "type": "library",
955 | "extra": {
956 | "branch-alias": {
957 | "dev-master": "8.0-dev"
958 | }
959 | },
960 | "autoload": {
961 | "classmap": [
962 | "src/"
963 | ]
964 | },
965 | "notification-url": "https://packagist.org/downloads/",
966 | "license": [
967 | "BSD-3-Clause"
968 | ],
969 | "authors": [
970 | {
971 | "name": "Sebastian Bergmann",
972 | "email": "sebastian@phpunit.de",
973 | "role": "lead"
974 | }
975 | ],
976 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
977 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
978 | "keywords": [
979 | "coverage",
980 | "testing",
981 | "xunit"
982 | ],
983 | "time": "2020-05-23T08:02:54+00:00"
984 | },
985 | {
986 | "name": "phpunit/php-file-iterator",
987 | "version": "3.0.4",
988 | "source": {
989 | "type": "git",
990 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
991 | "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e"
992 | },
993 | "dist": {
994 | "type": "zip",
995 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/25fefc5b19835ca653877fe081644a3f8c1d915e",
996 | "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e",
997 | "shasum": ""
998 | },
999 | "require": {
1000 | "php": "^7.3 || ^8.0"
1001 | },
1002 | "require-dev": {
1003 | "phpunit/phpunit": "^9.0"
1004 | },
1005 | "type": "library",
1006 | "extra": {
1007 | "branch-alias": {
1008 | "dev-master": "3.0-dev"
1009 | }
1010 | },
1011 | "autoload": {
1012 | "classmap": [
1013 | "src/"
1014 | ]
1015 | },
1016 | "notification-url": "https://packagist.org/downloads/",
1017 | "license": [
1018 | "BSD-3-Clause"
1019 | ],
1020 | "authors": [
1021 | {
1022 | "name": "Sebastian Bergmann",
1023 | "email": "sebastian@phpunit.de",
1024 | "role": "lead"
1025 | }
1026 | ],
1027 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1028 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1029 | "keywords": [
1030 | "filesystem",
1031 | "iterator"
1032 | ],
1033 | "time": "2020-07-11T05:18:21+00:00"
1034 | },
1035 | {
1036 | "name": "phpunit/php-invoker",
1037 | "version": "3.0.2",
1038 | "source": {
1039 | "type": "git",
1040 | "url": "https://github.com/sebastianbergmann/php-invoker.git",
1041 | "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66"
1042 | },
1043 | "dist": {
1044 | "type": "zip",
1045 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66",
1046 | "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66",
1047 | "shasum": ""
1048 | },
1049 | "require": {
1050 | "php": "^7.3 || ^8.0"
1051 | },
1052 | "require-dev": {
1053 | "ext-pcntl": "*",
1054 | "phpunit/phpunit": "^9.0"
1055 | },
1056 | "suggest": {
1057 | "ext-pcntl": "*"
1058 | },
1059 | "type": "library",
1060 | "extra": {
1061 | "branch-alias": {
1062 | "dev-master": "3.0-dev"
1063 | }
1064 | },
1065 | "autoload": {
1066 | "classmap": [
1067 | "src/"
1068 | ]
1069 | },
1070 | "notification-url": "https://packagist.org/downloads/",
1071 | "license": [
1072 | "BSD-3-Clause"
1073 | ],
1074 | "authors": [
1075 | {
1076 | "name": "Sebastian Bergmann",
1077 | "email": "sebastian@phpunit.de",
1078 | "role": "lead"
1079 | }
1080 | ],
1081 | "description": "Invoke callables with a timeout",
1082 | "homepage": "https://github.com/sebastianbergmann/php-invoker/",
1083 | "keywords": [
1084 | "process"
1085 | ],
1086 | "time": "2020-06-26T11:53:53+00:00"
1087 | },
1088 | {
1089 | "name": "phpunit/php-text-template",
1090 | "version": "2.0.2",
1091 | "source": {
1092 | "type": "git",
1093 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
1094 | "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324"
1095 | },
1096 | "dist": {
1097 | "type": "zip",
1098 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324",
1099 | "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324",
1100 | "shasum": ""
1101 | },
1102 | "require": {
1103 | "php": "^7.3 || ^8.0"
1104 | },
1105 | "require-dev": {
1106 | "phpunit/phpunit": "^9.0"
1107 | },
1108 | "type": "library",
1109 | "extra": {
1110 | "branch-alias": {
1111 | "dev-master": "2.0-dev"
1112 | }
1113 | },
1114 | "autoload": {
1115 | "classmap": [
1116 | "src/"
1117 | ]
1118 | },
1119 | "notification-url": "https://packagist.org/downloads/",
1120 | "license": [
1121 | "BSD-3-Clause"
1122 | ],
1123 | "authors": [
1124 | {
1125 | "name": "Sebastian Bergmann",
1126 | "email": "sebastian@phpunit.de",
1127 | "role": "lead"
1128 | }
1129 | ],
1130 | "description": "Simple template engine.",
1131 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1132 | "keywords": [
1133 | "template"
1134 | ],
1135 | "time": "2020-06-26T11:55:37+00:00"
1136 | },
1137 | {
1138 | "name": "phpunit/php-timer",
1139 | "version": "5.0.1",
1140 | "source": {
1141 | "type": "git",
1142 | "url": "https://github.com/sebastianbergmann/php-timer.git",
1143 | "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7"
1144 | },
1145 | "dist": {
1146 | "type": "zip",
1147 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7",
1148 | "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7",
1149 | "shasum": ""
1150 | },
1151 | "require": {
1152 | "php": "^7.3 || ^8.0"
1153 | },
1154 | "require-dev": {
1155 | "phpunit/phpunit": "^9.2"
1156 | },
1157 | "type": "library",
1158 | "extra": {
1159 | "branch-alias": {
1160 | "dev-master": "5.0-dev"
1161 | }
1162 | },
1163 | "autoload": {
1164 | "classmap": [
1165 | "src/"
1166 | ]
1167 | },
1168 | "notification-url": "https://packagist.org/downloads/",
1169 | "license": [
1170 | "BSD-3-Clause"
1171 | ],
1172 | "authors": [
1173 | {
1174 | "name": "Sebastian Bergmann",
1175 | "email": "sebastian@phpunit.de",
1176 | "role": "lead"
1177 | }
1178 | ],
1179 | "description": "Utility class for timing",
1180 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
1181 | "keywords": [
1182 | "timer"
1183 | ],
1184 | "time": "2020-06-26T11:58:13+00:00"
1185 | },
1186 | {
1187 | "name": "phpunit/php-token-stream",
1188 | "version": "4.0.3",
1189 | "source": {
1190 | "type": "git",
1191 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1192 | "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374"
1193 | },
1194 | "dist": {
1195 | "type": "zip",
1196 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374",
1197 | "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374",
1198 | "shasum": ""
1199 | },
1200 | "require": {
1201 | "ext-tokenizer": "*",
1202 | "php": "^7.3 || ^8.0"
1203 | },
1204 | "require-dev": {
1205 | "phpunit/phpunit": "^9.0"
1206 | },
1207 | "type": "library",
1208 | "extra": {
1209 | "branch-alias": {
1210 | "dev-master": "4.0-dev"
1211 | }
1212 | },
1213 | "autoload": {
1214 | "classmap": [
1215 | "src/"
1216 | ]
1217 | },
1218 | "notification-url": "https://packagist.org/downloads/",
1219 | "license": [
1220 | "BSD-3-Clause"
1221 | ],
1222 | "authors": [
1223 | {
1224 | "name": "Sebastian Bergmann",
1225 | "email": "sebastian@phpunit.de"
1226 | }
1227 | ],
1228 | "description": "Wrapper around PHP's tokenizer extension.",
1229 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1230 | "keywords": [
1231 | "tokenizer"
1232 | ],
1233 | "time": "2020-06-27T06:36:25+00:00"
1234 | },
1235 | {
1236 | "name": "phpunit/phpunit",
1237 | "version": "9.2.6",
1238 | "source": {
1239 | "type": "git",
1240 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1241 | "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6"
1242 | },
1243 | "dist": {
1244 | "type": "zip",
1245 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6a9e4312e209e659f1fce3ce88dd197c2448f6",
1246 | "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6",
1247 | "shasum": ""
1248 | },
1249 | "require": {
1250 | "doctrine/instantiator": "^1.3.1",
1251 | "ext-dom": "*",
1252 | "ext-json": "*",
1253 | "ext-libxml": "*",
1254 | "ext-mbstring": "*",
1255 | "ext-xml": "*",
1256 | "ext-xmlwriter": "*",
1257 | "myclabs/deep-copy": "^1.9.5",
1258 | "phar-io/manifest": "^1.0.3",
1259 | "phar-io/version": "^2.0.1",
1260 | "php": "^7.3",
1261 | "phpspec/prophecy": "^1.10.3",
1262 | "phpunit/php-code-coverage": "^8.0.2",
1263 | "phpunit/php-file-iterator": "^3.0.3",
1264 | "phpunit/php-invoker": "^3.0.2",
1265 | "phpunit/php-text-template": "^2.0.2",
1266 | "phpunit/php-timer": "^5.0.1",
1267 | "sebastian/code-unit": "^1.0.5",
1268 | "sebastian/comparator": "^4.0.3",
1269 | "sebastian/diff": "^4.0.1",
1270 | "sebastian/environment": "^5.1.2",
1271 | "sebastian/exporter": "^4.0.2",
1272 | "sebastian/global-state": "^4.0",
1273 | "sebastian/object-enumerator": "^4.0.2",
1274 | "sebastian/resource-operations": "^3.0.2",
1275 | "sebastian/type": "^2.1.1",
1276 | "sebastian/version": "^3.0.1"
1277 | },
1278 | "require-dev": {
1279 | "ext-pdo": "*",
1280 | "phpspec/prophecy-phpunit": "^2.0"
1281 | },
1282 | "suggest": {
1283 | "ext-soap": "*",
1284 | "ext-xdebug": "*"
1285 | },
1286 | "bin": [
1287 | "phpunit"
1288 | ],
1289 | "type": "library",
1290 | "extra": {
1291 | "branch-alias": {
1292 | "dev-master": "9.2-dev"
1293 | }
1294 | },
1295 | "autoload": {
1296 | "classmap": [
1297 | "src/"
1298 | ],
1299 | "files": [
1300 | "src/Framework/Assert/Functions.php"
1301 | ]
1302 | },
1303 | "notification-url": "https://packagist.org/downloads/",
1304 | "license": [
1305 | "BSD-3-Clause"
1306 | ],
1307 | "authors": [
1308 | {
1309 | "name": "Sebastian Bergmann",
1310 | "email": "sebastian@phpunit.de",
1311 | "role": "lead"
1312 | }
1313 | ],
1314 | "description": "The PHP Unit Testing framework.",
1315 | "homepage": "https://phpunit.de/",
1316 | "keywords": [
1317 | "phpunit",
1318 | "testing",
1319 | "xunit"
1320 | ],
1321 | "time": "2020-07-13T17:55:55+00:00"
1322 | },
1323 | {
1324 | "name": "psr/container",
1325 | "version": "1.0.0",
1326 | "source": {
1327 | "type": "git",
1328 | "url": "https://github.com/php-fig/container.git",
1329 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
1330 | },
1331 | "dist": {
1332 | "type": "zip",
1333 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
1334 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
1335 | "shasum": ""
1336 | },
1337 | "require": {
1338 | "php": ">=5.3.0"
1339 | },
1340 | "type": "library",
1341 | "extra": {
1342 | "branch-alias": {
1343 | "dev-master": "1.0.x-dev"
1344 | }
1345 | },
1346 | "autoload": {
1347 | "psr-4": {
1348 | "Psr\\Container\\": "src/"
1349 | }
1350 | },
1351 | "notification-url": "https://packagist.org/downloads/",
1352 | "license": [
1353 | "MIT"
1354 | ],
1355 | "authors": [
1356 | {
1357 | "name": "PHP-FIG",
1358 | "homepage": "http://www.php-fig.org/"
1359 | }
1360 | ],
1361 | "description": "Common Container Interface (PHP FIG PSR-11)",
1362 | "homepage": "https://github.com/php-fig/container",
1363 | "keywords": [
1364 | "PSR-11",
1365 | "container",
1366 | "container-interface",
1367 | "container-interop",
1368 | "psr"
1369 | ],
1370 | "time": "2017-02-14T16:28:37+00:00"
1371 | },
1372 | {
1373 | "name": "psr/log",
1374 | "version": "1.1.3",
1375 | "source": {
1376 | "type": "git",
1377 | "url": "https://github.com/php-fig/log.git",
1378 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
1379 | },
1380 | "dist": {
1381 | "type": "zip",
1382 | "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
1383 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
1384 | "shasum": ""
1385 | },
1386 | "require": {
1387 | "php": ">=5.3.0"
1388 | },
1389 | "type": "library",
1390 | "extra": {
1391 | "branch-alias": {
1392 | "dev-master": "1.1.x-dev"
1393 | }
1394 | },
1395 | "autoload": {
1396 | "psr-4": {
1397 | "Psr\\Log\\": "Psr/Log/"
1398 | }
1399 | },
1400 | "notification-url": "https://packagist.org/downloads/",
1401 | "license": [
1402 | "MIT"
1403 | ],
1404 | "authors": [
1405 | {
1406 | "name": "PHP-FIG",
1407 | "homepage": "http://www.php-fig.org/"
1408 | }
1409 | ],
1410 | "description": "Common interface for logging libraries",
1411 | "homepage": "https://github.com/php-fig/log",
1412 | "keywords": [
1413 | "log",
1414 | "psr",
1415 | "psr-3"
1416 | ],
1417 | "time": "2020-03-23T09:12:05+00:00"
1418 | },
1419 | {
1420 | "name": "sebastian/code-unit",
1421 | "version": "1.0.5",
1422 | "source": {
1423 | "type": "git",
1424 | "url": "https://github.com/sebastianbergmann/code-unit.git",
1425 | "reference": "c1e2df332c905079980b119c4db103117e5e5c90"
1426 | },
1427 | "dist": {
1428 | "type": "zip",
1429 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90",
1430 | "reference": "c1e2df332c905079980b119c4db103117e5e5c90",
1431 | "shasum": ""
1432 | },
1433 | "require": {
1434 | "php": "^7.3 || ^8.0"
1435 | },
1436 | "require-dev": {
1437 | "phpunit/phpunit": "^9.0"
1438 | },
1439 | "type": "library",
1440 | "extra": {
1441 | "branch-alias": {
1442 | "dev-master": "1.0-dev"
1443 | }
1444 | },
1445 | "autoload": {
1446 | "classmap": [
1447 | "src/"
1448 | ]
1449 | },
1450 | "notification-url": "https://packagist.org/downloads/",
1451 | "license": [
1452 | "BSD-3-Clause"
1453 | ],
1454 | "authors": [
1455 | {
1456 | "name": "Sebastian Bergmann",
1457 | "email": "sebastian@phpunit.de",
1458 | "role": "lead"
1459 | }
1460 | ],
1461 | "description": "Collection of value objects that represent the PHP code units",
1462 | "homepage": "https://github.com/sebastianbergmann/code-unit",
1463 | "time": "2020-06-26T12:50:45+00:00"
1464 | },
1465 | {
1466 | "name": "sebastian/code-unit-reverse-lookup",
1467 | "version": "2.0.2",
1468 | "source": {
1469 | "type": "git",
1470 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
1471 | "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819"
1472 | },
1473 | "dist": {
1474 | "type": "zip",
1475 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819",
1476 | "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819",
1477 | "shasum": ""
1478 | },
1479 | "require": {
1480 | "php": "^7.3 || ^8.0"
1481 | },
1482 | "require-dev": {
1483 | "phpunit/phpunit": "^9.0"
1484 | },
1485 | "type": "library",
1486 | "extra": {
1487 | "branch-alias": {
1488 | "dev-master": "2.0-dev"
1489 | }
1490 | },
1491 | "autoload": {
1492 | "classmap": [
1493 | "src/"
1494 | ]
1495 | },
1496 | "notification-url": "https://packagist.org/downloads/",
1497 | "license": [
1498 | "BSD-3-Clause"
1499 | ],
1500 | "authors": [
1501 | {
1502 | "name": "Sebastian Bergmann",
1503 | "email": "sebastian@phpunit.de"
1504 | }
1505 | ],
1506 | "description": "Looks up which function or method a line of code belongs to",
1507 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
1508 | "time": "2020-06-26T12:04:00+00:00"
1509 | },
1510 | {
1511 | "name": "sebastian/comparator",
1512 | "version": "4.0.3",
1513 | "source": {
1514 | "type": "git",
1515 | "url": "https://github.com/sebastianbergmann/comparator.git",
1516 | "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f"
1517 | },
1518 | "dist": {
1519 | "type": "zip",
1520 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f",
1521 | "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f",
1522 | "shasum": ""
1523 | },
1524 | "require": {
1525 | "php": "^7.3 || ^8.0",
1526 | "sebastian/diff": "^4.0",
1527 | "sebastian/exporter": "^4.0"
1528 | },
1529 | "require-dev": {
1530 | "phpunit/phpunit": "^9.0"
1531 | },
1532 | "type": "library",
1533 | "extra": {
1534 | "branch-alias": {
1535 | "dev-master": "4.0-dev"
1536 | }
1537 | },
1538 | "autoload": {
1539 | "classmap": [
1540 | "src/"
1541 | ]
1542 | },
1543 | "notification-url": "https://packagist.org/downloads/",
1544 | "license": [
1545 | "BSD-3-Clause"
1546 | ],
1547 | "authors": [
1548 | {
1549 | "name": "Sebastian Bergmann",
1550 | "email": "sebastian@phpunit.de"
1551 | },
1552 | {
1553 | "name": "Jeff Welch",
1554 | "email": "whatthejeff@gmail.com"
1555 | },
1556 | {
1557 | "name": "Volker Dusch",
1558 | "email": "github@wallbash.com"
1559 | },
1560 | {
1561 | "name": "Bernhard Schussek",
1562 | "email": "bschussek@2bepublished.at"
1563 | }
1564 | ],
1565 | "description": "Provides the functionality to compare PHP values for equality",
1566 | "homepage": "https://github.com/sebastianbergmann/comparator",
1567 | "keywords": [
1568 | "comparator",
1569 | "compare",
1570 | "equality"
1571 | ],
1572 | "time": "2020-06-26T12:05:46+00:00"
1573 | },
1574 | {
1575 | "name": "sebastian/diff",
1576 | "version": "4.0.2",
1577 | "source": {
1578 | "type": "git",
1579 | "url": "https://github.com/sebastianbergmann/diff.git",
1580 | "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113"
1581 | },
1582 | "dist": {
1583 | "type": "zip",
1584 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113",
1585 | "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113",
1586 | "shasum": ""
1587 | },
1588 | "require": {
1589 | "php": "^7.3 || ^8.0"
1590 | },
1591 | "require-dev": {
1592 | "phpunit/phpunit": "^9.0",
1593 | "symfony/process": "^4.2 || ^5"
1594 | },
1595 | "type": "library",
1596 | "extra": {
1597 | "branch-alias": {
1598 | "dev-master": "4.0-dev"
1599 | }
1600 | },
1601 | "autoload": {
1602 | "classmap": [
1603 | "src/"
1604 | ]
1605 | },
1606 | "notification-url": "https://packagist.org/downloads/",
1607 | "license": [
1608 | "BSD-3-Clause"
1609 | ],
1610 | "authors": [
1611 | {
1612 | "name": "Sebastian Bergmann",
1613 | "email": "sebastian@phpunit.de"
1614 | },
1615 | {
1616 | "name": "Kore Nordmann",
1617 | "email": "mail@kore-nordmann.de"
1618 | }
1619 | ],
1620 | "description": "Diff implementation",
1621 | "homepage": "https://github.com/sebastianbergmann/diff",
1622 | "keywords": [
1623 | "diff",
1624 | "udiff",
1625 | "unidiff",
1626 | "unified diff"
1627 | ],
1628 | "time": "2020-06-30T04:46:02+00:00"
1629 | },
1630 | {
1631 | "name": "sebastian/environment",
1632 | "version": "5.1.2",
1633 | "source": {
1634 | "type": "git",
1635 | "url": "https://github.com/sebastianbergmann/environment.git",
1636 | "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2"
1637 | },
1638 | "dist": {
1639 | "type": "zip",
1640 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2",
1641 | "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2",
1642 | "shasum": ""
1643 | },
1644 | "require": {
1645 | "php": "^7.3 || ^8.0"
1646 | },
1647 | "require-dev": {
1648 | "phpunit/phpunit": "^9.0"
1649 | },
1650 | "suggest": {
1651 | "ext-posix": "*"
1652 | },
1653 | "type": "library",
1654 | "extra": {
1655 | "branch-alias": {
1656 | "dev-master": "5.0-dev"
1657 | }
1658 | },
1659 | "autoload": {
1660 | "classmap": [
1661 | "src/"
1662 | ]
1663 | },
1664 | "notification-url": "https://packagist.org/downloads/",
1665 | "license": [
1666 | "BSD-3-Clause"
1667 | ],
1668 | "authors": [
1669 | {
1670 | "name": "Sebastian Bergmann",
1671 | "email": "sebastian@phpunit.de"
1672 | }
1673 | ],
1674 | "description": "Provides functionality to handle HHVM/PHP environments",
1675 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1676 | "keywords": [
1677 | "Xdebug",
1678 | "environment",
1679 | "hhvm"
1680 | ],
1681 | "time": "2020-06-26T12:07:24+00:00"
1682 | },
1683 | {
1684 | "name": "sebastian/exporter",
1685 | "version": "4.0.2",
1686 | "source": {
1687 | "type": "git",
1688 | "url": "https://github.com/sebastianbergmann/exporter.git",
1689 | "reference": "571d721db4aec847a0e59690b954af33ebf9f023"
1690 | },
1691 | "dist": {
1692 | "type": "zip",
1693 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023",
1694 | "reference": "571d721db4aec847a0e59690b954af33ebf9f023",
1695 | "shasum": ""
1696 | },
1697 | "require": {
1698 | "php": "^7.3 || ^8.0",
1699 | "sebastian/recursion-context": "^4.0"
1700 | },
1701 | "require-dev": {
1702 | "ext-mbstring": "*",
1703 | "phpunit/phpunit": "^9.2"
1704 | },
1705 | "type": "library",
1706 | "extra": {
1707 | "branch-alias": {
1708 | "dev-master": "4.0-dev"
1709 | }
1710 | },
1711 | "autoload": {
1712 | "classmap": [
1713 | "src/"
1714 | ]
1715 | },
1716 | "notification-url": "https://packagist.org/downloads/",
1717 | "license": [
1718 | "BSD-3-Clause"
1719 | ],
1720 | "authors": [
1721 | {
1722 | "name": "Sebastian Bergmann",
1723 | "email": "sebastian@phpunit.de"
1724 | },
1725 | {
1726 | "name": "Jeff Welch",
1727 | "email": "whatthejeff@gmail.com"
1728 | },
1729 | {
1730 | "name": "Volker Dusch",
1731 | "email": "github@wallbash.com"
1732 | },
1733 | {
1734 | "name": "Adam Harvey",
1735 | "email": "aharvey@php.net"
1736 | },
1737 | {
1738 | "name": "Bernhard Schussek",
1739 | "email": "bschussek@gmail.com"
1740 | }
1741 | ],
1742 | "description": "Provides the functionality to export PHP variables for visualization",
1743 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1744 | "keywords": [
1745 | "export",
1746 | "exporter"
1747 | ],
1748 | "time": "2020-06-26T12:08:55+00:00"
1749 | },
1750 | {
1751 | "name": "sebastian/global-state",
1752 | "version": "4.0.0",
1753 | "source": {
1754 | "type": "git",
1755 | "url": "https://github.com/sebastianbergmann/global-state.git",
1756 | "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72"
1757 | },
1758 | "dist": {
1759 | "type": "zip",
1760 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
1761 | "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72",
1762 | "shasum": ""
1763 | },
1764 | "require": {
1765 | "php": "^7.3",
1766 | "sebastian/object-reflector": "^2.0",
1767 | "sebastian/recursion-context": "^4.0"
1768 | },
1769 | "require-dev": {
1770 | "ext-dom": "*",
1771 | "phpunit/phpunit": "^9.0"
1772 | },
1773 | "suggest": {
1774 | "ext-uopz": "*"
1775 | },
1776 | "type": "library",
1777 | "extra": {
1778 | "branch-alias": {
1779 | "dev-master": "4.0-dev"
1780 | }
1781 | },
1782 | "autoload": {
1783 | "classmap": [
1784 | "src/"
1785 | ]
1786 | },
1787 | "notification-url": "https://packagist.org/downloads/",
1788 | "license": [
1789 | "BSD-3-Clause"
1790 | ],
1791 | "authors": [
1792 | {
1793 | "name": "Sebastian Bergmann",
1794 | "email": "sebastian@phpunit.de"
1795 | }
1796 | ],
1797 | "description": "Snapshotting of global state",
1798 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
1799 | "keywords": [
1800 | "global state"
1801 | ],
1802 | "time": "2020-02-07T06:11:37+00:00"
1803 | },
1804 | {
1805 | "name": "sebastian/object-enumerator",
1806 | "version": "4.0.2",
1807 | "source": {
1808 | "type": "git",
1809 | "url": "https://github.com/sebastianbergmann/object-enumerator.git",
1810 | "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8"
1811 | },
1812 | "dist": {
1813 | "type": "zip",
1814 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8",
1815 | "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8",
1816 | "shasum": ""
1817 | },
1818 | "require": {
1819 | "php": "^7.3 || ^8.0",
1820 | "sebastian/object-reflector": "^2.0",
1821 | "sebastian/recursion-context": "^4.0"
1822 | },
1823 | "require-dev": {
1824 | "phpunit/phpunit": "^9.0"
1825 | },
1826 | "type": "library",
1827 | "extra": {
1828 | "branch-alias": {
1829 | "dev-master": "4.0-dev"
1830 | }
1831 | },
1832 | "autoload": {
1833 | "classmap": [
1834 | "src/"
1835 | ]
1836 | },
1837 | "notification-url": "https://packagist.org/downloads/",
1838 | "license": [
1839 | "BSD-3-Clause"
1840 | ],
1841 | "authors": [
1842 | {
1843 | "name": "Sebastian Bergmann",
1844 | "email": "sebastian@phpunit.de"
1845 | }
1846 | ],
1847 | "description": "Traverses array structures and object graphs to enumerate all referenced objects",
1848 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
1849 | "time": "2020-06-26T12:11:32+00:00"
1850 | },
1851 | {
1852 | "name": "sebastian/object-reflector",
1853 | "version": "2.0.2",
1854 | "source": {
1855 | "type": "git",
1856 | "url": "https://github.com/sebastianbergmann/object-reflector.git",
1857 | "reference": "127a46f6b057441b201253526f81d5406d6c7840"
1858 | },
1859 | "dist": {
1860 | "type": "zip",
1861 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840",
1862 | "reference": "127a46f6b057441b201253526f81d5406d6c7840",
1863 | "shasum": ""
1864 | },
1865 | "require": {
1866 | "php": "^7.3 || ^8.0"
1867 | },
1868 | "require-dev": {
1869 | "phpunit/phpunit": "^9.0"
1870 | },
1871 | "type": "library",
1872 | "extra": {
1873 | "branch-alias": {
1874 | "dev-master": "2.0-dev"
1875 | }
1876 | },
1877 | "autoload": {
1878 | "classmap": [
1879 | "src/"
1880 | ]
1881 | },
1882 | "notification-url": "https://packagist.org/downloads/",
1883 | "license": [
1884 | "BSD-3-Clause"
1885 | ],
1886 | "authors": [
1887 | {
1888 | "name": "Sebastian Bergmann",
1889 | "email": "sebastian@phpunit.de"
1890 | }
1891 | ],
1892 | "description": "Allows reflection of object attributes, including inherited and non-public ones",
1893 | "homepage": "https://github.com/sebastianbergmann/object-reflector/",
1894 | "time": "2020-06-26T12:12:55+00:00"
1895 | },
1896 | {
1897 | "name": "sebastian/recursion-context",
1898 | "version": "4.0.2",
1899 | "source": {
1900 | "type": "git",
1901 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1902 | "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63"
1903 | },
1904 | "dist": {
1905 | "type": "zip",
1906 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63",
1907 | "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63",
1908 | "shasum": ""
1909 | },
1910 | "require": {
1911 | "php": "^7.3 || ^8.0"
1912 | },
1913 | "require-dev": {
1914 | "phpunit/phpunit": "^9.0"
1915 | },
1916 | "type": "library",
1917 | "extra": {
1918 | "branch-alias": {
1919 | "dev-master": "4.0-dev"
1920 | }
1921 | },
1922 | "autoload": {
1923 | "classmap": [
1924 | "src/"
1925 | ]
1926 | },
1927 | "notification-url": "https://packagist.org/downloads/",
1928 | "license": [
1929 | "BSD-3-Clause"
1930 | ],
1931 | "authors": [
1932 | {
1933 | "name": "Sebastian Bergmann",
1934 | "email": "sebastian@phpunit.de"
1935 | },
1936 | {
1937 | "name": "Jeff Welch",
1938 | "email": "whatthejeff@gmail.com"
1939 | },
1940 | {
1941 | "name": "Adam Harvey",
1942 | "email": "aharvey@php.net"
1943 | }
1944 | ],
1945 | "description": "Provides functionality to recursively process PHP variables",
1946 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1947 | "time": "2020-06-26T12:14:17+00:00"
1948 | },
1949 | {
1950 | "name": "sebastian/resource-operations",
1951 | "version": "3.0.2",
1952 | "source": {
1953 | "type": "git",
1954 | "url": "https://github.com/sebastianbergmann/resource-operations.git",
1955 | "reference": "0653718a5a629b065e91f774595267f8dc32e213"
1956 | },
1957 | "dist": {
1958 | "type": "zip",
1959 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213",
1960 | "reference": "0653718a5a629b065e91f774595267f8dc32e213",
1961 | "shasum": ""
1962 | },
1963 | "require": {
1964 | "php": "^7.3 || ^8.0"
1965 | },
1966 | "require-dev": {
1967 | "phpunit/phpunit": "^9.0"
1968 | },
1969 | "type": "library",
1970 | "extra": {
1971 | "branch-alias": {
1972 | "dev-master": "3.0-dev"
1973 | }
1974 | },
1975 | "autoload": {
1976 | "classmap": [
1977 | "src/"
1978 | ]
1979 | },
1980 | "notification-url": "https://packagist.org/downloads/",
1981 | "license": [
1982 | "BSD-3-Clause"
1983 | ],
1984 | "authors": [
1985 | {
1986 | "name": "Sebastian Bergmann",
1987 | "email": "sebastian@phpunit.de"
1988 | }
1989 | ],
1990 | "description": "Provides a list of PHP built-in functions that operate on resources",
1991 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
1992 | "time": "2020-06-26T12:16:22+00:00"
1993 | },
1994 | {
1995 | "name": "sebastian/type",
1996 | "version": "2.2.1",
1997 | "source": {
1998 | "type": "git",
1999 | "url": "https://github.com/sebastianbergmann/type.git",
2000 | "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a"
2001 | },
2002 | "dist": {
2003 | "type": "zip",
2004 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/86991e2b33446cd96e648c18bcdb1e95afb2c05a",
2005 | "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a",
2006 | "shasum": ""
2007 | },
2008 | "require": {
2009 | "php": "^7.3 || ^8.0"
2010 | },
2011 | "require-dev": {
2012 | "phpunit/phpunit": "^9.2"
2013 | },
2014 | "type": "library",
2015 | "extra": {
2016 | "branch-alias": {
2017 | "dev-master": "2.2-dev"
2018 | }
2019 | },
2020 | "autoload": {
2021 | "classmap": [
2022 | "src/"
2023 | ]
2024 | },
2025 | "notification-url": "https://packagist.org/downloads/",
2026 | "license": [
2027 | "BSD-3-Clause"
2028 | ],
2029 | "authors": [
2030 | {
2031 | "name": "Sebastian Bergmann",
2032 | "email": "sebastian@phpunit.de",
2033 | "role": "lead"
2034 | }
2035 | ],
2036 | "description": "Collection of value objects that represent the types of the PHP type system",
2037 | "homepage": "https://github.com/sebastianbergmann/type",
2038 | "time": "2020-07-05T08:31:53+00:00"
2039 | },
2040 | {
2041 | "name": "sebastian/version",
2042 | "version": "3.0.1",
2043 | "source": {
2044 | "type": "git",
2045 | "url": "https://github.com/sebastianbergmann/version.git",
2046 | "reference": "626586115d0ed31cb71483be55beb759b5af5a3c"
2047 | },
2048 | "dist": {
2049 | "type": "zip",
2050 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c",
2051 | "reference": "626586115d0ed31cb71483be55beb759b5af5a3c",
2052 | "shasum": ""
2053 | },
2054 | "require": {
2055 | "php": "^7.3 || ^8.0"
2056 | },
2057 | "type": "library",
2058 | "extra": {
2059 | "branch-alias": {
2060 | "dev-master": "3.0-dev"
2061 | }
2062 | },
2063 | "autoload": {
2064 | "classmap": [
2065 | "src/"
2066 | ]
2067 | },
2068 | "notification-url": "https://packagist.org/downloads/",
2069 | "license": [
2070 | "BSD-3-Clause"
2071 | ],
2072 | "authors": [
2073 | {
2074 | "name": "Sebastian Bergmann",
2075 | "email": "sebastian@phpunit.de",
2076 | "role": "lead"
2077 | }
2078 | ],
2079 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
2080 | "homepage": "https://github.com/sebastianbergmann/version",
2081 | "time": "2020-06-26T12:18:43+00:00"
2082 | },
2083 | {
2084 | "name": "symfony/console",
2085 | "version": "v5.1.2",
2086 | "source": {
2087 | "type": "git",
2088 | "url": "https://github.com/symfony/console.git",
2089 | "reference": "34ac555a3627e324b660e318daa07572e1140123"
2090 | },
2091 | "dist": {
2092 | "type": "zip",
2093 | "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123",
2094 | "reference": "34ac555a3627e324b660e318daa07572e1140123",
2095 | "shasum": ""
2096 | },
2097 | "require": {
2098 | "php": ">=7.2.5",
2099 | "symfony/polyfill-mbstring": "~1.0",
2100 | "symfony/polyfill-php73": "^1.8",
2101 | "symfony/polyfill-php80": "^1.15",
2102 | "symfony/service-contracts": "^1.1|^2",
2103 | "symfony/string": "^5.1"
2104 | },
2105 | "conflict": {
2106 | "symfony/dependency-injection": "<4.4",
2107 | "symfony/dotenv": "<5.1",
2108 | "symfony/event-dispatcher": "<4.4",
2109 | "symfony/lock": "<4.4",
2110 | "symfony/process": "<4.4"
2111 | },
2112 | "provide": {
2113 | "psr/log-implementation": "1.0"
2114 | },
2115 | "require-dev": {
2116 | "psr/log": "~1.0",
2117 | "symfony/config": "^4.4|^5.0",
2118 | "symfony/dependency-injection": "^4.4|^5.0",
2119 | "symfony/event-dispatcher": "^4.4|^5.0",
2120 | "symfony/lock": "^4.4|^5.0",
2121 | "symfony/process": "^4.4|^5.0",
2122 | "symfony/var-dumper": "^4.4|^5.0"
2123 | },
2124 | "suggest": {
2125 | "psr/log": "For using the console logger",
2126 | "symfony/event-dispatcher": "",
2127 | "symfony/lock": "",
2128 | "symfony/process": ""
2129 | },
2130 | "type": "library",
2131 | "extra": {
2132 | "branch-alias": {
2133 | "dev-master": "5.1-dev"
2134 | }
2135 | },
2136 | "autoload": {
2137 | "psr-4": {
2138 | "Symfony\\Component\\Console\\": ""
2139 | },
2140 | "exclude-from-classmap": [
2141 | "/Tests/"
2142 | ]
2143 | },
2144 | "notification-url": "https://packagist.org/downloads/",
2145 | "license": [
2146 | "MIT"
2147 | ],
2148 | "authors": [
2149 | {
2150 | "name": "Fabien Potencier",
2151 | "email": "fabien@symfony.com"
2152 | },
2153 | {
2154 | "name": "Symfony Community",
2155 | "homepage": "https://symfony.com/contributors"
2156 | }
2157 | ],
2158 | "description": "Symfony Console Component",
2159 | "homepage": "https://symfony.com",
2160 | "time": "2020-06-15T12:59:21+00:00"
2161 | },
2162 | {
2163 | "name": "symfony/polyfill-ctype",
2164 | "version": "v1.18.0",
2165 | "source": {
2166 | "type": "git",
2167 | "url": "https://github.com/symfony/polyfill-ctype.git",
2168 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454"
2169 | },
2170 | "dist": {
2171 | "type": "zip",
2172 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454",
2173 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454",
2174 | "shasum": ""
2175 | },
2176 | "require": {
2177 | "php": ">=5.3.3"
2178 | },
2179 | "suggest": {
2180 | "ext-ctype": "For best performance"
2181 | },
2182 | "type": "library",
2183 | "extra": {
2184 | "branch-alias": {
2185 | "dev-master": "1.18-dev"
2186 | },
2187 | "thanks": {
2188 | "name": "symfony/polyfill",
2189 | "url": "https://github.com/symfony/polyfill"
2190 | }
2191 | },
2192 | "autoload": {
2193 | "psr-4": {
2194 | "Symfony\\Polyfill\\Ctype\\": ""
2195 | },
2196 | "files": [
2197 | "bootstrap.php"
2198 | ]
2199 | },
2200 | "notification-url": "https://packagist.org/downloads/",
2201 | "license": [
2202 | "MIT"
2203 | ],
2204 | "authors": [
2205 | {
2206 | "name": "Gert de Pagter",
2207 | "email": "BackEndTea@gmail.com"
2208 | },
2209 | {
2210 | "name": "Symfony Community",
2211 | "homepage": "https://symfony.com/contributors"
2212 | }
2213 | ],
2214 | "description": "Symfony polyfill for ctype functions",
2215 | "homepage": "https://symfony.com",
2216 | "keywords": [
2217 | "compatibility",
2218 | "ctype",
2219 | "polyfill",
2220 | "portable"
2221 | ],
2222 | "time": "2020-07-14T12:35:20+00:00"
2223 | },
2224 | {
2225 | "name": "symfony/polyfill-intl-grapheme",
2226 | "version": "v1.18.0",
2227 | "source": {
2228 | "type": "git",
2229 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
2230 | "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5"
2231 | },
2232 | "dist": {
2233 | "type": "zip",
2234 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5",
2235 | "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5",
2236 | "shasum": ""
2237 | },
2238 | "require": {
2239 | "php": ">=5.3.3"
2240 | },
2241 | "suggest": {
2242 | "ext-intl": "For best performance"
2243 | },
2244 | "type": "library",
2245 | "extra": {
2246 | "branch-alias": {
2247 | "dev-master": "1.18-dev"
2248 | },
2249 | "thanks": {
2250 | "name": "symfony/polyfill",
2251 | "url": "https://github.com/symfony/polyfill"
2252 | }
2253 | },
2254 | "autoload": {
2255 | "psr-4": {
2256 | "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
2257 | },
2258 | "files": [
2259 | "bootstrap.php"
2260 | ]
2261 | },
2262 | "notification-url": "https://packagist.org/downloads/",
2263 | "license": [
2264 | "MIT"
2265 | ],
2266 | "authors": [
2267 | {
2268 | "name": "Nicolas Grekas",
2269 | "email": "p@tchwork.com"
2270 | },
2271 | {
2272 | "name": "Symfony Community",
2273 | "homepage": "https://symfony.com/contributors"
2274 | }
2275 | ],
2276 | "description": "Symfony polyfill for intl's grapheme_* functions",
2277 | "homepage": "https://symfony.com",
2278 | "keywords": [
2279 | "compatibility",
2280 | "grapheme",
2281 | "intl",
2282 | "polyfill",
2283 | "portable",
2284 | "shim"
2285 | ],
2286 | "time": "2020-07-14T12:35:20+00:00"
2287 | },
2288 | {
2289 | "name": "symfony/polyfill-intl-normalizer",
2290 | "version": "v1.18.0",
2291 | "source": {
2292 | "type": "git",
2293 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
2294 | "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e"
2295 | },
2296 | "dist": {
2297 | "type": "zip",
2298 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
2299 | "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e",
2300 | "shasum": ""
2301 | },
2302 | "require": {
2303 | "php": ">=5.3.3"
2304 | },
2305 | "suggest": {
2306 | "ext-intl": "For best performance"
2307 | },
2308 | "type": "library",
2309 | "extra": {
2310 | "branch-alias": {
2311 | "dev-master": "1.18-dev"
2312 | },
2313 | "thanks": {
2314 | "name": "symfony/polyfill",
2315 | "url": "https://github.com/symfony/polyfill"
2316 | }
2317 | },
2318 | "autoload": {
2319 | "psr-4": {
2320 | "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
2321 | },
2322 | "files": [
2323 | "bootstrap.php"
2324 | ],
2325 | "classmap": [
2326 | "Resources/stubs"
2327 | ]
2328 | },
2329 | "notification-url": "https://packagist.org/downloads/",
2330 | "license": [
2331 | "MIT"
2332 | ],
2333 | "authors": [
2334 | {
2335 | "name": "Nicolas Grekas",
2336 | "email": "p@tchwork.com"
2337 | },
2338 | {
2339 | "name": "Symfony Community",
2340 | "homepage": "https://symfony.com/contributors"
2341 | }
2342 | ],
2343 | "description": "Symfony polyfill for intl's Normalizer class and related functions",
2344 | "homepage": "https://symfony.com",
2345 | "keywords": [
2346 | "compatibility",
2347 | "intl",
2348 | "normalizer",
2349 | "polyfill",
2350 | "portable",
2351 | "shim"
2352 | ],
2353 | "time": "2020-07-14T12:35:20+00:00"
2354 | },
2355 | {
2356 | "name": "symfony/polyfill-mbstring",
2357 | "version": "v1.18.0",
2358 | "source": {
2359 | "type": "git",
2360 | "url": "https://github.com/symfony/polyfill-mbstring.git",
2361 | "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a"
2362 | },
2363 | "dist": {
2364 | "type": "zip",
2365 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a",
2366 | "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a",
2367 | "shasum": ""
2368 | },
2369 | "require": {
2370 | "php": ">=5.3.3"
2371 | },
2372 | "suggest": {
2373 | "ext-mbstring": "For best performance"
2374 | },
2375 | "type": "library",
2376 | "extra": {
2377 | "branch-alias": {
2378 | "dev-master": "1.18-dev"
2379 | },
2380 | "thanks": {
2381 | "name": "symfony/polyfill",
2382 | "url": "https://github.com/symfony/polyfill"
2383 | }
2384 | },
2385 | "autoload": {
2386 | "psr-4": {
2387 | "Symfony\\Polyfill\\Mbstring\\": ""
2388 | },
2389 | "files": [
2390 | "bootstrap.php"
2391 | ]
2392 | },
2393 | "notification-url": "https://packagist.org/downloads/",
2394 | "license": [
2395 | "MIT"
2396 | ],
2397 | "authors": [
2398 | {
2399 | "name": "Nicolas Grekas",
2400 | "email": "p@tchwork.com"
2401 | },
2402 | {
2403 | "name": "Symfony Community",
2404 | "homepage": "https://symfony.com/contributors"
2405 | }
2406 | ],
2407 | "description": "Symfony polyfill for the Mbstring extension",
2408 | "homepage": "https://symfony.com",
2409 | "keywords": [
2410 | "compatibility",
2411 | "mbstring",
2412 | "polyfill",
2413 | "portable",
2414 | "shim"
2415 | ],
2416 | "time": "2020-07-14T12:35:20+00:00"
2417 | },
2418 | {
2419 | "name": "symfony/polyfill-php73",
2420 | "version": "v1.18.0",
2421 | "source": {
2422 | "type": "git",
2423 | "url": "https://github.com/symfony/polyfill-php73.git",
2424 | "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca"
2425 | },
2426 | "dist": {
2427 | "type": "zip",
2428 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
2429 | "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca",
2430 | "shasum": ""
2431 | },
2432 | "require": {
2433 | "php": ">=5.3.3"
2434 | },
2435 | "type": "library",
2436 | "extra": {
2437 | "branch-alias": {
2438 | "dev-master": "1.18-dev"
2439 | },
2440 | "thanks": {
2441 | "name": "symfony/polyfill",
2442 | "url": "https://github.com/symfony/polyfill"
2443 | }
2444 | },
2445 | "autoload": {
2446 | "psr-4": {
2447 | "Symfony\\Polyfill\\Php73\\": ""
2448 | },
2449 | "files": [
2450 | "bootstrap.php"
2451 | ],
2452 | "classmap": [
2453 | "Resources/stubs"
2454 | ]
2455 | },
2456 | "notification-url": "https://packagist.org/downloads/",
2457 | "license": [
2458 | "MIT"
2459 | ],
2460 | "authors": [
2461 | {
2462 | "name": "Nicolas Grekas",
2463 | "email": "p@tchwork.com"
2464 | },
2465 | {
2466 | "name": "Symfony Community",
2467 | "homepage": "https://symfony.com/contributors"
2468 | }
2469 | ],
2470 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
2471 | "homepage": "https://symfony.com",
2472 | "keywords": [
2473 | "compatibility",
2474 | "polyfill",
2475 | "portable",
2476 | "shim"
2477 | ],
2478 | "time": "2020-07-14T12:35:20+00:00"
2479 | },
2480 | {
2481 | "name": "symfony/polyfill-php80",
2482 | "version": "v1.18.0",
2483 | "source": {
2484 | "type": "git",
2485 | "url": "https://github.com/symfony/polyfill-php80.git",
2486 | "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981"
2487 | },
2488 | "dist": {
2489 | "type": "zip",
2490 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981",
2491 | "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981",
2492 | "shasum": ""
2493 | },
2494 | "require": {
2495 | "php": ">=7.0.8"
2496 | },
2497 | "type": "library",
2498 | "extra": {
2499 | "branch-alias": {
2500 | "dev-master": "1.18-dev"
2501 | },
2502 | "thanks": {
2503 | "name": "symfony/polyfill",
2504 | "url": "https://github.com/symfony/polyfill"
2505 | }
2506 | },
2507 | "autoload": {
2508 | "psr-4": {
2509 | "Symfony\\Polyfill\\Php80\\": ""
2510 | },
2511 | "files": [
2512 | "bootstrap.php"
2513 | ],
2514 | "classmap": [
2515 | "Resources/stubs"
2516 | ]
2517 | },
2518 | "notification-url": "https://packagist.org/downloads/",
2519 | "license": [
2520 | "MIT"
2521 | ],
2522 | "authors": [
2523 | {
2524 | "name": "Ion Bazan",
2525 | "email": "ion.bazan@gmail.com"
2526 | },
2527 | {
2528 | "name": "Nicolas Grekas",
2529 | "email": "p@tchwork.com"
2530 | },
2531 | {
2532 | "name": "Symfony Community",
2533 | "homepage": "https://symfony.com/contributors"
2534 | }
2535 | ],
2536 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
2537 | "homepage": "https://symfony.com",
2538 | "keywords": [
2539 | "compatibility",
2540 | "polyfill",
2541 | "portable",
2542 | "shim"
2543 | ],
2544 | "time": "2020-07-14T12:35:20+00:00"
2545 | },
2546 | {
2547 | "name": "symfony/service-contracts",
2548 | "version": "v2.1.3",
2549 | "source": {
2550 | "type": "git",
2551 | "url": "https://github.com/symfony/service-contracts.git",
2552 | "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442"
2553 | },
2554 | "dist": {
2555 | "type": "zip",
2556 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442",
2557 | "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442",
2558 | "shasum": ""
2559 | },
2560 | "require": {
2561 | "php": ">=7.2.5",
2562 | "psr/container": "^1.0"
2563 | },
2564 | "suggest": {
2565 | "symfony/service-implementation": ""
2566 | },
2567 | "type": "library",
2568 | "extra": {
2569 | "branch-alias": {
2570 | "dev-master": "2.1-dev"
2571 | },
2572 | "thanks": {
2573 | "name": "symfony/contracts",
2574 | "url": "https://github.com/symfony/contracts"
2575 | }
2576 | },
2577 | "autoload": {
2578 | "psr-4": {
2579 | "Symfony\\Contracts\\Service\\": ""
2580 | }
2581 | },
2582 | "notification-url": "https://packagist.org/downloads/",
2583 | "license": [
2584 | "MIT"
2585 | ],
2586 | "authors": [
2587 | {
2588 | "name": "Nicolas Grekas",
2589 | "email": "p@tchwork.com"
2590 | },
2591 | {
2592 | "name": "Symfony Community",
2593 | "homepage": "https://symfony.com/contributors"
2594 | }
2595 | ],
2596 | "description": "Generic abstractions related to writing services",
2597 | "homepage": "https://symfony.com",
2598 | "keywords": [
2599 | "abstractions",
2600 | "contracts",
2601 | "decoupling",
2602 | "interfaces",
2603 | "interoperability",
2604 | "standards"
2605 | ],
2606 | "time": "2020-07-06T13:23:11+00:00"
2607 | },
2608 | {
2609 | "name": "symfony/string",
2610 | "version": "v5.1.2",
2611 | "source": {
2612 | "type": "git",
2613 | "url": "https://github.com/symfony/string.git",
2614 | "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298"
2615 | },
2616 | "dist": {
2617 | "type": "zip",
2618 | "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298",
2619 | "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298",
2620 | "shasum": ""
2621 | },
2622 | "require": {
2623 | "php": ">=7.2.5",
2624 | "symfony/polyfill-ctype": "~1.8",
2625 | "symfony/polyfill-intl-grapheme": "~1.0",
2626 | "symfony/polyfill-intl-normalizer": "~1.0",
2627 | "symfony/polyfill-mbstring": "~1.0",
2628 | "symfony/polyfill-php80": "~1.15"
2629 | },
2630 | "require-dev": {
2631 | "symfony/error-handler": "^4.4|^5.0",
2632 | "symfony/http-client": "^4.4|^5.0",
2633 | "symfony/translation-contracts": "^1.1|^2",
2634 | "symfony/var-exporter": "^4.4|^5.0"
2635 | },
2636 | "type": "library",
2637 | "extra": {
2638 | "branch-alias": {
2639 | "dev-master": "5.1-dev"
2640 | }
2641 | },
2642 | "autoload": {
2643 | "psr-4": {
2644 | "Symfony\\Component\\String\\": ""
2645 | },
2646 | "files": [
2647 | "Resources/functions.php"
2648 | ],
2649 | "exclude-from-classmap": [
2650 | "/Tests/"
2651 | ]
2652 | },
2653 | "notification-url": "https://packagist.org/downloads/",
2654 | "license": [
2655 | "MIT"
2656 | ],
2657 | "authors": [
2658 | {
2659 | "name": "Nicolas Grekas",
2660 | "email": "p@tchwork.com"
2661 | },
2662 | {
2663 | "name": "Symfony Community",
2664 | "homepage": "https://symfony.com/contributors"
2665 | }
2666 | ],
2667 | "description": "Symfony String component",
2668 | "homepage": "https://symfony.com",
2669 | "keywords": [
2670 | "grapheme",
2671 | "i18n",
2672 | "string",
2673 | "unicode",
2674 | "utf-8",
2675 | "utf8"
2676 | ],
2677 | "time": "2020-06-11T12:16:36+00:00"
2678 | },
2679 | {
2680 | "name": "theseer/tokenizer",
2681 | "version": "1.2.0",
2682 | "source": {
2683 | "type": "git",
2684 | "url": "https://github.com/theseer/tokenizer.git",
2685 | "reference": "75a63c33a8577608444246075ea0af0d052e452a"
2686 | },
2687 | "dist": {
2688 | "type": "zip",
2689 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
2690 | "reference": "75a63c33a8577608444246075ea0af0d052e452a",
2691 | "shasum": ""
2692 | },
2693 | "require": {
2694 | "ext-dom": "*",
2695 | "ext-tokenizer": "*",
2696 | "ext-xmlwriter": "*",
2697 | "php": "^7.2 || ^8.0"
2698 | },
2699 | "type": "library",
2700 | "autoload": {
2701 | "classmap": [
2702 | "src/"
2703 | ]
2704 | },
2705 | "notification-url": "https://packagist.org/downloads/",
2706 | "license": [
2707 | "BSD-3-Clause"
2708 | ],
2709 | "authors": [
2710 | {
2711 | "name": "Arne Blankerts",
2712 | "email": "arne@blankerts.de",
2713 | "role": "Developer"
2714 | }
2715 | ],
2716 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
2717 | "time": "2020-07-12T23:59:07+00:00"
2718 | },
2719 | {
2720 | "name": "webmozart/assert",
2721 | "version": "1.9.1",
2722 | "source": {
2723 | "type": "git",
2724 | "url": "https://github.com/webmozart/assert.git",
2725 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
2726 | },
2727 | "dist": {
2728 | "type": "zip",
2729 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
2730 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
2731 | "shasum": ""
2732 | },
2733 | "require": {
2734 | "php": "^5.3.3 || ^7.0 || ^8.0",
2735 | "symfony/polyfill-ctype": "^1.8"
2736 | },
2737 | "conflict": {
2738 | "phpstan/phpstan": "<0.12.20",
2739 | "vimeo/psalm": "<3.9.1"
2740 | },
2741 | "require-dev": {
2742 | "phpunit/phpunit": "^4.8.36 || ^7.5.13"
2743 | },
2744 | "type": "library",
2745 | "autoload": {
2746 | "psr-4": {
2747 | "Webmozart\\Assert\\": "src/"
2748 | }
2749 | },
2750 | "notification-url": "https://packagist.org/downloads/",
2751 | "license": [
2752 | "MIT"
2753 | ],
2754 | "authors": [
2755 | {
2756 | "name": "Bernhard Schussek",
2757 | "email": "bschussek@gmail.com"
2758 | }
2759 | ],
2760 | "description": "Assertions to validate method input/output with nice error messages.",
2761 | "keywords": [
2762 | "assert",
2763 | "check",
2764 | "validate"
2765 | ],
2766 | "time": "2020-07-08T17:02:28+00:00"
2767 | }
2768 | ],
2769 | "aliases": [],
2770 | "minimum-stability": "dev",
2771 | "stability-flags": [],
2772 | "prefer-stable": true,
2773 | "prefer-lowest": false,
2774 | "platform": {
2775 | "php": "^7.3"
2776 | },
2777 | "platform-dev": [],
2778 | "plugin-api-version": "2.0.0"
2779 | }
2780 |
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 | ./tests/Unit
10 |
11 |
12 | ./tests/Feature
13 |
14 |
15 |
16 |
17 | ./app
18 | ./src
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/ApiResponse.php:
--------------------------------------------------------------------------------
1 | '. $this->message;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/Invoice/InvoiceItem.php:
--------------------------------------------------------------------------------
1 | setName($name);
24 | $this->setPrice($price);
25 | $this->setCommandName($commandName);
26 | $this->setRefCommand($refCommand);
27 | }
28 |
29 | public function getName()
30 | {
31 | return $this->name;
32 | }
33 |
34 | public function getPrice()
35 | {
36 | return $this->price;
37 | }
38 |
39 | public function getCommandName()
40 | {
41 | return $this->commandName;
42 | }
43 |
44 | public function getRefCommand()
45 | {
46 | return $this->refCommand;
47 | }
48 |
49 | public function setName($name)
50 | {
51 | $this->name = $name;
52 | }
53 |
54 | public function setPrice($price)
55 | {
56 | if (is_int($price) && $price > 100)
57 | {
58 | $this->price = $price;
59 | }
60 | else
61 | {
62 | throw new Exception('Price must be a number and greather than 100 !');
63 | }
64 | }
65 |
66 | public function setCommandName($commandName)
67 | {
68 | $this->commandName = $commandName;
69 | }
70 |
71 | public function setRefCommand($refCommand)
72 | {
73 | $this->refCommand = $refCommand;
74 | }
75 | }
--------------------------------------------------------------------------------
/src/PayTech.php:
--------------------------------------------------------------------------------
1 | $invoiceItem->getName(),
23 | 'item_price' => $invoiceItem->getPrice(),
24 | 'command_name' => $invoiceItem->getCommandName(),
25 | 'ref_command' => $invoiceItem->getRefCommand(),
26 | 'env' => Config::getEnv(),
27 | 'currency' => Config::getCurrency(),
28 | 'ipn_url' => Config::getIpnUrl(),
29 | 'success_url' => Config::getIsMobile() ? Config::MOBILE_SUCCESS_URL : Config::getSuccessUrl(),
30 | 'cancel_url' => Config::getIsMobile() ? Config::MOBILE_CANCEL_URL : Config::getCancelUrl(),
31 | 'custom_field' => CustomField::retrieve()->toJSONString()
32 | ], []);
33 |
34 | // @codeCoverageIgnoreStart
35 | if (array_key_exists('token', $response))
36 | {
37 | ApiResponse::setSuccess(1);
38 | ApiResponse::setToken($response['token']);
39 | ApiResponse::setRedirectUrl(Config::ROOT_URL_BASE . Config::PAYMENT_REDIRECT_PATH . $response['token']);
40 | }
41 | else if(array_key_exists('error', $response))
42 | {
43 | ApiResponse::setSuccess(-1);
44 | ApiResponse::setErrors($response['error']);
45 | }
46 | else if(array_key_exists('message', $response))
47 | {
48 | ApiResponse::setSuccess(-1);
49 | ApiResponse::setErrors($response['message']);
50 | }
51 | else
52 | {
53 | ApiResponse::setSuccess(-1);
54 | ApiResponse::setErrors(['Internal Error']);
55 | }
56 | // @codeCoverageIgnoreEnd
57 |
58 | }
59 | }
--------------------------------------------------------------------------------
/src/Utils/Check.php:
--------------------------------------------------------------------------------
1 | 'application/json;charset=utf-8',
44 | 'API_KEY' => \PayTech\Config::getApiKey(),
45 | 'API_SECRET' => \PayTech\Config::getApiSecret()
46 | ]);
47 |
48 | array_merge(self::$headers, $headers);
49 |
50 | $jsonPayload = json_encode($data);
51 |
52 | $response = Requests::post($url, self::$headers, $jsonPayload, ['timeout' => self::$timeout]);
53 |
54 | return json_decode($response->body, true);
55 | }
56 |
57 | public static function post($url, $data = [], $headers = [])
58 | {
59 | self::setHeaders([
60 | 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8',
61 | 'API_KEY' => \PayTech\Config::getApiKey(),
62 | 'API_SECRET' => \PayTech\Config::getApiSecret()
63 | ]);
64 |
65 | array_merge(self::$headers, $headers);
66 |
67 | $response = Requests::post($url, self::$headers, $data, ['timeout' => self::$timeout]);
68 |
69 | return json_decode($response->body, true);
70 | }
71 |
72 | public static function get($url, $headers = [])
73 | {
74 | self::setHeaders([
75 | 'API_KEY' => \PayTech\Config::getApiKey(),
76 | 'API_SECRET' => \PayTech\Config::getApiSecret()
77 | ]);
78 |
79 | array_merge(self::$headers, $headers);
80 |
81 | $response = Requests::get($url, self::$headers, ['timeout' => self::$timeout]);
82 |
83 | return json_decode($response->body, true);
84 | }
85 |
86 | }
--------------------------------------------------------------------------------
/src/Utils/Serializer.php:
--------------------------------------------------------------------------------
1 | setData($data);
18 | }
19 |
20 | public function getData()
21 | {
22 | return $this->data;
23 | }
24 |
25 | public function setData(Array $data)
26 | {
27 | $this->data = $data;
28 | }
29 |
30 | public function toJSONString()
31 | {
32 | return json_encode($this->data);
33 | }
34 |
35 | public function toXMLString()
36 | {
37 | return $this->arrayToXml($this->data, '');
38 | }
39 |
40 | public function toQueryString()
41 | {
42 | return http_build_query($this->data);
43 | }
44 |
45 | // @codeCoverageIgnoreStart
46 | private function arrayToXml($array, $rootElement = null, $xml = null) {
47 | $xmlDocument = $xml;
48 |
49 | if ($xmlDocument === null)
50 | {
51 | $xmlDocument = new \SimpleXMLElement($rootElement !== null ? $rootElement : '');
52 | }
53 |
54 | foreach ($array as $key => $value)
55 | {
56 | is_array($value) ? $this->arrayToXml($value, $key, $xmlDocument->addChild($key)) : $xmlDocument->addChild($key, $value);
57 | }
58 |
59 | return $xmlDocument->asXML();
60 | }
61 | // @codeCoverageIgnoreEnd
62 | }
--------------------------------------------------------------------------------
/tests/Unit/Exceptions/CurrencyExceptionTest.php:
--------------------------------------------------------------------------------
1 | expectException(\PayTech\Exceptions\CurrencyException::class);
16 | throw new \PayTech\Exceptions\CurrencyException('Test currecny exception', 999);
17 | });
18 |
19 | test('Instance of CurrencyException should have a message', function () {
20 | $this->assertIsString((new \PayTech\Exceptions\CurrencyException('Test currecny exception', 999))->__toString());
21 | });
--------------------------------------------------------------------------------
/tests/Unit/Invoice/InvoiceItemTest.php:
--------------------------------------------------------------------------------
1 | assertClassHasAttribute('name', InvoiceItem::class);
19 | });
20 |
21 | it('Should have price attribute', function () {
22 | $this->assertClassHasAttribute('price', InvoiceItem::class);
23 | });
24 |
25 | it('Should have command name attribute', function () {
26 | $this->assertClassHasAttribute('commandName', InvoiceItem::class);
27 | });
28 |
29 | it('Should have reference command attribute', function () {
30 | $this->assertClassHasAttribute('refCommand', InvoiceItem::class);
31 | });
32 |
33 | it('Should instantiate InvoiceItem class', function () {
34 | $invoiceItem = new InvoiceItem('PS4', 225000, 'command-test', 'ref-command');
35 | $this->assertInstanceOf(InvoiceItem::class, $invoiceItem);
36 | });
37 |
38 | it('Should be string for name, command name and ref name', function () {
39 | $invoiceItem = new InvoiceItem('PS4', 225000, 'command-test', 'ref-command');
40 | $this->assertIsString($invoiceItem->getName());
41 | $this->assertIsString($invoiceItem->getCommandName());
42 | $this->assertIsString($invoiceItem->getRefCommand());
43 | });
44 |
45 | it('Should change price', function () {
46 | $invoiceItem = new InvoiceItem('PS4', 225000, 'command-test', 'ref-command');
47 | $this->assertIsInt($invoiceItem->getPrice());
48 | $invoiceItem->setPrice(250000);
49 | $this->assertNotEquals(225000, $invoiceItem->getPrice());
50 | });
51 |
52 | it('Should raise an exception when price is not a number', function () {
53 | $this->expectException(\Exception::class);
54 | $invoiceItem = new InvoiceItem('PS4', '225000', 'command-test', 'ref-command');
55 | });
56 |
--------------------------------------------------------------------------------
/tests/Unit/PayTech/ApiResponseTest.php:
--------------------------------------------------------------------------------
1 | assertClassHasStaticAttribute('success', ApiResponse::class);
16 | $this->assertClassHasStaticAttribute('token', ApiResponse::class);
17 | $this->assertClassHasStaticAttribute('errors', ApiResponse::class);
18 | $this->assertClassHasStaticAttribute('redirectUrl', ApiResponse::class);
19 | });
20 |
21 |
22 | it('Shoud set dummy values', function () {
23 | ApiResponse::setErrors('Fatal Error');
24 | ApiResponse::setSuccess(1);
25 | ApiResponse::setToken('dumytoken54545a4s5a');
26 | ApiResponse::setRedirectUrl('http://localhost');
27 | $this->assertIsInt(ApiResponse::getSuccess());
28 | $this->assertIsString(ApiResponse::getToken());
29 | $this->assertIsString(ApiResponse::getErrors());
30 | $this->assertIsString(ApiResponse::getRedirectUrl());
31 | });
32 |
--------------------------------------------------------------------------------
/tests/Unit/PayTech/ConfigTest.php:
--------------------------------------------------------------------------------
1 | assertSame(\PayTech\Enums\Currency::XOF, strtoupper(Config::getCurrency()));
16 | });
17 |
18 | test('LiveMode should be activate by default', function () {
19 | $this->assertTrue(Config::getLiveMode());
20 | });
21 |
22 | test('TestMode should be disable by default', function () {
23 | $this->assertFalse(Config::getTestMode());
24 | });
25 |
26 | test('Mobile config should be disable by default', function () {
27 | $this->assertFalse(Config::getIsMobile());
28 | });
29 |
30 | test('Notification Urls should be empty by default', function () {
31 | $this->assertEmpty(Config::getIpnUrl());
32 | $this->assertEmpty(Config::getSuccessUrl());
33 | $this->assertEmpty(Config::getCancelUrl());
34 | });
35 |
36 | it('Should set some Config attributes', function () {
37 | Config::setApiKey('saplspalsa4545s4a5s4');
38 | Config::setApiSecret('saplspalsa4545s4a5s4');
39 | Config::setCurrency(\PayTech\Enums\Currency::USD);
40 | Config::setEnv(\PayTech\Enums\Environment::TEST);
41 | Config::setIsMobile(false);
42 | Config::setIpnUrl('http://papihack/dashboard/');
43 | Config::setSuccessUrl('http://papihack/dashboard/');
44 | Config::setCancelUrl('http://papihack/dashboard/');
45 |
46 | $this->assertIsString(Config::getApiKey());
47 | $this->assertIsString(Config::getApiSecret());
48 | $this->assertIsString(Config::getCurrency());
49 | $this->assertIsBool(Config::getLiveMode());
50 | $this->assertIsBool(Config::getTestMode());
51 | $this->assertIsBool(Config::getIsMobile());
52 | $this->assertIsString(Config::getIpnUrl());
53 | $this->assertIsString(Config::getSuccessUrl());
54 | $this->assertIsString(Config::getCancelUrl());
55 | });
56 |
57 | it('Should raise an CurrencyException when currency is not allowed', function () {
58 | $this->expectException(\PayTech\Exceptions\CurrencyException::class);
59 | Config::setCurrency('dummy currency');
60 | });
61 |
62 | it('Should raise an Exception when env is not allowed', function () {
63 | $this->expectException(\Exception::class);
64 | Config::setEnv('dummyEnv');
65 | });
66 |
67 | it('Should set Env when env is allowed', function () {
68 | Config::setEnv(\PayTech\Enums\Environment::TEST);
69 | $this->assertIsString(Config::getEnv());
70 | });
--------------------------------------------------------------------------------
/tests/Unit/PayTech/CustomFieldTest.php:
--------------------------------------------------------------------------------
1 | assertClassHasStaticAttribute('data', CustomField::class);
16 | });
17 |
18 | test('The data property should be an empty Array', function () {
19 | $this->assertIsArray(CustomField::retrieve()->getData());
20 | $this->assertEmpty(CustomField::retrieve()->getData());
21 | });
22 |
23 | test('data property should be an empty Array', function () {
24 | CustomField::push(['test' => 'this is a test']);
25 | $this->assertNotEmpty(CustomField::retrieve()->getData());
26 | });
27 |
28 | it('Shoud have an entry named test', function () {
29 | CustomField::push(['test' => 'this is a test']);
30 | $this->assertTrue(array_key_exists('test', CustomField::retrieve()->getData()));
31 | });
32 |
33 | it('Shoud have an entry named test & price', function () {
34 | CustomField::push(['test' => 'this is a test']);
35 | CustomField::set('price', 500);
36 | $this->assertTrue(array_key_exists('test', CustomField::retrieve()->getData()));
37 | $this->assertTrue(array_key_exists('price', CustomField::retrieve()->getData()));
38 | $this->assertEquals(2, count(CustomField::retrieve()->getData()));
39 | });
40 |
41 | it('Shoud set an dummy entry', function () {
42 | CustomField::set('dummy', 'test');
43 | $this->assertTrue(array_key_exists('dummy', CustomField::retrieve()->getData()));
44 | $this->assertEquals(3, count(CustomField::retrieve()->getData()));
45 | });
46 |
47 | it('Shoud get dummy value', function () {
48 | $this->assertIsString(CustomField::find('dummy'));
49 | });
50 |
51 | it('Should raise an exception when an entry not exist', function () {
52 | $this->expectException(\Exception::class);
53 | CustomField::find('nothin');
54 | });
--------------------------------------------------------------------------------
/tests/Unit/PayTech/PayTechTest.php:
--------------------------------------------------------------------------------
1 | assertIsNumeric(\PayTech\ApiResponse::getSuccess());
17 | });
18 |
19 | it('Should have response after sending data', function () {
20 | $this->assertIsInt(\PayTech\ApiResponse::getSuccess());
21 | });
--------------------------------------------------------------------------------
/tests/Unit/Utils/CheckTest.php:
--------------------------------------------------------------------------------
1 | assertTrue(Check::isCurrencyAllowed('EUR'));
16 | });
17 |
18 | it('Should allow XOF currency', function() {
19 | $this->assertTrue(Check::isCurrencyAllowed('xof'));
20 | });
21 |
22 | it('Should not allow dummy currency', function() {
23 | $this->assertFalse(Check::isCurrencyAllowed('dummyCurrency'));
24 | });
25 |
26 | it('Should allow Test Env', function() {
27 | $this->assertTrue(Check::isEnvAllowed('test'));
28 | });
29 |
30 | it('Should allow PROD Env', function() {
31 | $this->assertTrue(Check::isEnvAllowed('PrOD'));
32 | });
33 |
34 | it('Should not allow dummy env', function() {
35 | $this->assertFalse(Check::isEnvAllowed('dummyEnv'));
36 | });
--------------------------------------------------------------------------------
/tests/Unit/Utils/MakeRequestTest.php:
--------------------------------------------------------------------------------
1 | assertClassHasStaticAttribute('headers', MakeRequest::class);
16 | $this->assertClassHasStaticAttribute('timeout', MakeRequest::class);
17 | });
18 |
19 | test('Timeout attribute should be 15 by default', function () {
20 | $this->assertEquals(15, MakeRequest::getTimeout());
21 | });
22 |
23 | test('Headers attribute should be empty by default', function () {
24 | $this->assertGreaterThanOrEqual(1, MakeRequest::getHeaders());
25 | });
26 |
27 | it('Should change default timeout value & set headers attribute', function () {
28 | MakeRequest::setTimeout(20);
29 | MakeRequest::setHeaders(['ACCEPT' => 'application/json;charset=utf-8']);
30 | $this->assertNotEmpty(MakeRequest::getHeaders());
31 | $this->assertGreaterThanOrEqual(15, MakeRequest::getTimeout());
32 | });
33 |
34 | it('Should make a post request with json data', function () {
35 | $response = MakeRequest::json('http://papihack/dashboard/', ['name' => 'papi']);
36 | $this->assertEmpty($response);
37 | });
38 |
39 | it('Should make a post request', function () {
40 | $response = MakeRequest::post('http://papihack/dashboard/', ['name' => 'papi']);
41 | $this->assertEmpty($response);
42 | });
43 |
44 | it('Should make a get request', function () {
45 | $response = MakeRequest::get('http://papihack/dashboard/');
46 | $this->assertEmpty($response);
47 | });
48 |
--------------------------------------------------------------------------------
/tests/Unit/Utils/SerializerTest.php:
--------------------------------------------------------------------------------
1 | assertIsString((new Serializer(['nom' => 'papi', 'job' => 'coder']))->toQueryString());
16 | });
17 |
18 | it('Should return a JSON', function() {
19 | $this->assertJsonStringEqualsJsonString(json_encode(['nom' => 'papi', 'job' => 'coder']), (new Serializer(['nom' => 'papi', 'job' => 'coder']))->toJSONString());
20 | });
21 |
22 | it('Should return a XML', function() {
23 | $this->assertXmlStringEqualsXmlString("papicoder",
24 | (new Serializer(['nom' => 'papi', 'job' => 'coder']))->toXMLString());
25 | });
--------------------------------------------------------------------------------