├── .editorconfig ├── .github ├── dependabot.yml └── workflows │ ├── static.yml │ └── tests.yml ├── .gitignore ├── .php-cs-fixer.dist.php ├── CHANGELOG.md ├── LICENSE.txt ├── QuickPay ├── API │ ├── Client.php │ ├── Constants.php │ ├── Exceptions │ │ ├── GenericException.php │ │ └── TimeoutException.php │ ├── Request.php │ └── Response.php └── QuickPay.php ├── README.md ├── Tests └── api │ ├── ExceptionTest.php │ ├── RequestTest.php │ └── ResponseTest.php ├── composer.json ├── composer.lock ├── phpcs.xml ├── phpstan.neon └── phpunit.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | end_of_line = lf 3 | insert_final_newline = true 4 | 5 | [*.php] 6 | indent_style = space 7 | indent_size = 4 8 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "composer" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | -------------------------------------------------------------------------------- /.github/workflows/static.yml: -------------------------------------------------------------------------------- 1 | name: Static Analysis 2 | 3 | on: 4 | push: 5 | branches: [ develop ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | cs: 11 | runs-on: ubuntu-latest 12 | 13 | name: Code Style 14 | 15 | steps: 16 | - name: Checkout 17 | uses: actions/checkout@v2 18 | 19 | - name: Setup PHP 20 | uses: shivammathur/setup-php@v2 21 | with: 22 | php-version: 8.0 23 | tools: composer:v2 24 | coverage: none 25 | 26 | - name: Install Dependencies 27 | run: composer update --no-interaction --no-progress --ansi 28 | 29 | - name: Run PHP-CS-Fixer 30 | run: vendor/bin/php-cs-fixer fix -v --allow-risky=yes --dry-run --ansi 31 | 32 | phpstan: 33 | runs-on: ubuntu-latest 34 | strategy: 35 | matrix: 36 | dependency-version: [prefer-lowest, prefer-stable] 37 | 38 | name: PHPStan ${{ matrix.dependency-version }} 39 | 40 | steps: 41 | - name: Checkout 42 | uses: actions/checkout@v2 43 | 44 | - name: Setup PHP 45 | uses: shivammathur/setup-php@v2 46 | with: 47 | php-version: 8.0 48 | tools: composer:v2 49 | coverage: none 50 | 51 | - name: Install Dependencies 52 | run: composer update --prefer-stable --no-interaction --no-progress --ansi 53 | 54 | - name: Run PHPStan 55 | run: vendor/bin/phpstan analyse --no-progress --ansi 56 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Run Tests 2 | 3 | on: 4 | push: 5 | branches: [ develop ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | ci: 11 | runs-on: ${{ matrix.os }} 12 | strategy: 13 | matrix: 14 | os: [ubuntu-latest, macos-latest] 15 | php: ['8.0', '8.1'] 16 | dependency-version: [prefer-lowest, prefer-stable] 17 | exclude: 18 | - php: 8.1 19 | dependency-version: prefer-lowest 20 | - php: 8.1 21 | os: macos-latest 22 | - php: 8.1 23 | os: windows-latest 24 | 25 | 26 | name: PHP ${{ matrix.php }} - ${{ matrix.os }} - ${{ matrix.dependency-version }} 27 | 28 | steps: 29 | - name: Checkout 30 | uses: actions/checkout@v2 31 | 32 | - name: Setup PHP 33 | uses: shivammathur/setup-php@v2 34 | with: 35 | php-version: ${{ matrix.php }} 36 | tools: composer:v2 37 | coverage: none 38 | 39 | - name: Setup Problem Matches 40 | run: | 41 | echo "::add-matcher::${{ runner.tool_cache }}/php.json" 42 | echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" 43 | - name: Install PHP dependencies 44 | run: composer update --${{ matrix.dependency-version }} --no-interaction --no-progress --ansi 45 | 46 | - name: Unit Tests 47 | run: ./vendor/bin/phpunit --colors=always 48 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | composer.phar 3 | .php-cs-fixer.cache 4 | .phpunit.result.cache 5 | -------------------------------------------------------------------------------- /.php-cs-fixer.dist.php: -------------------------------------------------------------------------------- 1 | in(__DIR__ . DIRECTORY_SEPARATOR . 'QuickPay') 5 | ->in(__DIR__ . DIRECTORY_SEPARATOR . 'Tests') 6 | ->append(['.php-cs-fixer.dist.php']); 7 | 8 | $rules = [ 9 | '@Symfony' => true, 10 | '@PSR2' => true, 11 | 'phpdoc_to_comment' => false, 12 | 'array_syntax' => ['syntax' => 'short'], 13 | 'yoda_style' => false, 14 | 'binary_operator_spaces' => [ 15 | 'operators' => [ 16 | '=>' => 'align', 17 | '=' => 'align', 18 | ], 19 | ], 20 | 'concat_space' => ['spacing' => 'one'], 21 | 'not_operator_with_space' => false, 22 | ]; 23 | 24 | $rules['increment_style'] = ['style' => 'post']; 25 | 26 | return (new PhpCsFixer\Config()) 27 | ->setUsingCache(true) 28 | ->setRules($rules) 29 | ->setFinder($finder); 30 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | ## 2.0.0 - 2022-09-19 4 | ### Changed 5 | - **Breaking:** Updated SDK to work with PHP8. Version 2 requires PHP8 as a minimum now. 6 | 7 | ## 1.1.0 - 2019-12-16 8 | 9 | - Support for additional headers in requests - fixes [issue 56](https://github.com/QuickPay/quickpay-php-client/issues/56). 10 | 11 | ## 1.0.1 - 2017-09-14 12 | 13 | - Fix for [issue 51](https://github.com/QuickPay/quickpay-php-client/issues/51). 14 | 15 | ## 1.0.0 - 2016-04-19 16 | 17 | - First stable release of QuickPay PHP Client for QuickPay api v10. 18 | - This release follows PSR2 standards and is not comptible with the previous version. 19 | - All methods are now in **camelCase** format (PSR1.Methods.CamelCapsMethodName.NotCamelCaps). 20 | - In QuickPay\API\Response `as_raw` changed to `asRaw`, `as_object` changed to `asObject`, `as_array` changed to `asArray`, `http_status` changed to `httpStatus` and finally `is_success` changed to `isSuccess`. 21 | - Also QuickPay\QuickPay does not `require_once` for needed files anymore, so the file does **not have any side effects** (PSR1.Files.SideEffects.FoundWithSymbols). 22 | - You should use an autoloader, e.g. by utilizing `composer` for the files to be included correctly or simply `require_once` yourself. 23 | - See the [full list of changes](https://github.com/QuickPay/quickpay-php-client/commit/d59ca916843a4bd72b29b2b5fc1bfe918bfbc637) 24 | 25 | ## 0.1.0 - 2016-04-14 26 | 27 | - First versioned release of QuickPay PHP Client for QuickPay api v10. 28 | - This release does not break backward compability with previous development versions of the client. 29 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 QuickPay 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 13 | all 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 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /QuickPay/API/Client.php: -------------------------------------------------------------------------------- 1 | auth_string = $auth_string; 22 | 23 | // Create cURL instance. 24 | $this->ch = curl_init(); 25 | curl_setopt_array($this->ch, [ 26 | CURLOPT_RETURNTRANSFER => true, 27 | CURLOPT_SSL_VERIFYPEER => true, 28 | CURLOPT_HTTPAUTH => CURLAUTH_BASIC, 29 | ]); 30 | 31 | $this->headers = [ 32 | 'Accept-Version: v10', 33 | 'Accept: application/json', 34 | ]; 35 | if (!empty($this->auth_string)) { 36 | $this->headers[] = 'Authorization: Basic ' . base64_encode($this->auth_string); 37 | } 38 | 39 | // Add custom headers and set headers in cURL object. 40 | $this->setHeaders($additional_headers); 41 | } 42 | 43 | public function shutdown(): void 44 | { 45 | if (!empty($this->ch)) { 46 | curl_close($this->ch); 47 | } 48 | } 49 | 50 | public function setHeaders(array $additional_headers): bool 51 | { 52 | if (!empty($additional_headers)) { 53 | $this->headers = array_merge($this->headers, $additional_headers); 54 | } 55 | 56 | return curl_setopt($this->ch, CURLOPT_HTTPHEADER, $this->headers); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /QuickPay/API/Constants.php: -------------------------------------------------------------------------------- 1 | client = $client; 16 | } 17 | 18 | public function get(string $path, array $query = []): Response 19 | { 20 | if (!empty($query)) { 21 | if (strpos($path, '?') === false) { 22 | $path .= '?' . http_build_query($query, '', '&'); 23 | } else { 24 | $path .= ini_get('arg_separator.output') . http_build_query($query, '', '&'); 25 | } 26 | } 27 | 28 | $this->setUrl($path); 29 | 30 | return $this->execute('GET'); 31 | } 32 | 33 | public function post(string $path, array $form = []): Response 34 | { 35 | $this->setUrl($path); 36 | 37 | return $this->execute('POST', $form); 38 | } 39 | 40 | public function put(string $path, array $form = []): Response 41 | { 42 | $this->setUrl($path); 43 | 44 | return $this->execute('PUT', $form); 45 | } 46 | 47 | public function patch(string $path, array $form = []): Response 48 | { 49 | $this->setUrl($path); 50 | 51 | return $this->execute('PATCH', $form); 52 | } 53 | 54 | public function delete(string $path, array $form = []): Response 55 | { 56 | $this->setUrl($path); 57 | 58 | return $this->execute('DELETE', $form); 59 | } 60 | 61 | protected function setUrl(string $url): void 62 | { 63 | curl_setopt($this->client->ch, CURLOPT_URL, Constants::API_URL . trim($url, '/')); 64 | } 65 | 66 | protected function execute(string $request_type, array $form = []): Response 67 | { 68 | // Set the HTTP request type 69 | curl_setopt($this->client->ch, CURLOPT_CUSTOMREQUEST, $request_type); 70 | 71 | // If additional data is delivered, we will send it along with the API request 72 | if (is_array($form) && !empty($form)) { 73 | curl_setopt($this->client->ch, CURLOPT_POSTFIELDS, $this->httpBuildQuery($form)); 74 | } 75 | 76 | // Set Timeout 77 | curl_setopt($this->client->ch, CURLOPT_TIMEOUT, QuickPay::$timeout); 78 | 79 | /** @var resource $fh_header */ 80 | $fh_header = fopen('php://temp', 'w+b'); 81 | curl_setopt($this->client->ch, CURLOPT_WRITEHEADER, $fh_header); 82 | curl_setopt($this->client->ch, CURLINFO_HEADER_OUT, true); 83 | 84 | // Execute the request 85 | $response_data = (string) curl_exec($this->client->ch); 86 | 87 | if (($errno = curl_errno($this->client->ch)) !== 0) { 88 | // An error occurred 89 | fclose($fh_header); 90 | 91 | // Handle timeout with a special either callable or exception 92 | // allows for automatic failover on the application layer 93 | // as QP is often slow at noticing that they have problems 94 | if ($errno === CURLE_OPERATION_TIMEOUTED) { 95 | $onTimeout = QuickPay::$onTimeout ?? function () { 96 | throw new TimeoutException(curl_error($this->client->ch), curl_errno($this->client->ch)); 97 | }; 98 | 99 | $onTimeout(); 100 | } 101 | 102 | throw new GenericException(curl_error($this->client->ch), curl_errno($this->client->ch)); 103 | } 104 | 105 | // @phpstan-ignore-next-line 106 | $sent_headers = (string) curl_getinfo($this->client->ch, CURLINFO_HEADER_OUT); 107 | rewind($fh_header); 108 | $received_headers = (string) stream_get_contents($fh_header); 109 | fclose($fh_header); 110 | 111 | // @phpstan-ignore-next-line 112 | $response_code = (int) curl_getinfo($this->client->ch, CURLINFO_HTTP_CODE); 113 | 114 | // Return the response object. 115 | return new Response($response_code, $sent_headers, $received_headers, $response_data); 116 | } 117 | 118 | public function httpBuildQuery(array $query): array|string|null 119 | { 120 | $query = http_build_query($query, '', '&'); 121 | 122 | return preg_replace('/%5B[0-9]+%5D/i', '%5B%5D', $query); 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /QuickPay/API/Response.php: -------------------------------------------------------------------------------- 1 | sent_headers; 18 | } else { 19 | // Avoid dependency on mbstring 20 | $lines = explode("\n", $this->sent_headers); 21 | foreach ($lines as &$line) { 22 | if (strpos($line, 'Authorization: ') === 0) { 23 | $line = 'Authorization: '; 24 | } 25 | } 26 | $sent_headers = implode("\n", $lines); 27 | } 28 | 29 | return [ 30 | $this->status_code, 31 | [ 32 | 'sent' => $sent_headers, 33 | 'received' => $this->received_headers, 34 | ], 35 | $this->response_data, 36 | ]; 37 | } 38 | 39 | public function asArray(): array 40 | { 41 | if ($response = json_decode($this->response_data, true)) { 42 | /** @var array $response */ 43 | return $response; 44 | } 45 | 46 | return []; 47 | } 48 | 49 | public function asObject(): stdClass 50 | { 51 | if ($response = json_decode($this->response_data)) { 52 | /** @var stdClass $response */ 53 | return $response; 54 | } 55 | 56 | return new stdClass(); 57 | } 58 | 59 | public function httpStatus(): int 60 | { 61 | return $this->status_code; 62 | } 63 | 64 | public function isSuccess(): bool 65 | { 66 | return $this->status_code < 300; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /QuickPay/QuickPay.php: -------------------------------------------------------------------------------- 1 | request = new Request($client); 20 | } 21 | 22 | public function setHeaders(array $additional_headers = []): void 23 | { 24 | $this->request->client->setHeaders($additional_headers); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | quickpay-php-client 2 | ====================== 3 | 4 | `quickpay-php-client` is a official client for [QuickPay API](http://learn.quickpay.net/tech-talk/api/). The QuickPay API enables you to accept payments in a secure and reliable manner. This package currently support QuickPay `v10` api. 5 | 6 | ## Installation 7 | 8 | ### Composer 9 | 10 | Simply add a dependency on quickpay/quickpay-php-client to your project's composer.json file if you use Composer to manage the dependencies of your project. Here is a minimal example of a composer.json file that just defines a dependency on newest stable version of QuickPay: 11 | 12 | ``` 13 | { 14 | "require": { 15 | "quickpay/quickpay-php-client": "2.0.*" 16 | } 17 | } 18 | ``` 19 | 20 | ### Manually upload 21 | 22 | If you cannot use composer and all the goodness the autoloader in composer gives you, you can upload `/QuickPay/` to your web space. However, then you need to manage the autoloading of the classes yourself. 23 | 24 | ## Usage 25 | 26 | Before doing anything you should register yourself with QuickPay and get access credentials. If you haven't please [click](https://quickpay.net/) here to apply. 27 | 28 | ### Create a new client 29 | 30 | First you should create a client instance that is anonymous or authorized with `api_key` or login credentials provided by QuickPay. 31 | 32 | To initialise an anonymous client: 33 | 34 | ```php8 35 | 44 | ``` 45 | 46 | To initialise a client with QuickPay Api Key: 47 | 48 | ```php8 49 | 59 | ``` 60 | 61 | Or you can provide login credentials like: 62 | 63 | ```php8 64 | 75 | ``` 76 | 77 | 78 | ### API Calls 79 | 80 | You can afterwards call any method described in QuickPay api with corresponding http method and endpoint. These methods are supported currently: `get`, `post`, `put`, `patch` and `delete`. 81 | 82 | ```php8 83 | // Get all payments 84 | $payments = $client->request->get('/payments'); 85 | 86 | // Get specific payment 87 | $payments = $client->request->get('/payments/{id}'); 88 | 89 | // Create payment 90 | $form = array( 91 | 'order_id' => $order_id, 92 | 'currency' => $currency, 93 | ... 94 | ); 95 | $payments = $client->request->post('/payments', $form); 96 | $status = $payments->httpStatus(); 97 | if ($status == 201) { 98 | // Successful created 99 | } 100 | 101 | ``` 102 | 103 | ### Handling the response 104 | Getting the `HTTP status code`: 105 | 106 | ```php8 107 | $response = $client->request->get('/payments'); 108 | $status = $response->httpStatus(); 109 | 110 | if ($status == 200) { 111 | // Successful request 112 | } 113 | ``` 114 | 115 | The returned response object supports 3 different ways of returning the response body, `asRaw()`, `asObject`, `asArray()`. 116 | 117 | ```php8 118 | // Get the HTTP status code, headers and raw response body. 119 | list($status_code, $headers, $response_body) = $client->request->get('/payments')->asRaw(); 120 | 121 | // Get the response body as an object 122 | $response_body = $client->request->get('/payments')->asObject(); 123 | 124 | // Get the response body as an array 125 | $response_body = $client->request->get('/payments')->asArray(); 126 | 127 | // Example usage 128 | $payments = $client->request->get('/payments')->asArray(); 129 | 130 | foreach($payments as $payment) { 131 | //... 132 | } 133 | 134 | ``` 135 | 136 | ### Setting timeouts 137 | Set timeout and get notified on timeouts: 138 | 139 | ```php8 140 | QuickPayAPI::$timeout = 30; 141 | QuickPayAPI::$onTimeout ??= function () { 142 | event(new PaymentGatewayTimeout($this)); 143 | 144 | throw new TimeoutException("No response from Quickpay within " . QuickPayAPI::$timeout . " seconds"); 145 | }; 146 | ``` 147 | 148 | You can read more about api responses at [http://learn.quickpay.net/tech-talk/api/](http://learn.quickpay.net/tech-talk/api/). 149 | 150 | ## Tests 151 | 152 | Use composer to create an autoloader: 153 | 154 | ```command 155 | $ composer install 156 | $ phpunit 157 | ``` 158 | -------------------------------------------------------------------------------- /Tests/api/ExceptionTest.php: -------------------------------------------------------------------------------- 1 | testMessage, $this->testCode); 17 | } catch (GenericException $e) { 18 | $this->assertEquals($e->getMessage(), $this->testMessage); 19 | $this->assertEquals($e->getCode(), $this->testCode); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Tests/api/RequestTest.php: -------------------------------------------------------------------------------- 1 | client = new Client(); 27 | $this->request = new Request($this->client); 28 | } 29 | 30 | /** 31 | * @test 32 | */ 33 | public function responseInstance() 34 | { 35 | $pingResponse = $this->request->get('/ping'); 36 | 37 | $this->assertTrue($pingResponse instanceof Response); 38 | } 39 | 40 | /** 41 | * @test 42 | */ 43 | public function badAuthentication() 44 | { 45 | $client = new Client(':foo'); 46 | $request = new Request($client); 47 | 48 | $response = $request->get('/ping'); 49 | 50 | $this->assertSame(401, $response->httpStatus()); 51 | } 52 | 53 | /** 54 | * @test 55 | */ 56 | public function successfulGetResponse() 57 | { 58 | $pingResponse = $this->request->get('/ping'); 59 | 60 | $this->assertTrue($pingResponse->isSuccess()); 61 | } 62 | 63 | /** 64 | * @test 65 | */ 66 | public function failedGetResponse() 67 | { 68 | $pingResponse = $this->request->get('/foobar'); 69 | 70 | $this->assertFalse($pingResponse->isSuccess()); 71 | } 72 | 73 | /** 74 | * @test 75 | */ 76 | public function succesfulPostResponse() 77 | { 78 | $pingResponse = $this->request->post('/ping'); 79 | 80 | $this->assertTrue($pingResponse->isSuccess()); 81 | } 82 | 83 | /** 84 | * @test 85 | */ 86 | public function failedPostResponse() 87 | { 88 | $pingResponse = $this->request->post('/foobar'); 89 | 90 | $this->assertFalse($pingResponse->isSuccess()); 91 | } 92 | 93 | /** 94 | * Test function added to make sure that issue gh-54 is fixed. 95 | * 96 | * @test 97 | */ 98 | public function basket() 99 | { 100 | $basket = []; 101 | $basket[0] = [ 102 | 'qty' => 1, 103 | 'item_no' => 2, 104 | 'item_name' => 'Test 1', 105 | 'item_price' => 100, 106 | 'vat_rate' => 0.25, 107 | ]; 108 | $basket[1] = [ 109 | 'qty' => 1, 110 | 'item_no' => 2, 111 | 'item_name' => 'Test 2', 112 | 'item_price' => 100, 113 | 'vat_rate' => 0.25, 114 | ]; 115 | 116 | $form = [ 117 | 'currency' => 'DKK', 118 | 'order_id' => 1, 119 | 'basket' => $basket, 120 | ]; 121 | 122 | $query = $this->request->httpBuildQuery($form); 123 | 124 | $expected = 'currency=DKK&order_id=1&basket[][qty]=1&basket[][item_no]=2&basket[][item_name]=Test 1&basket[][item_price]=100&basket[][vat_rate]=0.25&basket[][qty]=1&basket[][item_no]=2&basket[][item_name]=Test 2&basket[][item_price]=100&basket[][vat_rate]=0.25'; 125 | 126 | $this->assertSame(urldecode($query), $expected); 127 | } 128 | 129 | /** 130 | * @test 131 | */ 132 | public function standardHeaders() 133 | { 134 | $this->request->get('/ping'); 135 | $this->assertStringContainsString('accept: application/json', curl_getinfo($this->client->ch, CURLINFO_HEADER_OUT)); 136 | } 137 | 138 | /** 139 | * @test 140 | */ 141 | public function additionalHeadersOnInit() 142 | { 143 | $extra_headers = ['specialvar: foo']; 144 | $client = new Client(null, $extra_headers); 145 | $request = new Request($client); 146 | 147 | $request->get('/ping'); 148 | $this->assertStringContainsString($extra_headers[0], curl_getinfo($client->ch, CURLINFO_HEADER_OUT)); 149 | } 150 | 151 | /** 152 | * @test 153 | */ 154 | public function additionalHeadersAfterInit() 155 | { 156 | $extra_headers = ['newvar: foo']; 157 | $this->client->setHeaders($extra_headers); 158 | $request = new Request($this->client); 159 | 160 | $request->get('/ping'); 161 | $this->assertStringContainsString($extra_headers[0], curl_getinfo($this->client->ch, CURLINFO_HEADER_OUT)); 162 | } 163 | } 164 | -------------------------------------------------------------------------------- /Tests/api/ResponseTest.php: -------------------------------------------------------------------------------- 1 | isSuccess(); 27 | 28 | $this->assertSame($result, $expectedResult); 29 | } 30 | 31 | public function providerTestSuccessResponseHTTPCodes() 32 | { 33 | return [ 34 | [200, true], 35 | [255, true], 36 | [299, true], 37 | [300, false], 38 | [400, false], 39 | ]; 40 | } 41 | 42 | /** 43 | * Test the return of HTTP status codes. 44 | * 45 | * @param string $httpCode The HTTP code we want to test 46 | * @param string $expectedCode What we expect the result to be 47 | * 48 | * @dataProvider providerTestReturnOfHTTPStatusCodes 49 | * 50 | * @test 51 | */ 52 | public function returnOfHTTPStatusCodes($httpCode, $expectedCode) 53 | { 54 | $response = new Response($httpCode, '', '', ''); 55 | 56 | $statusCode = $response->httpStatus(); 57 | 58 | $this->assertSame($statusCode, $expectedCode); 59 | } 60 | 61 | public function providerTestReturnOfHTTPStatusCodes() 62 | { 63 | return [ 64 | [200, 200], 65 | [300, 300], 66 | [500, 500], 67 | ]; 68 | } 69 | 70 | /** 71 | * @test 72 | */ 73 | public function returnOfResponseDataAsArray() 74 | { 75 | $response = new Response(200, '', '', $this->responseTestData); 76 | 77 | $responseArray = $response->asArray(); 78 | 79 | $this->assertTrue(is_array($responseArray)); 80 | } 81 | 82 | /** 83 | * @test 84 | */ 85 | public function returnOfEmptyResponseDataAsArray() 86 | { 87 | $response = new Response(200, '', '', ''); 88 | 89 | $responseArray = $response->asArray(); 90 | 91 | $this->assertTrue(is_array($responseArray)); 92 | } 93 | 94 | /** 95 | * @test 96 | */ 97 | public function returnOfResponseDataAsObject() 98 | { 99 | $response = new Response(200, '', '', $this->responseTestData); 100 | 101 | $responseObject = $response->asObject(); 102 | 103 | $this->assertTrue(is_object($responseObject)); 104 | } 105 | 106 | /** 107 | * @test 108 | */ 109 | public function returnOfEmptyResponseDataAsObject() 110 | { 111 | $response = new Response(200, '', '', ''); 112 | 113 | $responseObject = $response->asObject(); 114 | 115 | $this->assertTrue(is_object($responseObject)); 116 | } 117 | 118 | /** 119 | * @test 120 | */ 121 | public function returnOfResponseDataAsRaw() 122 | { 123 | $response = new Response(200, '', '', $this->responseTestData); 124 | 125 | [$statusCode, $headers, $responseRaw] = $response->asRaw(); 126 | 127 | $this->assertTrue(is_int($statusCode)); 128 | $this->assertTrue(is_array($headers)); 129 | $this->assertTrue(is_string($responseRaw)); 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quickpay/quickpay-php-client", 3 | "type": "library", 4 | "description": "PHP-SDK to communicate with the payment provider QuickPay", 5 | "homepage": "https://github.com/QuickPay/quickpay-php-client", 6 | "license": "MIT", 7 | "require": { 8 | "php": ">=8.0", 9 | "ext-curl": "*" 10 | }, 11 | "autoload": { 12 | "psr-4": { 13 | "QuickPay\\": "QuickPay/" 14 | } 15 | }, 16 | "autoload-dev": { 17 | "psr-4": { 18 | "QuickPay\\Tests\\": "Tests/api/" 19 | } 20 | }, 21 | "require-dev" : { 22 | "phpunit/phpunit": "^9.5", 23 | "friendsofphp/php-cs-fixer": "^3.2.1", 24 | "phpstan/phpstan": "^1.1.2", 25 | "thecodingmachine/phpstan-strict-rules": "^1.0.0" 26 | }, 27 | "minimum-stability": "dev", 28 | "prefer-stable": true, 29 | "config": { 30 | "sort-packages": true, 31 | "preferred-install": "dist" 32 | }, 33 | "scripts": { 34 | "lint": "php-cs-fixer fix -v", 35 | "test:lint": "php-cs-fixer fix -v --dry-run", 36 | "test:types": "phpstan analyse --ansi", 37 | "test:unit": "phpunit --colors=always", 38 | "test": [ 39 | "@test:lint", 40 | "@test:types", 41 | "@test:unit" 42 | ], 43 | "coverage": "@test:unit --coverage" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /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": "e28fb13dd597ae8222c3194389c9c53f", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "composer/pcre", 12 | "version": "3.0.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/composer/pcre.git", 16 | "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", 21 | "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.4 || ^8.0" 26 | }, 27 | "require-dev": { 28 | "phpstan/phpstan": "^1.3", 29 | "phpstan/phpstan-strict-rules": "^1.1", 30 | "symfony/phpunit-bridge": "^5" 31 | }, 32 | "type": "library", 33 | "extra": { 34 | "branch-alias": { 35 | "dev-main": "3.x-dev" 36 | } 37 | }, 38 | "autoload": { 39 | "psr-4": { 40 | "Composer\\Pcre\\": "src" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Jordi Boggiano", 50 | "email": "j.boggiano@seld.be", 51 | "homepage": "http://seld.be" 52 | } 53 | ], 54 | "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 55 | "keywords": [ 56 | "PCRE", 57 | "preg", 58 | "regex", 59 | "regular expression" 60 | ], 61 | "support": { 62 | "issues": "https://github.com/composer/pcre/issues", 63 | "source": "https://github.com/composer/pcre/tree/3.0.0" 64 | }, 65 | "funding": [ 66 | { 67 | "url": "https://packagist.com", 68 | "type": "custom" 69 | }, 70 | { 71 | "url": "https://github.com/composer", 72 | "type": "github" 73 | }, 74 | { 75 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 76 | "type": "tidelift" 77 | } 78 | ], 79 | "time": "2022-02-25T20:21:48+00:00" 80 | }, 81 | { 82 | "name": "composer/semver", 83 | "version": "3.3.2", 84 | "source": { 85 | "type": "git", 86 | "url": "https://github.com/composer/semver.git", 87 | "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" 88 | }, 89 | "dist": { 90 | "type": "zip", 91 | "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", 92 | "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", 93 | "shasum": "" 94 | }, 95 | "require": { 96 | "php": "^5.3.2 || ^7.0 || ^8.0" 97 | }, 98 | "require-dev": { 99 | "phpstan/phpstan": "^1.4", 100 | "symfony/phpunit-bridge": "^4.2 || ^5" 101 | }, 102 | "type": "library", 103 | "extra": { 104 | "branch-alias": { 105 | "dev-main": "3.x-dev" 106 | } 107 | }, 108 | "autoload": { 109 | "psr-4": { 110 | "Composer\\Semver\\": "src" 111 | } 112 | }, 113 | "notification-url": "https://packagist.org/downloads/", 114 | "license": [ 115 | "MIT" 116 | ], 117 | "authors": [ 118 | { 119 | "name": "Nils Adermann", 120 | "email": "naderman@naderman.de", 121 | "homepage": "http://www.naderman.de" 122 | }, 123 | { 124 | "name": "Jordi Boggiano", 125 | "email": "j.boggiano@seld.be", 126 | "homepage": "http://seld.be" 127 | }, 128 | { 129 | "name": "Rob Bast", 130 | "email": "rob.bast@gmail.com", 131 | "homepage": "http://robbast.nl" 132 | } 133 | ], 134 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 135 | "keywords": [ 136 | "semantic", 137 | "semver", 138 | "validation", 139 | "versioning" 140 | ], 141 | "support": { 142 | "irc": "irc://irc.freenode.org/composer", 143 | "issues": "https://github.com/composer/semver/issues", 144 | "source": "https://github.com/composer/semver/tree/3.3.2" 145 | }, 146 | "funding": [ 147 | { 148 | "url": "https://packagist.com", 149 | "type": "custom" 150 | }, 151 | { 152 | "url": "https://github.com/composer", 153 | "type": "github" 154 | }, 155 | { 156 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 157 | "type": "tidelift" 158 | } 159 | ], 160 | "time": "2022-04-01T19:23:25+00:00" 161 | }, 162 | { 163 | "name": "composer/xdebug-handler", 164 | "version": "3.0.3", 165 | "source": { 166 | "type": "git", 167 | "url": "https://github.com/composer/xdebug-handler.git", 168 | "reference": "ced299686f41dce890debac69273b47ffe98a40c" 169 | }, 170 | "dist": { 171 | "type": "zip", 172 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", 173 | "reference": "ced299686f41dce890debac69273b47ffe98a40c", 174 | "shasum": "" 175 | }, 176 | "require": { 177 | "composer/pcre": "^1 || ^2 || ^3", 178 | "php": "^7.2.5 || ^8.0", 179 | "psr/log": "^1 || ^2 || ^3" 180 | }, 181 | "require-dev": { 182 | "phpstan/phpstan": "^1.0", 183 | "phpstan/phpstan-strict-rules": "^1.1", 184 | "symfony/phpunit-bridge": "^6.0" 185 | }, 186 | "type": "library", 187 | "autoload": { 188 | "psr-4": { 189 | "Composer\\XdebugHandler\\": "src" 190 | } 191 | }, 192 | "notification-url": "https://packagist.org/downloads/", 193 | "license": [ 194 | "MIT" 195 | ], 196 | "authors": [ 197 | { 198 | "name": "John Stevenson", 199 | "email": "john-stevenson@blueyonder.co.uk" 200 | } 201 | ], 202 | "description": "Restarts a process without Xdebug.", 203 | "keywords": [ 204 | "Xdebug", 205 | "performance" 206 | ], 207 | "support": { 208 | "irc": "irc://irc.freenode.org/composer", 209 | "issues": "https://github.com/composer/xdebug-handler/issues", 210 | "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" 211 | }, 212 | "funding": [ 213 | { 214 | "url": "https://packagist.com", 215 | "type": "custom" 216 | }, 217 | { 218 | "url": "https://github.com/composer", 219 | "type": "github" 220 | }, 221 | { 222 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 223 | "type": "tidelift" 224 | } 225 | ], 226 | "time": "2022-02-25T21:32:43+00:00" 227 | }, 228 | { 229 | "name": "doctrine/annotations", 230 | "version": "1.13.3", 231 | "source": { 232 | "type": "git", 233 | "url": "https://github.com/doctrine/annotations.git", 234 | "reference": "648b0343343565c4a056bfc8392201385e8d89f0" 235 | }, 236 | "dist": { 237 | "type": "zip", 238 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0", 239 | "reference": "648b0343343565c4a056bfc8392201385e8d89f0", 240 | "shasum": "" 241 | }, 242 | "require": { 243 | "doctrine/lexer": "1.*", 244 | "ext-tokenizer": "*", 245 | "php": "^7.1 || ^8.0", 246 | "psr/cache": "^1 || ^2 || ^3" 247 | }, 248 | "require-dev": { 249 | "doctrine/cache": "^1.11 || ^2.0", 250 | "doctrine/coding-standard": "^6.0 || ^8.1", 251 | "phpstan/phpstan": "^1.4.10 || ^1.8.0", 252 | "phpunit/phpunit": "^7.5 || ^8.0 || ^9.1.5", 253 | "symfony/cache": "^4.4 || ^5.2", 254 | "vimeo/psalm": "^4.10" 255 | }, 256 | "type": "library", 257 | "autoload": { 258 | "psr-4": { 259 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 260 | } 261 | }, 262 | "notification-url": "https://packagist.org/downloads/", 263 | "license": [ 264 | "MIT" 265 | ], 266 | "authors": [ 267 | { 268 | "name": "Guilherme Blanco", 269 | "email": "guilhermeblanco@gmail.com" 270 | }, 271 | { 272 | "name": "Roman Borschel", 273 | "email": "roman@code-factory.org" 274 | }, 275 | { 276 | "name": "Benjamin Eberlei", 277 | "email": "kontakt@beberlei.de" 278 | }, 279 | { 280 | "name": "Jonathan Wage", 281 | "email": "jonwage@gmail.com" 282 | }, 283 | { 284 | "name": "Johannes Schmitt", 285 | "email": "schmittjoh@gmail.com" 286 | } 287 | ], 288 | "description": "Docblock Annotations Parser", 289 | "homepage": "https://www.doctrine-project.org/projects/annotations.html", 290 | "keywords": [ 291 | "annotations", 292 | "docblock", 293 | "parser" 294 | ], 295 | "support": { 296 | "issues": "https://github.com/doctrine/annotations/issues", 297 | "source": "https://github.com/doctrine/annotations/tree/1.13.3" 298 | }, 299 | "time": "2022-07-02T10:48:51+00:00" 300 | }, 301 | { 302 | "name": "doctrine/instantiator", 303 | "version": "1.4.1", 304 | "source": { 305 | "type": "git", 306 | "url": "https://github.com/doctrine/instantiator.git", 307 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" 308 | }, 309 | "dist": { 310 | "type": "zip", 311 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", 312 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", 313 | "shasum": "" 314 | }, 315 | "require": { 316 | "php": "^7.1 || ^8.0" 317 | }, 318 | "require-dev": { 319 | "doctrine/coding-standard": "^9", 320 | "ext-pdo": "*", 321 | "ext-phar": "*", 322 | "phpbench/phpbench": "^0.16 || ^1", 323 | "phpstan/phpstan": "^1.4", 324 | "phpstan/phpstan-phpunit": "^1", 325 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 326 | "vimeo/psalm": "^4.22" 327 | }, 328 | "type": "library", 329 | "autoload": { 330 | "psr-4": { 331 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 332 | } 333 | }, 334 | "notification-url": "https://packagist.org/downloads/", 335 | "license": [ 336 | "MIT" 337 | ], 338 | "authors": [ 339 | { 340 | "name": "Marco Pivetta", 341 | "email": "ocramius@gmail.com", 342 | "homepage": "https://ocramius.github.io/" 343 | } 344 | ], 345 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 346 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 347 | "keywords": [ 348 | "constructor", 349 | "instantiate" 350 | ], 351 | "support": { 352 | "issues": "https://github.com/doctrine/instantiator/issues", 353 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1" 354 | }, 355 | "funding": [ 356 | { 357 | "url": "https://www.doctrine-project.org/sponsorship.html", 358 | "type": "custom" 359 | }, 360 | { 361 | "url": "https://www.patreon.com/phpdoctrine", 362 | "type": "patreon" 363 | }, 364 | { 365 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 366 | "type": "tidelift" 367 | } 368 | ], 369 | "time": "2022-03-03T08:28:38+00:00" 370 | }, 371 | { 372 | "name": "doctrine/lexer", 373 | "version": "1.2.3", 374 | "source": { 375 | "type": "git", 376 | "url": "https://github.com/doctrine/lexer.git", 377 | "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" 378 | }, 379 | "dist": { 380 | "type": "zip", 381 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", 382 | "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", 383 | "shasum": "" 384 | }, 385 | "require": { 386 | "php": "^7.1 || ^8.0" 387 | }, 388 | "require-dev": { 389 | "doctrine/coding-standard": "^9.0", 390 | "phpstan/phpstan": "^1.3", 391 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 392 | "vimeo/psalm": "^4.11" 393 | }, 394 | "type": "library", 395 | "autoload": { 396 | "psr-4": { 397 | "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" 398 | } 399 | }, 400 | "notification-url": "https://packagist.org/downloads/", 401 | "license": [ 402 | "MIT" 403 | ], 404 | "authors": [ 405 | { 406 | "name": "Guilherme Blanco", 407 | "email": "guilhermeblanco@gmail.com" 408 | }, 409 | { 410 | "name": "Roman Borschel", 411 | "email": "roman@code-factory.org" 412 | }, 413 | { 414 | "name": "Johannes Schmitt", 415 | "email": "schmittjoh@gmail.com" 416 | } 417 | ], 418 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", 419 | "homepage": "https://www.doctrine-project.org/projects/lexer.html", 420 | "keywords": [ 421 | "annotations", 422 | "docblock", 423 | "lexer", 424 | "parser", 425 | "php" 426 | ], 427 | "support": { 428 | "issues": "https://github.com/doctrine/lexer/issues", 429 | "source": "https://github.com/doctrine/lexer/tree/1.2.3" 430 | }, 431 | "funding": [ 432 | { 433 | "url": "https://www.doctrine-project.org/sponsorship.html", 434 | "type": "custom" 435 | }, 436 | { 437 | "url": "https://www.patreon.com/phpdoctrine", 438 | "type": "patreon" 439 | }, 440 | { 441 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", 442 | "type": "tidelift" 443 | } 444 | ], 445 | "time": "2022-02-28T11:07:21+00:00" 446 | }, 447 | { 448 | "name": "friendsofphp/php-cs-fixer", 449 | "version": "v3.11.0", 450 | "source": { 451 | "type": "git", 452 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", 453 | "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3" 454 | }, 455 | "dist": { 456 | "type": "zip", 457 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/7dcdea3f2f5f473464e835be9be55283ff8cfdc3", 458 | "reference": "7dcdea3f2f5f473464e835be9be55283ff8cfdc3", 459 | "shasum": "" 460 | }, 461 | "require": { 462 | "composer/semver": "^3.2", 463 | "composer/xdebug-handler": "^3.0.3", 464 | "doctrine/annotations": "^1.13", 465 | "ext-json": "*", 466 | "ext-tokenizer": "*", 467 | "php": "^7.4 || ^8.0", 468 | "sebastian/diff": "^4.0", 469 | "symfony/console": "^5.4 || ^6.0", 470 | "symfony/event-dispatcher": "^5.4 || ^6.0", 471 | "symfony/filesystem": "^5.4 || ^6.0", 472 | "symfony/finder": "^5.4 || ^6.0", 473 | "symfony/options-resolver": "^5.4 || ^6.0", 474 | "symfony/polyfill-mbstring": "^1.23", 475 | "symfony/polyfill-php80": "^1.25", 476 | "symfony/polyfill-php81": "^1.25", 477 | "symfony/process": "^5.4 || ^6.0", 478 | "symfony/stopwatch": "^5.4 || ^6.0" 479 | }, 480 | "require-dev": { 481 | "justinrainbow/json-schema": "^5.2", 482 | "keradus/cli-executor": "^1.5", 483 | "mikey179/vfsstream": "^1.6.10", 484 | "php-coveralls/php-coveralls": "^2.5.2", 485 | "php-cs-fixer/accessible-object": "^1.1", 486 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", 487 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", 488 | "phpspec/prophecy": "^1.15", 489 | "phpspec/prophecy-phpunit": "^2.0", 490 | "phpunit/phpunit": "^9.5", 491 | "phpunitgoodpractices/polyfill": "^1.5", 492 | "phpunitgoodpractices/traits": "^1.9.1", 493 | "symfony/phpunit-bridge": "^6.0", 494 | "symfony/yaml": "^5.4 || ^6.0" 495 | }, 496 | "suggest": { 497 | "ext-dom": "For handling output formats in XML", 498 | "ext-mbstring": "For handling non-UTF8 characters." 499 | }, 500 | "bin": [ 501 | "php-cs-fixer" 502 | ], 503 | "type": "application", 504 | "autoload": { 505 | "psr-4": { 506 | "PhpCsFixer\\": "src/" 507 | } 508 | }, 509 | "notification-url": "https://packagist.org/downloads/", 510 | "license": [ 511 | "MIT" 512 | ], 513 | "authors": [ 514 | { 515 | "name": "Fabien Potencier", 516 | "email": "fabien@symfony.com" 517 | }, 518 | { 519 | "name": "Dariusz Rumiński", 520 | "email": "dariusz.ruminski@gmail.com" 521 | } 522 | ], 523 | "description": "A tool to automatically fix PHP code style", 524 | "support": { 525 | "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", 526 | "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.11.0" 527 | }, 528 | "funding": [ 529 | { 530 | "url": "https://github.com/keradus", 531 | "type": "github" 532 | } 533 | ], 534 | "time": "2022-09-01T18:24:51+00:00" 535 | }, 536 | { 537 | "name": "myclabs/deep-copy", 538 | "version": "1.11.0", 539 | "source": { 540 | "type": "git", 541 | "url": "https://github.com/myclabs/DeepCopy.git", 542 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" 543 | }, 544 | "dist": { 545 | "type": "zip", 546 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", 547 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", 548 | "shasum": "" 549 | }, 550 | "require": { 551 | "php": "^7.1 || ^8.0" 552 | }, 553 | "conflict": { 554 | "doctrine/collections": "<1.6.8", 555 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 556 | }, 557 | "require-dev": { 558 | "doctrine/collections": "^1.6.8", 559 | "doctrine/common": "^2.13.3 || ^3.2.2", 560 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 561 | }, 562 | "type": "library", 563 | "autoload": { 564 | "files": [ 565 | "src/DeepCopy/deep_copy.php" 566 | ], 567 | "psr-4": { 568 | "DeepCopy\\": "src/DeepCopy/" 569 | } 570 | }, 571 | "notification-url": "https://packagist.org/downloads/", 572 | "license": [ 573 | "MIT" 574 | ], 575 | "description": "Create deep copies (clones) of your objects", 576 | "keywords": [ 577 | "clone", 578 | "copy", 579 | "duplicate", 580 | "object", 581 | "object graph" 582 | ], 583 | "support": { 584 | "issues": "https://github.com/myclabs/DeepCopy/issues", 585 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" 586 | }, 587 | "funding": [ 588 | { 589 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 590 | "type": "tidelift" 591 | } 592 | ], 593 | "time": "2022-03-03T13:19:32+00:00" 594 | }, 595 | { 596 | "name": "nikic/php-parser", 597 | "version": "v4.14.0", 598 | "source": { 599 | "type": "git", 600 | "url": "https://github.com/nikic/PHP-Parser.git", 601 | "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" 602 | }, 603 | "dist": { 604 | "type": "zip", 605 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", 606 | "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", 607 | "shasum": "" 608 | }, 609 | "require": { 610 | "ext-tokenizer": "*", 611 | "php": ">=7.0" 612 | }, 613 | "require-dev": { 614 | "ircmaxell/php-yacc": "^0.0.7", 615 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 616 | }, 617 | "bin": [ 618 | "bin/php-parse" 619 | ], 620 | "type": "library", 621 | "extra": { 622 | "branch-alias": { 623 | "dev-master": "4.9-dev" 624 | } 625 | }, 626 | "autoload": { 627 | "psr-4": { 628 | "PhpParser\\": "lib/PhpParser" 629 | } 630 | }, 631 | "notification-url": "https://packagist.org/downloads/", 632 | "license": [ 633 | "BSD-3-Clause" 634 | ], 635 | "authors": [ 636 | { 637 | "name": "Nikita Popov" 638 | } 639 | ], 640 | "description": "A PHP parser written in PHP", 641 | "keywords": [ 642 | "parser", 643 | "php" 644 | ], 645 | "support": { 646 | "issues": "https://github.com/nikic/PHP-Parser/issues", 647 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" 648 | }, 649 | "time": "2022-05-31T20:59:12+00:00" 650 | }, 651 | { 652 | "name": "phar-io/manifest", 653 | "version": "2.0.3", 654 | "source": { 655 | "type": "git", 656 | "url": "https://github.com/phar-io/manifest.git", 657 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 658 | }, 659 | "dist": { 660 | "type": "zip", 661 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 662 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 663 | "shasum": "" 664 | }, 665 | "require": { 666 | "ext-dom": "*", 667 | "ext-phar": "*", 668 | "ext-xmlwriter": "*", 669 | "phar-io/version": "^3.0.1", 670 | "php": "^7.2 || ^8.0" 671 | }, 672 | "type": "library", 673 | "extra": { 674 | "branch-alias": { 675 | "dev-master": "2.0.x-dev" 676 | } 677 | }, 678 | "autoload": { 679 | "classmap": [ 680 | "src/" 681 | ] 682 | }, 683 | "notification-url": "https://packagist.org/downloads/", 684 | "license": [ 685 | "BSD-3-Clause" 686 | ], 687 | "authors": [ 688 | { 689 | "name": "Arne Blankerts", 690 | "email": "arne@blankerts.de", 691 | "role": "Developer" 692 | }, 693 | { 694 | "name": "Sebastian Heuer", 695 | "email": "sebastian@phpeople.de", 696 | "role": "Developer" 697 | }, 698 | { 699 | "name": "Sebastian Bergmann", 700 | "email": "sebastian@phpunit.de", 701 | "role": "Developer" 702 | } 703 | ], 704 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 705 | "support": { 706 | "issues": "https://github.com/phar-io/manifest/issues", 707 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 708 | }, 709 | "time": "2021-07-20T11:28:43+00:00" 710 | }, 711 | { 712 | "name": "phar-io/version", 713 | "version": "3.2.1", 714 | "source": { 715 | "type": "git", 716 | "url": "https://github.com/phar-io/version.git", 717 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 718 | }, 719 | "dist": { 720 | "type": "zip", 721 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 722 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 723 | "shasum": "" 724 | }, 725 | "require": { 726 | "php": "^7.2 || ^8.0" 727 | }, 728 | "type": "library", 729 | "autoload": { 730 | "classmap": [ 731 | "src/" 732 | ] 733 | }, 734 | "notification-url": "https://packagist.org/downloads/", 735 | "license": [ 736 | "BSD-3-Clause" 737 | ], 738 | "authors": [ 739 | { 740 | "name": "Arne Blankerts", 741 | "email": "arne@blankerts.de", 742 | "role": "Developer" 743 | }, 744 | { 745 | "name": "Sebastian Heuer", 746 | "email": "sebastian@phpeople.de", 747 | "role": "Developer" 748 | }, 749 | { 750 | "name": "Sebastian Bergmann", 751 | "email": "sebastian@phpunit.de", 752 | "role": "Developer" 753 | } 754 | ], 755 | "description": "Library for handling version information and constraints", 756 | "support": { 757 | "issues": "https://github.com/phar-io/version/issues", 758 | "source": "https://github.com/phar-io/version/tree/3.2.1" 759 | }, 760 | "time": "2022-02-21T01:04:05+00:00" 761 | }, 762 | { 763 | "name": "phpstan/phpstan", 764 | "version": "1.8.5", 765 | "source": { 766 | "type": "git", 767 | "url": "https://github.com/phpstan/phpstan.git", 768 | "reference": "f6598a5ff12ca4499a836815e08b4d77a2ddeb20" 769 | }, 770 | "dist": { 771 | "type": "zip", 772 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f6598a5ff12ca4499a836815e08b4d77a2ddeb20", 773 | "reference": "f6598a5ff12ca4499a836815e08b4d77a2ddeb20", 774 | "shasum": "" 775 | }, 776 | "require": { 777 | "php": "^7.2|^8.0" 778 | }, 779 | "conflict": { 780 | "phpstan/phpstan-shim": "*" 781 | }, 782 | "bin": [ 783 | "phpstan", 784 | "phpstan.phar" 785 | ], 786 | "type": "library", 787 | "autoload": { 788 | "files": [ 789 | "bootstrap.php" 790 | ] 791 | }, 792 | "notification-url": "https://packagist.org/downloads/", 793 | "license": [ 794 | "MIT" 795 | ], 796 | "description": "PHPStan - PHP Static Analysis Tool", 797 | "keywords": [ 798 | "dev", 799 | "static analysis" 800 | ], 801 | "support": { 802 | "issues": "https://github.com/phpstan/phpstan/issues", 803 | "source": "https://github.com/phpstan/phpstan/tree/1.8.5" 804 | }, 805 | "funding": [ 806 | { 807 | "url": "https://github.com/ondrejmirtes", 808 | "type": "github" 809 | }, 810 | { 811 | "url": "https://github.com/phpstan", 812 | "type": "github" 813 | }, 814 | { 815 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", 816 | "type": "tidelift" 817 | } 818 | ], 819 | "time": "2022-09-07T16:05:32+00:00" 820 | }, 821 | { 822 | "name": "phpunit/php-code-coverage", 823 | "version": "9.2.16", 824 | "source": { 825 | "type": "git", 826 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 827 | "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073" 828 | }, 829 | "dist": { 830 | "type": "zip", 831 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2593003befdcc10db5e213f9f28814f5aa8ac073", 832 | "reference": "2593003befdcc10db5e213f9f28814f5aa8ac073", 833 | "shasum": "" 834 | }, 835 | "require": { 836 | "ext-dom": "*", 837 | "ext-libxml": "*", 838 | "ext-xmlwriter": "*", 839 | "nikic/php-parser": "^4.14", 840 | "php": ">=7.3", 841 | "phpunit/php-file-iterator": "^3.0.3", 842 | "phpunit/php-text-template": "^2.0.2", 843 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 844 | "sebastian/complexity": "^2.0", 845 | "sebastian/environment": "^5.1.2", 846 | "sebastian/lines-of-code": "^1.0.3", 847 | "sebastian/version": "^3.0.1", 848 | "theseer/tokenizer": "^1.2.0" 849 | }, 850 | "require-dev": { 851 | "phpunit/phpunit": "^9.3" 852 | }, 853 | "suggest": { 854 | "ext-pcov": "*", 855 | "ext-xdebug": "*" 856 | }, 857 | "type": "library", 858 | "extra": { 859 | "branch-alias": { 860 | "dev-master": "9.2-dev" 861 | } 862 | }, 863 | "autoload": { 864 | "classmap": [ 865 | "src/" 866 | ] 867 | }, 868 | "notification-url": "https://packagist.org/downloads/", 869 | "license": [ 870 | "BSD-3-Clause" 871 | ], 872 | "authors": [ 873 | { 874 | "name": "Sebastian Bergmann", 875 | "email": "sebastian@phpunit.de", 876 | "role": "lead" 877 | } 878 | ], 879 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 880 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 881 | "keywords": [ 882 | "coverage", 883 | "testing", 884 | "xunit" 885 | ], 886 | "support": { 887 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 888 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.16" 889 | }, 890 | "funding": [ 891 | { 892 | "url": "https://github.com/sebastianbergmann", 893 | "type": "github" 894 | } 895 | ], 896 | "time": "2022-08-20T05:26:47+00:00" 897 | }, 898 | { 899 | "name": "phpunit/php-file-iterator", 900 | "version": "3.0.6", 901 | "source": { 902 | "type": "git", 903 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 904 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 905 | }, 906 | "dist": { 907 | "type": "zip", 908 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 909 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 910 | "shasum": "" 911 | }, 912 | "require": { 913 | "php": ">=7.3" 914 | }, 915 | "require-dev": { 916 | "phpunit/phpunit": "^9.3" 917 | }, 918 | "type": "library", 919 | "extra": { 920 | "branch-alias": { 921 | "dev-master": "3.0-dev" 922 | } 923 | }, 924 | "autoload": { 925 | "classmap": [ 926 | "src/" 927 | ] 928 | }, 929 | "notification-url": "https://packagist.org/downloads/", 930 | "license": [ 931 | "BSD-3-Clause" 932 | ], 933 | "authors": [ 934 | { 935 | "name": "Sebastian Bergmann", 936 | "email": "sebastian@phpunit.de", 937 | "role": "lead" 938 | } 939 | ], 940 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 941 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 942 | "keywords": [ 943 | "filesystem", 944 | "iterator" 945 | ], 946 | "support": { 947 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 948 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 949 | }, 950 | "funding": [ 951 | { 952 | "url": "https://github.com/sebastianbergmann", 953 | "type": "github" 954 | } 955 | ], 956 | "time": "2021-12-02T12:48:52+00:00" 957 | }, 958 | { 959 | "name": "phpunit/php-invoker", 960 | "version": "3.1.1", 961 | "source": { 962 | "type": "git", 963 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 964 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 965 | }, 966 | "dist": { 967 | "type": "zip", 968 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 969 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 970 | "shasum": "" 971 | }, 972 | "require": { 973 | "php": ">=7.3" 974 | }, 975 | "require-dev": { 976 | "ext-pcntl": "*", 977 | "phpunit/phpunit": "^9.3" 978 | }, 979 | "suggest": { 980 | "ext-pcntl": "*" 981 | }, 982 | "type": "library", 983 | "extra": { 984 | "branch-alias": { 985 | "dev-master": "3.1-dev" 986 | } 987 | }, 988 | "autoload": { 989 | "classmap": [ 990 | "src/" 991 | ] 992 | }, 993 | "notification-url": "https://packagist.org/downloads/", 994 | "license": [ 995 | "BSD-3-Clause" 996 | ], 997 | "authors": [ 998 | { 999 | "name": "Sebastian Bergmann", 1000 | "email": "sebastian@phpunit.de", 1001 | "role": "lead" 1002 | } 1003 | ], 1004 | "description": "Invoke callables with a timeout", 1005 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1006 | "keywords": [ 1007 | "process" 1008 | ], 1009 | "support": { 1010 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 1011 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 1012 | }, 1013 | "funding": [ 1014 | { 1015 | "url": "https://github.com/sebastianbergmann", 1016 | "type": "github" 1017 | } 1018 | ], 1019 | "time": "2020-09-28T05:58:55+00:00" 1020 | }, 1021 | { 1022 | "name": "phpunit/php-text-template", 1023 | "version": "2.0.4", 1024 | "source": { 1025 | "type": "git", 1026 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1027 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 1028 | }, 1029 | "dist": { 1030 | "type": "zip", 1031 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1032 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1033 | "shasum": "" 1034 | }, 1035 | "require": { 1036 | "php": ">=7.3" 1037 | }, 1038 | "require-dev": { 1039 | "phpunit/phpunit": "^9.3" 1040 | }, 1041 | "type": "library", 1042 | "extra": { 1043 | "branch-alias": { 1044 | "dev-master": "2.0-dev" 1045 | } 1046 | }, 1047 | "autoload": { 1048 | "classmap": [ 1049 | "src/" 1050 | ] 1051 | }, 1052 | "notification-url": "https://packagist.org/downloads/", 1053 | "license": [ 1054 | "BSD-3-Clause" 1055 | ], 1056 | "authors": [ 1057 | { 1058 | "name": "Sebastian Bergmann", 1059 | "email": "sebastian@phpunit.de", 1060 | "role": "lead" 1061 | } 1062 | ], 1063 | "description": "Simple template engine.", 1064 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1065 | "keywords": [ 1066 | "template" 1067 | ], 1068 | "support": { 1069 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1070 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 1071 | }, 1072 | "funding": [ 1073 | { 1074 | "url": "https://github.com/sebastianbergmann", 1075 | "type": "github" 1076 | } 1077 | ], 1078 | "time": "2020-10-26T05:33:50+00:00" 1079 | }, 1080 | { 1081 | "name": "phpunit/php-timer", 1082 | "version": "5.0.3", 1083 | "source": { 1084 | "type": "git", 1085 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1086 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 1087 | }, 1088 | "dist": { 1089 | "type": "zip", 1090 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 1091 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 1092 | "shasum": "" 1093 | }, 1094 | "require": { 1095 | "php": ">=7.3" 1096 | }, 1097 | "require-dev": { 1098 | "phpunit/phpunit": "^9.3" 1099 | }, 1100 | "type": "library", 1101 | "extra": { 1102 | "branch-alias": { 1103 | "dev-master": "5.0-dev" 1104 | } 1105 | }, 1106 | "autoload": { 1107 | "classmap": [ 1108 | "src/" 1109 | ] 1110 | }, 1111 | "notification-url": "https://packagist.org/downloads/", 1112 | "license": [ 1113 | "BSD-3-Clause" 1114 | ], 1115 | "authors": [ 1116 | { 1117 | "name": "Sebastian Bergmann", 1118 | "email": "sebastian@phpunit.de", 1119 | "role": "lead" 1120 | } 1121 | ], 1122 | "description": "Utility class for timing", 1123 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1124 | "keywords": [ 1125 | "timer" 1126 | ], 1127 | "support": { 1128 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1129 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 1130 | }, 1131 | "funding": [ 1132 | { 1133 | "url": "https://github.com/sebastianbergmann", 1134 | "type": "github" 1135 | } 1136 | ], 1137 | "time": "2020-10-26T13:16:10+00:00" 1138 | }, 1139 | { 1140 | "name": "phpunit/phpunit", 1141 | "version": "9.5.24", 1142 | "source": { 1143 | "type": "git", 1144 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1145 | "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" 1146 | }, 1147 | "dist": { 1148 | "type": "zip", 1149 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", 1150 | "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", 1151 | "shasum": "" 1152 | }, 1153 | "require": { 1154 | "doctrine/instantiator": "^1.3.1", 1155 | "ext-dom": "*", 1156 | "ext-json": "*", 1157 | "ext-libxml": "*", 1158 | "ext-mbstring": "*", 1159 | "ext-xml": "*", 1160 | "ext-xmlwriter": "*", 1161 | "myclabs/deep-copy": "^1.10.1", 1162 | "phar-io/manifest": "^2.0.3", 1163 | "phar-io/version": "^3.0.2", 1164 | "php": ">=7.3", 1165 | "phpunit/php-code-coverage": "^9.2.13", 1166 | "phpunit/php-file-iterator": "^3.0.5", 1167 | "phpunit/php-invoker": "^3.1.1", 1168 | "phpunit/php-text-template": "^2.0.3", 1169 | "phpunit/php-timer": "^5.0.2", 1170 | "sebastian/cli-parser": "^1.0.1", 1171 | "sebastian/code-unit": "^1.0.6", 1172 | "sebastian/comparator": "^4.0.5", 1173 | "sebastian/diff": "^4.0.3", 1174 | "sebastian/environment": "^5.1.3", 1175 | "sebastian/exporter": "^4.0.3", 1176 | "sebastian/global-state": "^5.0.1", 1177 | "sebastian/object-enumerator": "^4.0.3", 1178 | "sebastian/resource-operations": "^3.0.3", 1179 | "sebastian/type": "^3.1", 1180 | "sebastian/version": "^3.0.2" 1181 | }, 1182 | "suggest": { 1183 | "ext-soap": "*", 1184 | "ext-xdebug": "*" 1185 | }, 1186 | "bin": [ 1187 | "phpunit" 1188 | ], 1189 | "type": "library", 1190 | "extra": { 1191 | "branch-alias": { 1192 | "dev-master": "9.5-dev" 1193 | } 1194 | }, 1195 | "autoload": { 1196 | "files": [ 1197 | "src/Framework/Assert/Functions.php" 1198 | ], 1199 | "classmap": [ 1200 | "src/" 1201 | ] 1202 | }, 1203 | "notification-url": "https://packagist.org/downloads/", 1204 | "license": [ 1205 | "BSD-3-Clause" 1206 | ], 1207 | "authors": [ 1208 | { 1209 | "name": "Sebastian Bergmann", 1210 | "email": "sebastian@phpunit.de", 1211 | "role": "lead" 1212 | } 1213 | ], 1214 | "description": "The PHP Unit Testing framework.", 1215 | "homepage": "https://phpunit.de/", 1216 | "keywords": [ 1217 | "phpunit", 1218 | "testing", 1219 | "xunit" 1220 | ], 1221 | "support": { 1222 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1223 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" 1224 | }, 1225 | "funding": [ 1226 | { 1227 | "url": "https://phpunit.de/sponsors.html", 1228 | "type": "custom" 1229 | }, 1230 | { 1231 | "url": "https://github.com/sebastianbergmann", 1232 | "type": "github" 1233 | } 1234 | ], 1235 | "time": "2022-08-30T07:42:16+00:00" 1236 | }, 1237 | { 1238 | "name": "psr/cache", 1239 | "version": "3.0.0", 1240 | "source": { 1241 | "type": "git", 1242 | "url": "https://github.com/php-fig/cache.git", 1243 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" 1244 | }, 1245 | "dist": { 1246 | "type": "zip", 1247 | "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 1248 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 1249 | "shasum": "" 1250 | }, 1251 | "require": { 1252 | "php": ">=8.0.0" 1253 | }, 1254 | "type": "library", 1255 | "extra": { 1256 | "branch-alias": { 1257 | "dev-master": "1.0.x-dev" 1258 | } 1259 | }, 1260 | "autoload": { 1261 | "psr-4": { 1262 | "Psr\\Cache\\": "src/" 1263 | } 1264 | }, 1265 | "notification-url": "https://packagist.org/downloads/", 1266 | "license": [ 1267 | "MIT" 1268 | ], 1269 | "authors": [ 1270 | { 1271 | "name": "PHP-FIG", 1272 | "homepage": "https://www.php-fig.org/" 1273 | } 1274 | ], 1275 | "description": "Common interface for caching libraries", 1276 | "keywords": [ 1277 | "cache", 1278 | "psr", 1279 | "psr-6" 1280 | ], 1281 | "support": { 1282 | "source": "https://github.com/php-fig/cache/tree/3.0.0" 1283 | }, 1284 | "time": "2021-02-03T23:26:27+00:00" 1285 | }, 1286 | { 1287 | "name": "psr/container", 1288 | "version": "1.1.2", 1289 | "source": { 1290 | "type": "git", 1291 | "url": "https://github.com/php-fig/container.git", 1292 | "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" 1293 | }, 1294 | "dist": { 1295 | "type": "zip", 1296 | "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", 1297 | "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", 1298 | "shasum": "" 1299 | }, 1300 | "require": { 1301 | "php": ">=7.4.0" 1302 | }, 1303 | "type": "library", 1304 | "autoload": { 1305 | "psr-4": { 1306 | "Psr\\Container\\": "src/" 1307 | } 1308 | }, 1309 | "notification-url": "https://packagist.org/downloads/", 1310 | "license": [ 1311 | "MIT" 1312 | ], 1313 | "authors": [ 1314 | { 1315 | "name": "PHP-FIG", 1316 | "homepage": "https://www.php-fig.org/" 1317 | } 1318 | ], 1319 | "description": "Common Container Interface (PHP FIG PSR-11)", 1320 | "homepage": "https://github.com/php-fig/container", 1321 | "keywords": [ 1322 | "PSR-11", 1323 | "container", 1324 | "container-interface", 1325 | "container-interop", 1326 | "psr" 1327 | ], 1328 | "support": { 1329 | "issues": "https://github.com/php-fig/container/issues", 1330 | "source": "https://github.com/php-fig/container/tree/1.1.2" 1331 | }, 1332 | "time": "2021-11-05T16:50:12+00:00" 1333 | }, 1334 | { 1335 | "name": "psr/event-dispatcher", 1336 | "version": "1.0.0", 1337 | "source": { 1338 | "type": "git", 1339 | "url": "https://github.com/php-fig/event-dispatcher.git", 1340 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 1341 | }, 1342 | "dist": { 1343 | "type": "zip", 1344 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 1345 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 1346 | "shasum": "" 1347 | }, 1348 | "require": { 1349 | "php": ">=7.2.0" 1350 | }, 1351 | "type": "library", 1352 | "extra": { 1353 | "branch-alias": { 1354 | "dev-master": "1.0.x-dev" 1355 | } 1356 | }, 1357 | "autoload": { 1358 | "psr-4": { 1359 | "Psr\\EventDispatcher\\": "src/" 1360 | } 1361 | }, 1362 | "notification-url": "https://packagist.org/downloads/", 1363 | "license": [ 1364 | "MIT" 1365 | ], 1366 | "authors": [ 1367 | { 1368 | "name": "PHP-FIG", 1369 | "homepage": "http://www.php-fig.org/" 1370 | } 1371 | ], 1372 | "description": "Standard interfaces for event handling.", 1373 | "keywords": [ 1374 | "events", 1375 | "psr", 1376 | "psr-14" 1377 | ], 1378 | "support": { 1379 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 1380 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 1381 | }, 1382 | "time": "2019-01-08T18:20:26+00:00" 1383 | }, 1384 | { 1385 | "name": "psr/log", 1386 | "version": "2.0.0", 1387 | "source": { 1388 | "type": "git", 1389 | "url": "https://github.com/php-fig/log.git", 1390 | "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" 1391 | }, 1392 | "dist": { 1393 | "type": "zip", 1394 | "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", 1395 | "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", 1396 | "shasum": "" 1397 | }, 1398 | "require": { 1399 | "php": ">=8.0.0" 1400 | }, 1401 | "type": "library", 1402 | "extra": { 1403 | "branch-alias": { 1404 | "dev-master": "2.0.x-dev" 1405 | } 1406 | }, 1407 | "autoload": { 1408 | "psr-4": { 1409 | "Psr\\Log\\": "src" 1410 | } 1411 | }, 1412 | "notification-url": "https://packagist.org/downloads/", 1413 | "license": [ 1414 | "MIT" 1415 | ], 1416 | "authors": [ 1417 | { 1418 | "name": "PHP-FIG", 1419 | "homepage": "https://www.php-fig.org/" 1420 | } 1421 | ], 1422 | "description": "Common interface for logging libraries", 1423 | "homepage": "https://github.com/php-fig/log", 1424 | "keywords": [ 1425 | "log", 1426 | "psr", 1427 | "psr-3" 1428 | ], 1429 | "support": { 1430 | "source": "https://github.com/php-fig/log/tree/2.0.0" 1431 | }, 1432 | "time": "2021-07-14T16:41:46+00:00" 1433 | }, 1434 | { 1435 | "name": "sebastian/cli-parser", 1436 | "version": "1.0.1", 1437 | "source": { 1438 | "type": "git", 1439 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 1440 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 1441 | }, 1442 | "dist": { 1443 | "type": "zip", 1444 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1445 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1446 | "shasum": "" 1447 | }, 1448 | "require": { 1449 | "php": ">=7.3" 1450 | }, 1451 | "require-dev": { 1452 | "phpunit/phpunit": "^9.3" 1453 | }, 1454 | "type": "library", 1455 | "extra": { 1456 | "branch-alias": { 1457 | "dev-master": "1.0-dev" 1458 | } 1459 | }, 1460 | "autoload": { 1461 | "classmap": [ 1462 | "src/" 1463 | ] 1464 | }, 1465 | "notification-url": "https://packagist.org/downloads/", 1466 | "license": [ 1467 | "BSD-3-Clause" 1468 | ], 1469 | "authors": [ 1470 | { 1471 | "name": "Sebastian Bergmann", 1472 | "email": "sebastian@phpunit.de", 1473 | "role": "lead" 1474 | } 1475 | ], 1476 | "description": "Library for parsing CLI options", 1477 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1478 | "support": { 1479 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1480 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 1481 | }, 1482 | "funding": [ 1483 | { 1484 | "url": "https://github.com/sebastianbergmann", 1485 | "type": "github" 1486 | } 1487 | ], 1488 | "time": "2020-09-28T06:08:49+00:00" 1489 | }, 1490 | { 1491 | "name": "sebastian/code-unit", 1492 | "version": "1.0.8", 1493 | "source": { 1494 | "type": "git", 1495 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1496 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 1497 | }, 1498 | "dist": { 1499 | "type": "zip", 1500 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 1501 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 1502 | "shasum": "" 1503 | }, 1504 | "require": { 1505 | "php": ">=7.3" 1506 | }, 1507 | "require-dev": { 1508 | "phpunit/phpunit": "^9.3" 1509 | }, 1510 | "type": "library", 1511 | "extra": { 1512 | "branch-alias": { 1513 | "dev-master": "1.0-dev" 1514 | } 1515 | }, 1516 | "autoload": { 1517 | "classmap": [ 1518 | "src/" 1519 | ] 1520 | }, 1521 | "notification-url": "https://packagist.org/downloads/", 1522 | "license": [ 1523 | "BSD-3-Clause" 1524 | ], 1525 | "authors": [ 1526 | { 1527 | "name": "Sebastian Bergmann", 1528 | "email": "sebastian@phpunit.de", 1529 | "role": "lead" 1530 | } 1531 | ], 1532 | "description": "Collection of value objects that represent the PHP code units", 1533 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1534 | "support": { 1535 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1536 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 1537 | }, 1538 | "funding": [ 1539 | { 1540 | "url": "https://github.com/sebastianbergmann", 1541 | "type": "github" 1542 | } 1543 | ], 1544 | "time": "2020-10-26T13:08:54+00:00" 1545 | }, 1546 | { 1547 | "name": "sebastian/code-unit-reverse-lookup", 1548 | "version": "2.0.3", 1549 | "source": { 1550 | "type": "git", 1551 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1552 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 1553 | }, 1554 | "dist": { 1555 | "type": "zip", 1556 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1557 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1558 | "shasum": "" 1559 | }, 1560 | "require": { 1561 | "php": ">=7.3" 1562 | }, 1563 | "require-dev": { 1564 | "phpunit/phpunit": "^9.3" 1565 | }, 1566 | "type": "library", 1567 | "extra": { 1568 | "branch-alias": { 1569 | "dev-master": "2.0-dev" 1570 | } 1571 | }, 1572 | "autoload": { 1573 | "classmap": [ 1574 | "src/" 1575 | ] 1576 | }, 1577 | "notification-url": "https://packagist.org/downloads/", 1578 | "license": [ 1579 | "BSD-3-Clause" 1580 | ], 1581 | "authors": [ 1582 | { 1583 | "name": "Sebastian Bergmann", 1584 | "email": "sebastian@phpunit.de" 1585 | } 1586 | ], 1587 | "description": "Looks up which function or method a line of code belongs to", 1588 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1589 | "support": { 1590 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1591 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 1592 | }, 1593 | "funding": [ 1594 | { 1595 | "url": "https://github.com/sebastianbergmann", 1596 | "type": "github" 1597 | } 1598 | ], 1599 | "time": "2020-09-28T05:30:19+00:00" 1600 | }, 1601 | { 1602 | "name": "sebastian/comparator", 1603 | "version": "4.0.6", 1604 | "source": { 1605 | "type": "git", 1606 | "url": "https://github.com/sebastianbergmann/comparator.git", 1607 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382" 1608 | }, 1609 | "dist": { 1610 | "type": "zip", 1611 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", 1612 | "reference": "55f4261989e546dc112258c7a75935a81a7ce382", 1613 | "shasum": "" 1614 | }, 1615 | "require": { 1616 | "php": ">=7.3", 1617 | "sebastian/diff": "^4.0", 1618 | "sebastian/exporter": "^4.0" 1619 | }, 1620 | "require-dev": { 1621 | "phpunit/phpunit": "^9.3" 1622 | }, 1623 | "type": "library", 1624 | "extra": { 1625 | "branch-alias": { 1626 | "dev-master": "4.0-dev" 1627 | } 1628 | }, 1629 | "autoload": { 1630 | "classmap": [ 1631 | "src/" 1632 | ] 1633 | }, 1634 | "notification-url": "https://packagist.org/downloads/", 1635 | "license": [ 1636 | "BSD-3-Clause" 1637 | ], 1638 | "authors": [ 1639 | { 1640 | "name": "Sebastian Bergmann", 1641 | "email": "sebastian@phpunit.de" 1642 | }, 1643 | { 1644 | "name": "Jeff Welch", 1645 | "email": "whatthejeff@gmail.com" 1646 | }, 1647 | { 1648 | "name": "Volker Dusch", 1649 | "email": "github@wallbash.com" 1650 | }, 1651 | { 1652 | "name": "Bernhard Schussek", 1653 | "email": "bschussek@2bepublished.at" 1654 | } 1655 | ], 1656 | "description": "Provides the functionality to compare PHP values for equality", 1657 | "homepage": "https://github.com/sebastianbergmann/comparator", 1658 | "keywords": [ 1659 | "comparator", 1660 | "compare", 1661 | "equality" 1662 | ], 1663 | "support": { 1664 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1665 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" 1666 | }, 1667 | "funding": [ 1668 | { 1669 | "url": "https://github.com/sebastianbergmann", 1670 | "type": "github" 1671 | } 1672 | ], 1673 | "time": "2020-10-26T15:49:45+00:00" 1674 | }, 1675 | { 1676 | "name": "sebastian/complexity", 1677 | "version": "2.0.2", 1678 | "source": { 1679 | "type": "git", 1680 | "url": "https://github.com/sebastianbergmann/complexity.git", 1681 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1682 | }, 1683 | "dist": { 1684 | "type": "zip", 1685 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1686 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1687 | "shasum": "" 1688 | }, 1689 | "require": { 1690 | "nikic/php-parser": "^4.7", 1691 | "php": ">=7.3" 1692 | }, 1693 | "require-dev": { 1694 | "phpunit/phpunit": "^9.3" 1695 | }, 1696 | "type": "library", 1697 | "extra": { 1698 | "branch-alias": { 1699 | "dev-master": "2.0-dev" 1700 | } 1701 | }, 1702 | "autoload": { 1703 | "classmap": [ 1704 | "src/" 1705 | ] 1706 | }, 1707 | "notification-url": "https://packagist.org/downloads/", 1708 | "license": [ 1709 | "BSD-3-Clause" 1710 | ], 1711 | "authors": [ 1712 | { 1713 | "name": "Sebastian Bergmann", 1714 | "email": "sebastian@phpunit.de", 1715 | "role": "lead" 1716 | } 1717 | ], 1718 | "description": "Library for calculating the complexity of PHP code units", 1719 | "homepage": "https://github.com/sebastianbergmann/complexity", 1720 | "support": { 1721 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1722 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1723 | }, 1724 | "funding": [ 1725 | { 1726 | "url": "https://github.com/sebastianbergmann", 1727 | "type": "github" 1728 | } 1729 | ], 1730 | "time": "2020-10-26T15:52:27+00:00" 1731 | }, 1732 | { 1733 | "name": "sebastian/diff", 1734 | "version": "4.0.4", 1735 | "source": { 1736 | "type": "git", 1737 | "url": "https://github.com/sebastianbergmann/diff.git", 1738 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1739 | }, 1740 | "dist": { 1741 | "type": "zip", 1742 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1743 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1744 | "shasum": "" 1745 | }, 1746 | "require": { 1747 | "php": ">=7.3" 1748 | }, 1749 | "require-dev": { 1750 | "phpunit/phpunit": "^9.3", 1751 | "symfony/process": "^4.2 || ^5" 1752 | }, 1753 | "type": "library", 1754 | "extra": { 1755 | "branch-alias": { 1756 | "dev-master": "4.0-dev" 1757 | } 1758 | }, 1759 | "autoload": { 1760 | "classmap": [ 1761 | "src/" 1762 | ] 1763 | }, 1764 | "notification-url": "https://packagist.org/downloads/", 1765 | "license": [ 1766 | "BSD-3-Clause" 1767 | ], 1768 | "authors": [ 1769 | { 1770 | "name": "Sebastian Bergmann", 1771 | "email": "sebastian@phpunit.de" 1772 | }, 1773 | { 1774 | "name": "Kore Nordmann", 1775 | "email": "mail@kore-nordmann.de" 1776 | } 1777 | ], 1778 | "description": "Diff implementation", 1779 | "homepage": "https://github.com/sebastianbergmann/diff", 1780 | "keywords": [ 1781 | "diff", 1782 | "udiff", 1783 | "unidiff", 1784 | "unified diff" 1785 | ], 1786 | "support": { 1787 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1788 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 1789 | }, 1790 | "funding": [ 1791 | { 1792 | "url": "https://github.com/sebastianbergmann", 1793 | "type": "github" 1794 | } 1795 | ], 1796 | "time": "2020-10-26T13:10:38+00:00" 1797 | }, 1798 | { 1799 | "name": "sebastian/environment", 1800 | "version": "5.1.4", 1801 | "source": { 1802 | "type": "git", 1803 | "url": "https://github.com/sebastianbergmann/environment.git", 1804 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" 1805 | }, 1806 | "dist": { 1807 | "type": "zip", 1808 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", 1809 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", 1810 | "shasum": "" 1811 | }, 1812 | "require": { 1813 | "php": ">=7.3" 1814 | }, 1815 | "require-dev": { 1816 | "phpunit/phpunit": "^9.3" 1817 | }, 1818 | "suggest": { 1819 | "ext-posix": "*" 1820 | }, 1821 | "type": "library", 1822 | "extra": { 1823 | "branch-alias": { 1824 | "dev-master": "5.1-dev" 1825 | } 1826 | }, 1827 | "autoload": { 1828 | "classmap": [ 1829 | "src/" 1830 | ] 1831 | }, 1832 | "notification-url": "https://packagist.org/downloads/", 1833 | "license": [ 1834 | "BSD-3-Clause" 1835 | ], 1836 | "authors": [ 1837 | { 1838 | "name": "Sebastian Bergmann", 1839 | "email": "sebastian@phpunit.de" 1840 | } 1841 | ], 1842 | "description": "Provides functionality to handle HHVM/PHP environments", 1843 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1844 | "keywords": [ 1845 | "Xdebug", 1846 | "environment", 1847 | "hhvm" 1848 | ], 1849 | "support": { 1850 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1851 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" 1852 | }, 1853 | "funding": [ 1854 | { 1855 | "url": "https://github.com/sebastianbergmann", 1856 | "type": "github" 1857 | } 1858 | ], 1859 | "time": "2022-04-03T09:37:03+00:00" 1860 | }, 1861 | { 1862 | "name": "sebastian/exporter", 1863 | "version": "4.0.4", 1864 | "source": { 1865 | "type": "git", 1866 | "url": "https://github.com/sebastianbergmann/exporter.git", 1867 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" 1868 | }, 1869 | "dist": { 1870 | "type": "zip", 1871 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", 1872 | "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", 1873 | "shasum": "" 1874 | }, 1875 | "require": { 1876 | "php": ">=7.3", 1877 | "sebastian/recursion-context": "^4.0" 1878 | }, 1879 | "require-dev": { 1880 | "ext-mbstring": "*", 1881 | "phpunit/phpunit": "^9.3" 1882 | }, 1883 | "type": "library", 1884 | "extra": { 1885 | "branch-alias": { 1886 | "dev-master": "4.0-dev" 1887 | } 1888 | }, 1889 | "autoload": { 1890 | "classmap": [ 1891 | "src/" 1892 | ] 1893 | }, 1894 | "notification-url": "https://packagist.org/downloads/", 1895 | "license": [ 1896 | "BSD-3-Clause" 1897 | ], 1898 | "authors": [ 1899 | { 1900 | "name": "Sebastian Bergmann", 1901 | "email": "sebastian@phpunit.de" 1902 | }, 1903 | { 1904 | "name": "Jeff Welch", 1905 | "email": "whatthejeff@gmail.com" 1906 | }, 1907 | { 1908 | "name": "Volker Dusch", 1909 | "email": "github@wallbash.com" 1910 | }, 1911 | { 1912 | "name": "Adam Harvey", 1913 | "email": "aharvey@php.net" 1914 | }, 1915 | { 1916 | "name": "Bernhard Schussek", 1917 | "email": "bschussek@gmail.com" 1918 | } 1919 | ], 1920 | "description": "Provides the functionality to export PHP variables for visualization", 1921 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1922 | "keywords": [ 1923 | "export", 1924 | "exporter" 1925 | ], 1926 | "support": { 1927 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1928 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" 1929 | }, 1930 | "funding": [ 1931 | { 1932 | "url": "https://github.com/sebastianbergmann", 1933 | "type": "github" 1934 | } 1935 | ], 1936 | "time": "2021-11-11T14:18:36+00:00" 1937 | }, 1938 | { 1939 | "name": "sebastian/global-state", 1940 | "version": "5.0.5", 1941 | "source": { 1942 | "type": "git", 1943 | "url": "https://github.com/sebastianbergmann/global-state.git", 1944 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 1945 | }, 1946 | "dist": { 1947 | "type": "zip", 1948 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1949 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1950 | "shasum": "" 1951 | }, 1952 | "require": { 1953 | "php": ">=7.3", 1954 | "sebastian/object-reflector": "^2.0", 1955 | "sebastian/recursion-context": "^4.0" 1956 | }, 1957 | "require-dev": { 1958 | "ext-dom": "*", 1959 | "phpunit/phpunit": "^9.3" 1960 | }, 1961 | "suggest": { 1962 | "ext-uopz": "*" 1963 | }, 1964 | "type": "library", 1965 | "extra": { 1966 | "branch-alias": { 1967 | "dev-master": "5.0-dev" 1968 | } 1969 | }, 1970 | "autoload": { 1971 | "classmap": [ 1972 | "src/" 1973 | ] 1974 | }, 1975 | "notification-url": "https://packagist.org/downloads/", 1976 | "license": [ 1977 | "BSD-3-Clause" 1978 | ], 1979 | "authors": [ 1980 | { 1981 | "name": "Sebastian Bergmann", 1982 | "email": "sebastian@phpunit.de" 1983 | } 1984 | ], 1985 | "description": "Snapshotting of global state", 1986 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1987 | "keywords": [ 1988 | "global state" 1989 | ], 1990 | "support": { 1991 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1992 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 1993 | }, 1994 | "funding": [ 1995 | { 1996 | "url": "https://github.com/sebastianbergmann", 1997 | "type": "github" 1998 | } 1999 | ], 2000 | "time": "2022-02-14T08:28:10+00:00" 2001 | }, 2002 | { 2003 | "name": "sebastian/lines-of-code", 2004 | "version": "1.0.3", 2005 | "source": { 2006 | "type": "git", 2007 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 2008 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 2009 | }, 2010 | "dist": { 2011 | "type": "zip", 2012 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 2013 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 2014 | "shasum": "" 2015 | }, 2016 | "require": { 2017 | "nikic/php-parser": "^4.6", 2018 | "php": ">=7.3" 2019 | }, 2020 | "require-dev": { 2021 | "phpunit/phpunit": "^9.3" 2022 | }, 2023 | "type": "library", 2024 | "extra": { 2025 | "branch-alias": { 2026 | "dev-master": "1.0-dev" 2027 | } 2028 | }, 2029 | "autoload": { 2030 | "classmap": [ 2031 | "src/" 2032 | ] 2033 | }, 2034 | "notification-url": "https://packagist.org/downloads/", 2035 | "license": [ 2036 | "BSD-3-Clause" 2037 | ], 2038 | "authors": [ 2039 | { 2040 | "name": "Sebastian Bergmann", 2041 | "email": "sebastian@phpunit.de", 2042 | "role": "lead" 2043 | } 2044 | ], 2045 | "description": "Library for counting the lines of code in PHP source code", 2046 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 2047 | "support": { 2048 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 2049 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 2050 | }, 2051 | "funding": [ 2052 | { 2053 | "url": "https://github.com/sebastianbergmann", 2054 | "type": "github" 2055 | } 2056 | ], 2057 | "time": "2020-11-28T06:42:11+00:00" 2058 | }, 2059 | { 2060 | "name": "sebastian/object-enumerator", 2061 | "version": "4.0.4", 2062 | "source": { 2063 | "type": "git", 2064 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2065 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 2066 | }, 2067 | "dist": { 2068 | "type": "zip", 2069 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 2070 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 2071 | "shasum": "" 2072 | }, 2073 | "require": { 2074 | "php": ">=7.3", 2075 | "sebastian/object-reflector": "^2.0", 2076 | "sebastian/recursion-context": "^4.0" 2077 | }, 2078 | "require-dev": { 2079 | "phpunit/phpunit": "^9.3" 2080 | }, 2081 | "type": "library", 2082 | "extra": { 2083 | "branch-alias": { 2084 | "dev-master": "4.0-dev" 2085 | } 2086 | }, 2087 | "autoload": { 2088 | "classmap": [ 2089 | "src/" 2090 | ] 2091 | }, 2092 | "notification-url": "https://packagist.org/downloads/", 2093 | "license": [ 2094 | "BSD-3-Clause" 2095 | ], 2096 | "authors": [ 2097 | { 2098 | "name": "Sebastian Bergmann", 2099 | "email": "sebastian@phpunit.de" 2100 | } 2101 | ], 2102 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2103 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2104 | "support": { 2105 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2106 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 2107 | }, 2108 | "funding": [ 2109 | { 2110 | "url": "https://github.com/sebastianbergmann", 2111 | "type": "github" 2112 | } 2113 | ], 2114 | "time": "2020-10-26T13:12:34+00:00" 2115 | }, 2116 | { 2117 | "name": "sebastian/object-reflector", 2118 | "version": "2.0.4", 2119 | "source": { 2120 | "type": "git", 2121 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2122 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 2123 | }, 2124 | "dist": { 2125 | "type": "zip", 2126 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2127 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2128 | "shasum": "" 2129 | }, 2130 | "require": { 2131 | "php": ">=7.3" 2132 | }, 2133 | "require-dev": { 2134 | "phpunit/phpunit": "^9.3" 2135 | }, 2136 | "type": "library", 2137 | "extra": { 2138 | "branch-alias": { 2139 | "dev-master": "2.0-dev" 2140 | } 2141 | }, 2142 | "autoload": { 2143 | "classmap": [ 2144 | "src/" 2145 | ] 2146 | }, 2147 | "notification-url": "https://packagist.org/downloads/", 2148 | "license": [ 2149 | "BSD-3-Clause" 2150 | ], 2151 | "authors": [ 2152 | { 2153 | "name": "Sebastian Bergmann", 2154 | "email": "sebastian@phpunit.de" 2155 | } 2156 | ], 2157 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2158 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2159 | "support": { 2160 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2161 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 2162 | }, 2163 | "funding": [ 2164 | { 2165 | "url": "https://github.com/sebastianbergmann", 2166 | "type": "github" 2167 | } 2168 | ], 2169 | "time": "2020-10-26T13:14:26+00:00" 2170 | }, 2171 | { 2172 | "name": "sebastian/recursion-context", 2173 | "version": "4.0.4", 2174 | "source": { 2175 | "type": "git", 2176 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2177 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 2178 | }, 2179 | "dist": { 2180 | "type": "zip", 2181 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 2182 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 2183 | "shasum": "" 2184 | }, 2185 | "require": { 2186 | "php": ">=7.3" 2187 | }, 2188 | "require-dev": { 2189 | "phpunit/phpunit": "^9.3" 2190 | }, 2191 | "type": "library", 2192 | "extra": { 2193 | "branch-alias": { 2194 | "dev-master": "4.0-dev" 2195 | } 2196 | }, 2197 | "autoload": { 2198 | "classmap": [ 2199 | "src/" 2200 | ] 2201 | }, 2202 | "notification-url": "https://packagist.org/downloads/", 2203 | "license": [ 2204 | "BSD-3-Clause" 2205 | ], 2206 | "authors": [ 2207 | { 2208 | "name": "Sebastian Bergmann", 2209 | "email": "sebastian@phpunit.de" 2210 | }, 2211 | { 2212 | "name": "Jeff Welch", 2213 | "email": "whatthejeff@gmail.com" 2214 | }, 2215 | { 2216 | "name": "Adam Harvey", 2217 | "email": "aharvey@php.net" 2218 | } 2219 | ], 2220 | "description": "Provides functionality to recursively process PHP variables", 2221 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2222 | "support": { 2223 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2224 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 2225 | }, 2226 | "funding": [ 2227 | { 2228 | "url": "https://github.com/sebastianbergmann", 2229 | "type": "github" 2230 | } 2231 | ], 2232 | "time": "2020-10-26T13:17:30+00:00" 2233 | }, 2234 | { 2235 | "name": "sebastian/resource-operations", 2236 | "version": "3.0.3", 2237 | "source": { 2238 | "type": "git", 2239 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2240 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 2241 | }, 2242 | "dist": { 2243 | "type": "zip", 2244 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2245 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2246 | "shasum": "" 2247 | }, 2248 | "require": { 2249 | "php": ">=7.3" 2250 | }, 2251 | "require-dev": { 2252 | "phpunit/phpunit": "^9.0" 2253 | }, 2254 | "type": "library", 2255 | "extra": { 2256 | "branch-alias": { 2257 | "dev-master": "3.0-dev" 2258 | } 2259 | }, 2260 | "autoload": { 2261 | "classmap": [ 2262 | "src/" 2263 | ] 2264 | }, 2265 | "notification-url": "https://packagist.org/downloads/", 2266 | "license": [ 2267 | "BSD-3-Clause" 2268 | ], 2269 | "authors": [ 2270 | { 2271 | "name": "Sebastian Bergmann", 2272 | "email": "sebastian@phpunit.de" 2273 | } 2274 | ], 2275 | "description": "Provides a list of PHP built-in functions that operate on resources", 2276 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2277 | "support": { 2278 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 2279 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 2280 | }, 2281 | "funding": [ 2282 | { 2283 | "url": "https://github.com/sebastianbergmann", 2284 | "type": "github" 2285 | } 2286 | ], 2287 | "time": "2020-09-28T06:45:17+00:00" 2288 | }, 2289 | { 2290 | "name": "sebastian/type", 2291 | "version": "3.1.0", 2292 | "source": { 2293 | "type": "git", 2294 | "url": "https://github.com/sebastianbergmann/type.git", 2295 | "reference": "fb44e1cc6e557418387ad815780360057e40753e" 2296 | }, 2297 | "dist": { 2298 | "type": "zip", 2299 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e", 2300 | "reference": "fb44e1cc6e557418387ad815780360057e40753e", 2301 | "shasum": "" 2302 | }, 2303 | "require": { 2304 | "php": ">=7.3" 2305 | }, 2306 | "require-dev": { 2307 | "phpunit/phpunit": "^9.5" 2308 | }, 2309 | "type": "library", 2310 | "extra": { 2311 | "branch-alias": { 2312 | "dev-master": "3.1-dev" 2313 | } 2314 | }, 2315 | "autoload": { 2316 | "classmap": [ 2317 | "src/" 2318 | ] 2319 | }, 2320 | "notification-url": "https://packagist.org/downloads/", 2321 | "license": [ 2322 | "BSD-3-Clause" 2323 | ], 2324 | "authors": [ 2325 | { 2326 | "name": "Sebastian Bergmann", 2327 | "email": "sebastian@phpunit.de", 2328 | "role": "lead" 2329 | } 2330 | ], 2331 | "description": "Collection of value objects that represent the types of the PHP type system", 2332 | "homepage": "https://github.com/sebastianbergmann/type", 2333 | "support": { 2334 | "issues": "https://github.com/sebastianbergmann/type/issues", 2335 | "source": "https://github.com/sebastianbergmann/type/tree/3.1.0" 2336 | }, 2337 | "funding": [ 2338 | { 2339 | "url": "https://github.com/sebastianbergmann", 2340 | "type": "github" 2341 | } 2342 | ], 2343 | "time": "2022-08-29T06:55:37+00:00" 2344 | }, 2345 | { 2346 | "name": "sebastian/version", 2347 | "version": "3.0.2", 2348 | "source": { 2349 | "type": "git", 2350 | "url": "https://github.com/sebastianbergmann/version.git", 2351 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 2352 | }, 2353 | "dist": { 2354 | "type": "zip", 2355 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 2356 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 2357 | "shasum": "" 2358 | }, 2359 | "require": { 2360 | "php": ">=7.3" 2361 | }, 2362 | "type": "library", 2363 | "extra": { 2364 | "branch-alias": { 2365 | "dev-master": "3.0-dev" 2366 | } 2367 | }, 2368 | "autoload": { 2369 | "classmap": [ 2370 | "src/" 2371 | ] 2372 | }, 2373 | "notification-url": "https://packagist.org/downloads/", 2374 | "license": [ 2375 | "BSD-3-Clause" 2376 | ], 2377 | "authors": [ 2378 | { 2379 | "name": "Sebastian Bergmann", 2380 | "email": "sebastian@phpunit.de", 2381 | "role": "lead" 2382 | } 2383 | ], 2384 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2385 | "homepage": "https://github.com/sebastianbergmann/version", 2386 | "support": { 2387 | "issues": "https://github.com/sebastianbergmann/version/issues", 2388 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 2389 | }, 2390 | "funding": [ 2391 | { 2392 | "url": "https://github.com/sebastianbergmann", 2393 | "type": "github" 2394 | } 2395 | ], 2396 | "time": "2020-09-28T06:39:44+00:00" 2397 | }, 2398 | { 2399 | "name": "symfony/console", 2400 | "version": "v5.4.12", 2401 | "source": { 2402 | "type": "git", 2403 | "url": "https://github.com/symfony/console.git", 2404 | "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" 2405 | }, 2406 | "dist": { 2407 | "type": "zip", 2408 | "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", 2409 | "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", 2410 | "shasum": "" 2411 | }, 2412 | "require": { 2413 | "php": ">=7.2.5", 2414 | "symfony/deprecation-contracts": "^2.1|^3", 2415 | "symfony/polyfill-mbstring": "~1.0", 2416 | "symfony/polyfill-php73": "^1.9", 2417 | "symfony/polyfill-php80": "^1.16", 2418 | "symfony/service-contracts": "^1.1|^2|^3", 2419 | "symfony/string": "^5.1|^6.0" 2420 | }, 2421 | "conflict": { 2422 | "psr/log": ">=3", 2423 | "symfony/dependency-injection": "<4.4", 2424 | "symfony/dotenv": "<5.1", 2425 | "symfony/event-dispatcher": "<4.4", 2426 | "symfony/lock": "<4.4", 2427 | "symfony/process": "<4.4" 2428 | }, 2429 | "provide": { 2430 | "psr/log-implementation": "1.0|2.0" 2431 | }, 2432 | "require-dev": { 2433 | "psr/log": "^1|^2", 2434 | "symfony/config": "^4.4|^5.0|^6.0", 2435 | "symfony/dependency-injection": "^4.4|^5.0|^6.0", 2436 | "symfony/event-dispatcher": "^4.4|^5.0|^6.0", 2437 | "symfony/lock": "^4.4|^5.0|^6.0", 2438 | "symfony/process": "^4.4|^5.0|^6.0", 2439 | "symfony/var-dumper": "^4.4|^5.0|^6.0" 2440 | }, 2441 | "suggest": { 2442 | "psr/log": "For using the console logger", 2443 | "symfony/event-dispatcher": "", 2444 | "symfony/lock": "", 2445 | "symfony/process": "" 2446 | }, 2447 | "type": "library", 2448 | "autoload": { 2449 | "psr-4": { 2450 | "Symfony\\Component\\Console\\": "" 2451 | }, 2452 | "exclude-from-classmap": [ 2453 | "/Tests/" 2454 | ] 2455 | }, 2456 | "notification-url": "https://packagist.org/downloads/", 2457 | "license": [ 2458 | "MIT" 2459 | ], 2460 | "authors": [ 2461 | { 2462 | "name": "Fabien Potencier", 2463 | "email": "fabien@symfony.com" 2464 | }, 2465 | { 2466 | "name": "Symfony Community", 2467 | "homepage": "https://symfony.com/contributors" 2468 | } 2469 | ], 2470 | "description": "Eases the creation of beautiful and testable command line interfaces", 2471 | "homepage": "https://symfony.com", 2472 | "keywords": [ 2473 | "cli", 2474 | "command line", 2475 | "console", 2476 | "terminal" 2477 | ], 2478 | "support": { 2479 | "source": "https://github.com/symfony/console/tree/v5.4.12" 2480 | }, 2481 | "funding": [ 2482 | { 2483 | "url": "https://symfony.com/sponsor", 2484 | "type": "custom" 2485 | }, 2486 | { 2487 | "url": "https://github.com/fabpot", 2488 | "type": "github" 2489 | }, 2490 | { 2491 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2492 | "type": "tidelift" 2493 | } 2494 | ], 2495 | "time": "2022-08-17T13:18:05+00:00" 2496 | }, 2497 | { 2498 | "name": "symfony/deprecation-contracts", 2499 | "version": "v2.5.2", 2500 | "source": { 2501 | "type": "git", 2502 | "url": "https://github.com/symfony/deprecation-contracts.git", 2503 | "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" 2504 | }, 2505 | "dist": { 2506 | "type": "zip", 2507 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", 2508 | "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", 2509 | "shasum": "" 2510 | }, 2511 | "require": { 2512 | "php": ">=7.1" 2513 | }, 2514 | "type": "library", 2515 | "extra": { 2516 | "branch-alias": { 2517 | "dev-main": "2.5-dev" 2518 | }, 2519 | "thanks": { 2520 | "name": "symfony/contracts", 2521 | "url": "https://github.com/symfony/contracts" 2522 | } 2523 | }, 2524 | "autoload": { 2525 | "files": [ 2526 | "function.php" 2527 | ] 2528 | }, 2529 | "notification-url": "https://packagist.org/downloads/", 2530 | "license": [ 2531 | "MIT" 2532 | ], 2533 | "authors": [ 2534 | { 2535 | "name": "Nicolas Grekas", 2536 | "email": "p@tchwork.com" 2537 | }, 2538 | { 2539 | "name": "Symfony Community", 2540 | "homepage": "https://symfony.com/contributors" 2541 | } 2542 | ], 2543 | "description": "A generic function and convention to trigger deprecation notices", 2544 | "homepage": "https://symfony.com", 2545 | "support": { 2546 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" 2547 | }, 2548 | "funding": [ 2549 | { 2550 | "url": "https://symfony.com/sponsor", 2551 | "type": "custom" 2552 | }, 2553 | { 2554 | "url": "https://github.com/fabpot", 2555 | "type": "github" 2556 | }, 2557 | { 2558 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2559 | "type": "tidelift" 2560 | } 2561 | ], 2562 | "time": "2022-01-02T09:53:40+00:00" 2563 | }, 2564 | { 2565 | "name": "symfony/event-dispatcher", 2566 | "version": "v5.4.9", 2567 | "source": { 2568 | "type": "git", 2569 | "url": "https://github.com/symfony/event-dispatcher.git", 2570 | "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc" 2571 | }, 2572 | "dist": { 2573 | "type": "zip", 2574 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", 2575 | "reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc", 2576 | "shasum": "" 2577 | }, 2578 | "require": { 2579 | "php": ">=7.2.5", 2580 | "symfony/deprecation-contracts": "^2.1|^3", 2581 | "symfony/event-dispatcher-contracts": "^2|^3", 2582 | "symfony/polyfill-php80": "^1.16" 2583 | }, 2584 | "conflict": { 2585 | "symfony/dependency-injection": "<4.4" 2586 | }, 2587 | "provide": { 2588 | "psr/event-dispatcher-implementation": "1.0", 2589 | "symfony/event-dispatcher-implementation": "2.0" 2590 | }, 2591 | "require-dev": { 2592 | "psr/log": "^1|^2|^3", 2593 | "symfony/config": "^4.4|^5.0|^6.0", 2594 | "symfony/dependency-injection": "^4.4|^5.0|^6.0", 2595 | "symfony/error-handler": "^4.4|^5.0|^6.0", 2596 | "symfony/expression-language": "^4.4|^5.0|^6.0", 2597 | "symfony/http-foundation": "^4.4|^5.0|^6.0", 2598 | "symfony/service-contracts": "^1.1|^2|^3", 2599 | "symfony/stopwatch": "^4.4|^5.0|^6.0" 2600 | }, 2601 | "suggest": { 2602 | "symfony/dependency-injection": "", 2603 | "symfony/http-kernel": "" 2604 | }, 2605 | "type": "library", 2606 | "autoload": { 2607 | "psr-4": { 2608 | "Symfony\\Component\\EventDispatcher\\": "" 2609 | }, 2610 | "exclude-from-classmap": [ 2611 | "/Tests/" 2612 | ] 2613 | }, 2614 | "notification-url": "https://packagist.org/downloads/", 2615 | "license": [ 2616 | "MIT" 2617 | ], 2618 | "authors": [ 2619 | { 2620 | "name": "Fabien Potencier", 2621 | "email": "fabien@symfony.com" 2622 | }, 2623 | { 2624 | "name": "Symfony Community", 2625 | "homepage": "https://symfony.com/contributors" 2626 | } 2627 | ], 2628 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 2629 | "homepage": "https://symfony.com", 2630 | "support": { 2631 | "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9" 2632 | }, 2633 | "funding": [ 2634 | { 2635 | "url": "https://symfony.com/sponsor", 2636 | "type": "custom" 2637 | }, 2638 | { 2639 | "url": "https://github.com/fabpot", 2640 | "type": "github" 2641 | }, 2642 | { 2643 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2644 | "type": "tidelift" 2645 | } 2646 | ], 2647 | "time": "2022-05-05T16:45:39+00:00" 2648 | }, 2649 | { 2650 | "name": "symfony/event-dispatcher-contracts", 2651 | "version": "v2.5.2", 2652 | "source": { 2653 | "type": "git", 2654 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 2655 | "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" 2656 | }, 2657 | "dist": { 2658 | "type": "zip", 2659 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", 2660 | "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", 2661 | "shasum": "" 2662 | }, 2663 | "require": { 2664 | "php": ">=7.2.5", 2665 | "psr/event-dispatcher": "^1" 2666 | }, 2667 | "suggest": { 2668 | "symfony/event-dispatcher-implementation": "" 2669 | }, 2670 | "type": "library", 2671 | "extra": { 2672 | "branch-alias": { 2673 | "dev-main": "2.5-dev" 2674 | }, 2675 | "thanks": { 2676 | "name": "symfony/contracts", 2677 | "url": "https://github.com/symfony/contracts" 2678 | } 2679 | }, 2680 | "autoload": { 2681 | "psr-4": { 2682 | "Symfony\\Contracts\\EventDispatcher\\": "" 2683 | } 2684 | }, 2685 | "notification-url": "https://packagist.org/downloads/", 2686 | "license": [ 2687 | "MIT" 2688 | ], 2689 | "authors": [ 2690 | { 2691 | "name": "Nicolas Grekas", 2692 | "email": "p@tchwork.com" 2693 | }, 2694 | { 2695 | "name": "Symfony Community", 2696 | "homepage": "https://symfony.com/contributors" 2697 | } 2698 | ], 2699 | "description": "Generic abstractions related to dispatching event", 2700 | "homepage": "https://symfony.com", 2701 | "keywords": [ 2702 | "abstractions", 2703 | "contracts", 2704 | "decoupling", 2705 | "interfaces", 2706 | "interoperability", 2707 | "standards" 2708 | ], 2709 | "support": { 2710 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" 2711 | }, 2712 | "funding": [ 2713 | { 2714 | "url": "https://symfony.com/sponsor", 2715 | "type": "custom" 2716 | }, 2717 | { 2718 | "url": "https://github.com/fabpot", 2719 | "type": "github" 2720 | }, 2721 | { 2722 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2723 | "type": "tidelift" 2724 | } 2725 | ], 2726 | "time": "2022-01-02T09:53:40+00:00" 2727 | }, 2728 | { 2729 | "name": "symfony/filesystem", 2730 | "version": "v5.4.12", 2731 | "source": { 2732 | "type": "git", 2733 | "url": "https://github.com/symfony/filesystem.git", 2734 | "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447" 2735 | }, 2736 | "dist": { 2737 | "type": "zip", 2738 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/2d67c1f9a1937406a9be3171b4b22250c0a11447", 2739 | "reference": "2d67c1f9a1937406a9be3171b4b22250c0a11447", 2740 | "shasum": "" 2741 | }, 2742 | "require": { 2743 | "php": ">=7.2.5", 2744 | "symfony/polyfill-ctype": "~1.8", 2745 | "symfony/polyfill-mbstring": "~1.8", 2746 | "symfony/polyfill-php80": "^1.16" 2747 | }, 2748 | "type": "library", 2749 | "autoload": { 2750 | "psr-4": { 2751 | "Symfony\\Component\\Filesystem\\": "" 2752 | }, 2753 | "exclude-from-classmap": [ 2754 | "/Tests/" 2755 | ] 2756 | }, 2757 | "notification-url": "https://packagist.org/downloads/", 2758 | "license": [ 2759 | "MIT" 2760 | ], 2761 | "authors": [ 2762 | { 2763 | "name": "Fabien Potencier", 2764 | "email": "fabien@symfony.com" 2765 | }, 2766 | { 2767 | "name": "Symfony Community", 2768 | "homepage": "https://symfony.com/contributors" 2769 | } 2770 | ], 2771 | "description": "Provides basic utilities for the filesystem", 2772 | "homepage": "https://symfony.com", 2773 | "support": { 2774 | "source": "https://github.com/symfony/filesystem/tree/v5.4.12" 2775 | }, 2776 | "funding": [ 2777 | { 2778 | "url": "https://symfony.com/sponsor", 2779 | "type": "custom" 2780 | }, 2781 | { 2782 | "url": "https://github.com/fabpot", 2783 | "type": "github" 2784 | }, 2785 | { 2786 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2787 | "type": "tidelift" 2788 | } 2789 | ], 2790 | "time": "2022-08-02T13:48:16+00:00" 2791 | }, 2792 | { 2793 | "name": "symfony/finder", 2794 | "version": "v5.4.11", 2795 | "source": { 2796 | "type": "git", 2797 | "url": "https://github.com/symfony/finder.git", 2798 | "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" 2799 | }, 2800 | "dist": { 2801 | "type": "zip", 2802 | "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", 2803 | "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", 2804 | "shasum": "" 2805 | }, 2806 | "require": { 2807 | "php": ">=7.2.5", 2808 | "symfony/deprecation-contracts": "^2.1|^3", 2809 | "symfony/polyfill-php80": "^1.16" 2810 | }, 2811 | "type": "library", 2812 | "autoload": { 2813 | "psr-4": { 2814 | "Symfony\\Component\\Finder\\": "" 2815 | }, 2816 | "exclude-from-classmap": [ 2817 | "/Tests/" 2818 | ] 2819 | }, 2820 | "notification-url": "https://packagist.org/downloads/", 2821 | "license": [ 2822 | "MIT" 2823 | ], 2824 | "authors": [ 2825 | { 2826 | "name": "Fabien Potencier", 2827 | "email": "fabien@symfony.com" 2828 | }, 2829 | { 2830 | "name": "Symfony Community", 2831 | "homepage": "https://symfony.com/contributors" 2832 | } 2833 | ], 2834 | "description": "Finds files and directories via an intuitive fluent interface", 2835 | "homepage": "https://symfony.com", 2836 | "support": { 2837 | "source": "https://github.com/symfony/finder/tree/v5.4.11" 2838 | }, 2839 | "funding": [ 2840 | { 2841 | "url": "https://symfony.com/sponsor", 2842 | "type": "custom" 2843 | }, 2844 | { 2845 | "url": "https://github.com/fabpot", 2846 | "type": "github" 2847 | }, 2848 | { 2849 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2850 | "type": "tidelift" 2851 | } 2852 | ], 2853 | "time": "2022-07-29T07:37:50+00:00" 2854 | }, 2855 | { 2856 | "name": "symfony/options-resolver", 2857 | "version": "v5.4.11", 2858 | "source": { 2859 | "type": "git", 2860 | "url": "https://github.com/symfony/options-resolver.git", 2861 | "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690" 2862 | }, 2863 | "dist": { 2864 | "type": "zip", 2865 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/54f14e36aa73cb8f7261d7686691fd4d75ea2690", 2866 | "reference": "54f14e36aa73cb8f7261d7686691fd4d75ea2690", 2867 | "shasum": "" 2868 | }, 2869 | "require": { 2870 | "php": ">=7.2.5", 2871 | "symfony/deprecation-contracts": "^2.1|^3", 2872 | "symfony/polyfill-php73": "~1.0", 2873 | "symfony/polyfill-php80": "^1.16" 2874 | }, 2875 | "type": "library", 2876 | "autoload": { 2877 | "psr-4": { 2878 | "Symfony\\Component\\OptionsResolver\\": "" 2879 | }, 2880 | "exclude-from-classmap": [ 2881 | "/Tests/" 2882 | ] 2883 | }, 2884 | "notification-url": "https://packagist.org/downloads/", 2885 | "license": [ 2886 | "MIT" 2887 | ], 2888 | "authors": [ 2889 | { 2890 | "name": "Fabien Potencier", 2891 | "email": "fabien@symfony.com" 2892 | }, 2893 | { 2894 | "name": "Symfony Community", 2895 | "homepage": "https://symfony.com/contributors" 2896 | } 2897 | ], 2898 | "description": "Provides an improved replacement for the array_replace PHP function", 2899 | "homepage": "https://symfony.com", 2900 | "keywords": [ 2901 | "config", 2902 | "configuration", 2903 | "options" 2904 | ], 2905 | "support": { 2906 | "source": "https://github.com/symfony/options-resolver/tree/v5.4.11" 2907 | }, 2908 | "funding": [ 2909 | { 2910 | "url": "https://symfony.com/sponsor", 2911 | "type": "custom" 2912 | }, 2913 | { 2914 | "url": "https://github.com/fabpot", 2915 | "type": "github" 2916 | }, 2917 | { 2918 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2919 | "type": "tidelift" 2920 | } 2921 | ], 2922 | "time": "2022-07-20T13:00:38+00:00" 2923 | }, 2924 | { 2925 | "name": "symfony/polyfill-ctype", 2926 | "version": "v1.26.0", 2927 | "source": { 2928 | "type": "git", 2929 | "url": "https://github.com/symfony/polyfill-ctype.git", 2930 | "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" 2931 | }, 2932 | "dist": { 2933 | "type": "zip", 2934 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", 2935 | "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", 2936 | "shasum": "" 2937 | }, 2938 | "require": { 2939 | "php": ">=7.1" 2940 | }, 2941 | "provide": { 2942 | "ext-ctype": "*" 2943 | }, 2944 | "suggest": { 2945 | "ext-ctype": "For best performance" 2946 | }, 2947 | "type": "library", 2948 | "extra": { 2949 | "branch-alias": { 2950 | "dev-main": "1.26-dev" 2951 | }, 2952 | "thanks": { 2953 | "name": "symfony/polyfill", 2954 | "url": "https://github.com/symfony/polyfill" 2955 | } 2956 | }, 2957 | "autoload": { 2958 | "files": [ 2959 | "bootstrap.php" 2960 | ], 2961 | "psr-4": { 2962 | "Symfony\\Polyfill\\Ctype\\": "" 2963 | } 2964 | }, 2965 | "notification-url": "https://packagist.org/downloads/", 2966 | "license": [ 2967 | "MIT" 2968 | ], 2969 | "authors": [ 2970 | { 2971 | "name": "Gert de Pagter", 2972 | "email": "BackEndTea@gmail.com" 2973 | }, 2974 | { 2975 | "name": "Symfony Community", 2976 | "homepage": "https://symfony.com/contributors" 2977 | } 2978 | ], 2979 | "description": "Symfony polyfill for ctype functions", 2980 | "homepage": "https://symfony.com", 2981 | "keywords": [ 2982 | "compatibility", 2983 | "ctype", 2984 | "polyfill", 2985 | "portable" 2986 | ], 2987 | "support": { 2988 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" 2989 | }, 2990 | "funding": [ 2991 | { 2992 | "url": "https://symfony.com/sponsor", 2993 | "type": "custom" 2994 | }, 2995 | { 2996 | "url": "https://github.com/fabpot", 2997 | "type": "github" 2998 | }, 2999 | { 3000 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3001 | "type": "tidelift" 3002 | } 3003 | ], 3004 | "time": "2022-05-24T11:49:31+00:00" 3005 | }, 3006 | { 3007 | "name": "symfony/polyfill-intl-grapheme", 3008 | "version": "v1.26.0", 3009 | "source": { 3010 | "type": "git", 3011 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 3012 | "reference": "433d05519ce6990bf3530fba6957499d327395c2" 3013 | }, 3014 | "dist": { 3015 | "type": "zip", 3016 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", 3017 | "reference": "433d05519ce6990bf3530fba6957499d327395c2", 3018 | "shasum": "" 3019 | }, 3020 | "require": { 3021 | "php": ">=7.1" 3022 | }, 3023 | "suggest": { 3024 | "ext-intl": "For best performance" 3025 | }, 3026 | "type": "library", 3027 | "extra": { 3028 | "branch-alias": { 3029 | "dev-main": "1.26-dev" 3030 | }, 3031 | "thanks": { 3032 | "name": "symfony/polyfill", 3033 | "url": "https://github.com/symfony/polyfill" 3034 | } 3035 | }, 3036 | "autoload": { 3037 | "files": [ 3038 | "bootstrap.php" 3039 | ], 3040 | "psr-4": { 3041 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 3042 | } 3043 | }, 3044 | "notification-url": "https://packagist.org/downloads/", 3045 | "license": [ 3046 | "MIT" 3047 | ], 3048 | "authors": [ 3049 | { 3050 | "name": "Nicolas Grekas", 3051 | "email": "p@tchwork.com" 3052 | }, 3053 | { 3054 | "name": "Symfony Community", 3055 | "homepage": "https://symfony.com/contributors" 3056 | } 3057 | ], 3058 | "description": "Symfony polyfill for intl's grapheme_* functions", 3059 | "homepage": "https://symfony.com", 3060 | "keywords": [ 3061 | "compatibility", 3062 | "grapheme", 3063 | "intl", 3064 | "polyfill", 3065 | "portable", 3066 | "shim" 3067 | ], 3068 | "support": { 3069 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" 3070 | }, 3071 | "funding": [ 3072 | { 3073 | "url": "https://symfony.com/sponsor", 3074 | "type": "custom" 3075 | }, 3076 | { 3077 | "url": "https://github.com/fabpot", 3078 | "type": "github" 3079 | }, 3080 | { 3081 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3082 | "type": "tidelift" 3083 | } 3084 | ], 3085 | "time": "2022-05-24T11:49:31+00:00" 3086 | }, 3087 | { 3088 | "name": "symfony/polyfill-intl-normalizer", 3089 | "version": "v1.26.0", 3090 | "source": { 3091 | "type": "git", 3092 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 3093 | "reference": "219aa369ceff116e673852dce47c3a41794c14bd" 3094 | }, 3095 | "dist": { 3096 | "type": "zip", 3097 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", 3098 | "reference": "219aa369ceff116e673852dce47c3a41794c14bd", 3099 | "shasum": "" 3100 | }, 3101 | "require": { 3102 | "php": ">=7.1" 3103 | }, 3104 | "suggest": { 3105 | "ext-intl": "For best performance" 3106 | }, 3107 | "type": "library", 3108 | "extra": { 3109 | "branch-alias": { 3110 | "dev-main": "1.26-dev" 3111 | }, 3112 | "thanks": { 3113 | "name": "symfony/polyfill", 3114 | "url": "https://github.com/symfony/polyfill" 3115 | } 3116 | }, 3117 | "autoload": { 3118 | "files": [ 3119 | "bootstrap.php" 3120 | ], 3121 | "psr-4": { 3122 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 3123 | }, 3124 | "classmap": [ 3125 | "Resources/stubs" 3126 | ] 3127 | }, 3128 | "notification-url": "https://packagist.org/downloads/", 3129 | "license": [ 3130 | "MIT" 3131 | ], 3132 | "authors": [ 3133 | { 3134 | "name": "Nicolas Grekas", 3135 | "email": "p@tchwork.com" 3136 | }, 3137 | { 3138 | "name": "Symfony Community", 3139 | "homepage": "https://symfony.com/contributors" 3140 | } 3141 | ], 3142 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 3143 | "homepage": "https://symfony.com", 3144 | "keywords": [ 3145 | "compatibility", 3146 | "intl", 3147 | "normalizer", 3148 | "polyfill", 3149 | "portable", 3150 | "shim" 3151 | ], 3152 | "support": { 3153 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" 3154 | }, 3155 | "funding": [ 3156 | { 3157 | "url": "https://symfony.com/sponsor", 3158 | "type": "custom" 3159 | }, 3160 | { 3161 | "url": "https://github.com/fabpot", 3162 | "type": "github" 3163 | }, 3164 | { 3165 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3166 | "type": "tidelift" 3167 | } 3168 | ], 3169 | "time": "2022-05-24T11:49:31+00:00" 3170 | }, 3171 | { 3172 | "name": "symfony/polyfill-mbstring", 3173 | "version": "v1.26.0", 3174 | "source": { 3175 | "type": "git", 3176 | "url": "https://github.com/symfony/polyfill-mbstring.git", 3177 | "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" 3178 | }, 3179 | "dist": { 3180 | "type": "zip", 3181 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", 3182 | "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", 3183 | "shasum": "" 3184 | }, 3185 | "require": { 3186 | "php": ">=7.1" 3187 | }, 3188 | "provide": { 3189 | "ext-mbstring": "*" 3190 | }, 3191 | "suggest": { 3192 | "ext-mbstring": "For best performance" 3193 | }, 3194 | "type": "library", 3195 | "extra": { 3196 | "branch-alias": { 3197 | "dev-main": "1.26-dev" 3198 | }, 3199 | "thanks": { 3200 | "name": "symfony/polyfill", 3201 | "url": "https://github.com/symfony/polyfill" 3202 | } 3203 | }, 3204 | "autoload": { 3205 | "files": [ 3206 | "bootstrap.php" 3207 | ], 3208 | "psr-4": { 3209 | "Symfony\\Polyfill\\Mbstring\\": "" 3210 | } 3211 | }, 3212 | "notification-url": "https://packagist.org/downloads/", 3213 | "license": [ 3214 | "MIT" 3215 | ], 3216 | "authors": [ 3217 | { 3218 | "name": "Nicolas Grekas", 3219 | "email": "p@tchwork.com" 3220 | }, 3221 | { 3222 | "name": "Symfony Community", 3223 | "homepage": "https://symfony.com/contributors" 3224 | } 3225 | ], 3226 | "description": "Symfony polyfill for the Mbstring extension", 3227 | "homepage": "https://symfony.com", 3228 | "keywords": [ 3229 | "compatibility", 3230 | "mbstring", 3231 | "polyfill", 3232 | "portable", 3233 | "shim" 3234 | ], 3235 | "support": { 3236 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" 3237 | }, 3238 | "funding": [ 3239 | { 3240 | "url": "https://symfony.com/sponsor", 3241 | "type": "custom" 3242 | }, 3243 | { 3244 | "url": "https://github.com/fabpot", 3245 | "type": "github" 3246 | }, 3247 | { 3248 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3249 | "type": "tidelift" 3250 | } 3251 | ], 3252 | "time": "2022-05-24T11:49:31+00:00" 3253 | }, 3254 | { 3255 | "name": "symfony/polyfill-php73", 3256 | "version": "v1.26.0", 3257 | "source": { 3258 | "type": "git", 3259 | "url": "https://github.com/symfony/polyfill-php73.git", 3260 | "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" 3261 | }, 3262 | "dist": { 3263 | "type": "zip", 3264 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", 3265 | "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", 3266 | "shasum": "" 3267 | }, 3268 | "require": { 3269 | "php": ">=7.1" 3270 | }, 3271 | "type": "library", 3272 | "extra": { 3273 | "branch-alias": { 3274 | "dev-main": "1.26-dev" 3275 | }, 3276 | "thanks": { 3277 | "name": "symfony/polyfill", 3278 | "url": "https://github.com/symfony/polyfill" 3279 | } 3280 | }, 3281 | "autoload": { 3282 | "files": [ 3283 | "bootstrap.php" 3284 | ], 3285 | "psr-4": { 3286 | "Symfony\\Polyfill\\Php73\\": "" 3287 | }, 3288 | "classmap": [ 3289 | "Resources/stubs" 3290 | ] 3291 | }, 3292 | "notification-url": "https://packagist.org/downloads/", 3293 | "license": [ 3294 | "MIT" 3295 | ], 3296 | "authors": [ 3297 | { 3298 | "name": "Nicolas Grekas", 3299 | "email": "p@tchwork.com" 3300 | }, 3301 | { 3302 | "name": "Symfony Community", 3303 | "homepage": "https://symfony.com/contributors" 3304 | } 3305 | ], 3306 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 3307 | "homepage": "https://symfony.com", 3308 | "keywords": [ 3309 | "compatibility", 3310 | "polyfill", 3311 | "portable", 3312 | "shim" 3313 | ], 3314 | "support": { 3315 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" 3316 | }, 3317 | "funding": [ 3318 | { 3319 | "url": "https://symfony.com/sponsor", 3320 | "type": "custom" 3321 | }, 3322 | { 3323 | "url": "https://github.com/fabpot", 3324 | "type": "github" 3325 | }, 3326 | { 3327 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3328 | "type": "tidelift" 3329 | } 3330 | ], 3331 | "time": "2022-05-24T11:49:31+00:00" 3332 | }, 3333 | { 3334 | "name": "symfony/polyfill-php80", 3335 | "version": "v1.26.0", 3336 | "source": { 3337 | "type": "git", 3338 | "url": "https://github.com/symfony/polyfill-php80.git", 3339 | "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" 3340 | }, 3341 | "dist": { 3342 | "type": "zip", 3343 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", 3344 | "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", 3345 | "shasum": "" 3346 | }, 3347 | "require": { 3348 | "php": ">=7.1" 3349 | }, 3350 | "type": "library", 3351 | "extra": { 3352 | "branch-alias": { 3353 | "dev-main": "1.26-dev" 3354 | }, 3355 | "thanks": { 3356 | "name": "symfony/polyfill", 3357 | "url": "https://github.com/symfony/polyfill" 3358 | } 3359 | }, 3360 | "autoload": { 3361 | "files": [ 3362 | "bootstrap.php" 3363 | ], 3364 | "psr-4": { 3365 | "Symfony\\Polyfill\\Php80\\": "" 3366 | }, 3367 | "classmap": [ 3368 | "Resources/stubs" 3369 | ] 3370 | }, 3371 | "notification-url": "https://packagist.org/downloads/", 3372 | "license": [ 3373 | "MIT" 3374 | ], 3375 | "authors": [ 3376 | { 3377 | "name": "Ion Bazan", 3378 | "email": "ion.bazan@gmail.com" 3379 | }, 3380 | { 3381 | "name": "Nicolas Grekas", 3382 | "email": "p@tchwork.com" 3383 | }, 3384 | { 3385 | "name": "Symfony Community", 3386 | "homepage": "https://symfony.com/contributors" 3387 | } 3388 | ], 3389 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 3390 | "homepage": "https://symfony.com", 3391 | "keywords": [ 3392 | "compatibility", 3393 | "polyfill", 3394 | "portable", 3395 | "shim" 3396 | ], 3397 | "support": { 3398 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" 3399 | }, 3400 | "funding": [ 3401 | { 3402 | "url": "https://symfony.com/sponsor", 3403 | "type": "custom" 3404 | }, 3405 | { 3406 | "url": "https://github.com/fabpot", 3407 | "type": "github" 3408 | }, 3409 | { 3410 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3411 | "type": "tidelift" 3412 | } 3413 | ], 3414 | "time": "2022-05-10T07:21:04+00:00" 3415 | }, 3416 | { 3417 | "name": "symfony/polyfill-php81", 3418 | "version": "v1.26.0", 3419 | "source": { 3420 | "type": "git", 3421 | "url": "https://github.com/symfony/polyfill-php81.git", 3422 | "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" 3423 | }, 3424 | "dist": { 3425 | "type": "zip", 3426 | "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", 3427 | "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", 3428 | "shasum": "" 3429 | }, 3430 | "require": { 3431 | "php": ">=7.1" 3432 | }, 3433 | "type": "library", 3434 | "extra": { 3435 | "branch-alias": { 3436 | "dev-main": "1.26-dev" 3437 | }, 3438 | "thanks": { 3439 | "name": "symfony/polyfill", 3440 | "url": "https://github.com/symfony/polyfill" 3441 | } 3442 | }, 3443 | "autoload": { 3444 | "files": [ 3445 | "bootstrap.php" 3446 | ], 3447 | "psr-4": { 3448 | "Symfony\\Polyfill\\Php81\\": "" 3449 | }, 3450 | "classmap": [ 3451 | "Resources/stubs" 3452 | ] 3453 | }, 3454 | "notification-url": "https://packagist.org/downloads/", 3455 | "license": [ 3456 | "MIT" 3457 | ], 3458 | "authors": [ 3459 | { 3460 | "name": "Nicolas Grekas", 3461 | "email": "p@tchwork.com" 3462 | }, 3463 | { 3464 | "name": "Symfony Community", 3465 | "homepage": "https://symfony.com/contributors" 3466 | } 3467 | ], 3468 | "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", 3469 | "homepage": "https://symfony.com", 3470 | "keywords": [ 3471 | "compatibility", 3472 | "polyfill", 3473 | "portable", 3474 | "shim" 3475 | ], 3476 | "support": { 3477 | "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" 3478 | }, 3479 | "funding": [ 3480 | { 3481 | "url": "https://symfony.com/sponsor", 3482 | "type": "custom" 3483 | }, 3484 | { 3485 | "url": "https://github.com/fabpot", 3486 | "type": "github" 3487 | }, 3488 | { 3489 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3490 | "type": "tidelift" 3491 | } 3492 | ], 3493 | "time": "2022-05-24T11:49:31+00:00" 3494 | }, 3495 | { 3496 | "name": "symfony/process", 3497 | "version": "v5.4.11", 3498 | "source": { 3499 | "type": "git", 3500 | "url": "https://github.com/symfony/process.git", 3501 | "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" 3502 | }, 3503 | "dist": { 3504 | "type": "zip", 3505 | "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", 3506 | "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", 3507 | "shasum": "" 3508 | }, 3509 | "require": { 3510 | "php": ">=7.2.5", 3511 | "symfony/polyfill-php80": "^1.16" 3512 | }, 3513 | "type": "library", 3514 | "autoload": { 3515 | "psr-4": { 3516 | "Symfony\\Component\\Process\\": "" 3517 | }, 3518 | "exclude-from-classmap": [ 3519 | "/Tests/" 3520 | ] 3521 | }, 3522 | "notification-url": "https://packagist.org/downloads/", 3523 | "license": [ 3524 | "MIT" 3525 | ], 3526 | "authors": [ 3527 | { 3528 | "name": "Fabien Potencier", 3529 | "email": "fabien@symfony.com" 3530 | }, 3531 | { 3532 | "name": "Symfony Community", 3533 | "homepage": "https://symfony.com/contributors" 3534 | } 3535 | ], 3536 | "description": "Executes commands in sub-processes", 3537 | "homepage": "https://symfony.com", 3538 | "support": { 3539 | "source": "https://github.com/symfony/process/tree/v5.4.11" 3540 | }, 3541 | "funding": [ 3542 | { 3543 | "url": "https://symfony.com/sponsor", 3544 | "type": "custom" 3545 | }, 3546 | { 3547 | "url": "https://github.com/fabpot", 3548 | "type": "github" 3549 | }, 3550 | { 3551 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3552 | "type": "tidelift" 3553 | } 3554 | ], 3555 | "time": "2022-06-27T16:58:25+00:00" 3556 | }, 3557 | { 3558 | "name": "symfony/service-contracts", 3559 | "version": "v2.5.2", 3560 | "source": { 3561 | "type": "git", 3562 | "url": "https://github.com/symfony/service-contracts.git", 3563 | "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" 3564 | }, 3565 | "dist": { 3566 | "type": "zip", 3567 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", 3568 | "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", 3569 | "shasum": "" 3570 | }, 3571 | "require": { 3572 | "php": ">=7.2.5", 3573 | "psr/container": "^1.1", 3574 | "symfony/deprecation-contracts": "^2.1|^3" 3575 | }, 3576 | "conflict": { 3577 | "ext-psr": "<1.1|>=2" 3578 | }, 3579 | "suggest": { 3580 | "symfony/service-implementation": "" 3581 | }, 3582 | "type": "library", 3583 | "extra": { 3584 | "branch-alias": { 3585 | "dev-main": "2.5-dev" 3586 | }, 3587 | "thanks": { 3588 | "name": "symfony/contracts", 3589 | "url": "https://github.com/symfony/contracts" 3590 | } 3591 | }, 3592 | "autoload": { 3593 | "psr-4": { 3594 | "Symfony\\Contracts\\Service\\": "" 3595 | } 3596 | }, 3597 | "notification-url": "https://packagist.org/downloads/", 3598 | "license": [ 3599 | "MIT" 3600 | ], 3601 | "authors": [ 3602 | { 3603 | "name": "Nicolas Grekas", 3604 | "email": "p@tchwork.com" 3605 | }, 3606 | { 3607 | "name": "Symfony Community", 3608 | "homepage": "https://symfony.com/contributors" 3609 | } 3610 | ], 3611 | "description": "Generic abstractions related to writing services", 3612 | "homepage": "https://symfony.com", 3613 | "keywords": [ 3614 | "abstractions", 3615 | "contracts", 3616 | "decoupling", 3617 | "interfaces", 3618 | "interoperability", 3619 | "standards" 3620 | ], 3621 | "support": { 3622 | "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" 3623 | }, 3624 | "funding": [ 3625 | { 3626 | "url": "https://symfony.com/sponsor", 3627 | "type": "custom" 3628 | }, 3629 | { 3630 | "url": "https://github.com/fabpot", 3631 | "type": "github" 3632 | }, 3633 | { 3634 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3635 | "type": "tidelift" 3636 | } 3637 | ], 3638 | "time": "2022-05-30T19:17:29+00:00" 3639 | }, 3640 | { 3641 | "name": "symfony/stopwatch", 3642 | "version": "v5.4.5", 3643 | "source": { 3644 | "type": "git", 3645 | "url": "https://github.com/symfony/stopwatch.git", 3646 | "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30" 3647 | }, 3648 | "dist": { 3649 | "type": "zip", 3650 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", 3651 | "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30", 3652 | "shasum": "" 3653 | }, 3654 | "require": { 3655 | "php": ">=7.2.5", 3656 | "symfony/service-contracts": "^1|^2|^3" 3657 | }, 3658 | "type": "library", 3659 | "autoload": { 3660 | "psr-4": { 3661 | "Symfony\\Component\\Stopwatch\\": "" 3662 | }, 3663 | "exclude-from-classmap": [ 3664 | "/Tests/" 3665 | ] 3666 | }, 3667 | "notification-url": "https://packagist.org/downloads/", 3668 | "license": [ 3669 | "MIT" 3670 | ], 3671 | "authors": [ 3672 | { 3673 | "name": "Fabien Potencier", 3674 | "email": "fabien@symfony.com" 3675 | }, 3676 | { 3677 | "name": "Symfony Community", 3678 | "homepage": "https://symfony.com/contributors" 3679 | } 3680 | ], 3681 | "description": "Provides a way to profile code", 3682 | "homepage": "https://symfony.com", 3683 | "support": { 3684 | "source": "https://github.com/symfony/stopwatch/tree/v5.4.5" 3685 | }, 3686 | "funding": [ 3687 | { 3688 | "url": "https://symfony.com/sponsor", 3689 | "type": "custom" 3690 | }, 3691 | { 3692 | "url": "https://github.com/fabpot", 3693 | "type": "github" 3694 | }, 3695 | { 3696 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3697 | "type": "tidelift" 3698 | } 3699 | ], 3700 | "time": "2022-02-18T16:06:09+00:00" 3701 | }, 3702 | { 3703 | "name": "symfony/string", 3704 | "version": "v5.4.12", 3705 | "source": { 3706 | "type": "git", 3707 | "url": "https://github.com/symfony/string.git", 3708 | "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058" 3709 | }, 3710 | "dist": { 3711 | "type": "zip", 3712 | "url": "https://api.github.com/repos/symfony/string/zipball/2fc515e512d721bf31ea76bd02fe23ada4640058", 3713 | "reference": "2fc515e512d721bf31ea76bd02fe23ada4640058", 3714 | "shasum": "" 3715 | }, 3716 | "require": { 3717 | "php": ">=7.2.5", 3718 | "symfony/polyfill-ctype": "~1.8", 3719 | "symfony/polyfill-intl-grapheme": "~1.0", 3720 | "symfony/polyfill-intl-normalizer": "~1.0", 3721 | "symfony/polyfill-mbstring": "~1.0", 3722 | "symfony/polyfill-php80": "~1.15" 3723 | }, 3724 | "conflict": { 3725 | "symfony/translation-contracts": ">=3.0" 3726 | }, 3727 | "require-dev": { 3728 | "symfony/error-handler": "^4.4|^5.0|^6.0", 3729 | "symfony/http-client": "^4.4|^5.0|^6.0", 3730 | "symfony/translation-contracts": "^1.1|^2", 3731 | "symfony/var-exporter": "^4.4|^5.0|^6.0" 3732 | }, 3733 | "type": "library", 3734 | "autoload": { 3735 | "files": [ 3736 | "Resources/functions.php" 3737 | ], 3738 | "psr-4": { 3739 | "Symfony\\Component\\String\\": "" 3740 | }, 3741 | "exclude-from-classmap": [ 3742 | "/Tests/" 3743 | ] 3744 | }, 3745 | "notification-url": "https://packagist.org/downloads/", 3746 | "license": [ 3747 | "MIT" 3748 | ], 3749 | "authors": [ 3750 | { 3751 | "name": "Nicolas Grekas", 3752 | "email": "p@tchwork.com" 3753 | }, 3754 | { 3755 | "name": "Symfony Community", 3756 | "homepage": "https://symfony.com/contributors" 3757 | } 3758 | ], 3759 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 3760 | "homepage": "https://symfony.com", 3761 | "keywords": [ 3762 | "grapheme", 3763 | "i18n", 3764 | "string", 3765 | "unicode", 3766 | "utf-8", 3767 | "utf8" 3768 | ], 3769 | "support": { 3770 | "source": "https://github.com/symfony/string/tree/v5.4.12" 3771 | }, 3772 | "funding": [ 3773 | { 3774 | "url": "https://symfony.com/sponsor", 3775 | "type": "custom" 3776 | }, 3777 | { 3778 | "url": "https://github.com/fabpot", 3779 | "type": "github" 3780 | }, 3781 | { 3782 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3783 | "type": "tidelift" 3784 | } 3785 | ], 3786 | "time": "2022-08-12T17:03:11+00:00" 3787 | }, 3788 | { 3789 | "name": "thecodingmachine/phpstan-strict-rules", 3790 | "version": "v1.0.0", 3791 | "source": { 3792 | "type": "git", 3793 | "url": "https://github.com/thecodingmachine/phpstan-strict-rules.git", 3794 | "reference": "2ba8fa8b328c45f3b149c05def5bf96793c594b6" 3795 | }, 3796 | "dist": { 3797 | "type": "zip", 3798 | "url": "https://api.github.com/repos/thecodingmachine/phpstan-strict-rules/zipball/2ba8fa8b328c45f3b149c05def5bf96793c594b6", 3799 | "reference": "2ba8fa8b328c45f3b149c05def5bf96793c594b6", 3800 | "shasum": "" 3801 | }, 3802 | "require": { 3803 | "php": "^7.1|^8.0", 3804 | "phpstan/phpstan": "^1.0" 3805 | }, 3806 | "require-dev": { 3807 | "php-coveralls/php-coveralls": "^2.1", 3808 | "phpunit/phpunit": "^7.1" 3809 | }, 3810 | "type": "phpstan-extension", 3811 | "extra": { 3812 | "branch-alias": { 3813 | "dev-master": "1.0-dev" 3814 | }, 3815 | "phpstan": { 3816 | "includes": [ 3817 | "phpstan-strict-rules.neon" 3818 | ] 3819 | } 3820 | }, 3821 | "autoload": { 3822 | "psr-4": { 3823 | "TheCodingMachine\\PHPStan\\": "src/" 3824 | } 3825 | }, 3826 | "notification-url": "https://packagist.org/downloads/", 3827 | "license": [ 3828 | "MIT" 3829 | ], 3830 | "authors": [ 3831 | { 3832 | "name": "David Négrier", 3833 | "email": "d.negrier@thecodingmachine.com" 3834 | } 3835 | ], 3836 | "description": "A set of additional rules for PHPStan based on best practices followed at TheCodingMachine", 3837 | "support": { 3838 | "issues": "https://github.com/thecodingmachine/phpstan-strict-rules/issues", 3839 | "source": "https://github.com/thecodingmachine/phpstan-strict-rules/tree/v1.0.0" 3840 | }, 3841 | "time": "2021-11-08T09:10:49+00:00" 3842 | }, 3843 | { 3844 | "name": "theseer/tokenizer", 3845 | "version": "1.2.1", 3846 | "source": { 3847 | "type": "git", 3848 | "url": "https://github.com/theseer/tokenizer.git", 3849 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 3850 | }, 3851 | "dist": { 3852 | "type": "zip", 3853 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 3854 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 3855 | "shasum": "" 3856 | }, 3857 | "require": { 3858 | "ext-dom": "*", 3859 | "ext-tokenizer": "*", 3860 | "ext-xmlwriter": "*", 3861 | "php": "^7.2 || ^8.0" 3862 | }, 3863 | "type": "library", 3864 | "autoload": { 3865 | "classmap": [ 3866 | "src/" 3867 | ] 3868 | }, 3869 | "notification-url": "https://packagist.org/downloads/", 3870 | "license": [ 3871 | "BSD-3-Clause" 3872 | ], 3873 | "authors": [ 3874 | { 3875 | "name": "Arne Blankerts", 3876 | "email": "arne@blankerts.de", 3877 | "role": "Developer" 3878 | } 3879 | ], 3880 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3881 | "support": { 3882 | "issues": "https://github.com/theseer/tokenizer/issues", 3883 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 3884 | }, 3885 | "funding": [ 3886 | { 3887 | "url": "https://github.com/theseer", 3888 | "type": "github" 3889 | } 3890 | ], 3891 | "time": "2021-07-28T10:34:58+00:00" 3892 | } 3893 | ], 3894 | "aliases": [], 3895 | "minimum-stability": "dev", 3896 | "stability-flags": [], 3897 | "prefer-stable": true, 3898 | "prefer-lowest": false, 3899 | "platform": { 3900 | "php": ">=8.0", 3901 | "ext-curl": "*" 3902 | }, 3903 | "platform-dev": [], 3904 | "plugin-api-version": "2.3.0" 3905 | } 3906 | -------------------------------------------------------------------------------- /phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | The QuickPay ruleset based on the PSR-2 coding standard. 5 | 6 | 7 | -------------------------------------------------------------------------------- /phpstan.neon: -------------------------------------------------------------------------------- 1 | includes: 2 | - vendor/thecodingmachine/phpstan-strict-rules/phpstan-strict-rules.neon 3 | 4 | parameters: 5 | level: max 6 | paths: 7 | - QuickPay 8 | 9 | checkMissingIterableValueType: false 10 | checkGenericClassInNonGenericObjectType: false 11 | reportUnmatchedIgnoredErrors: false 12 | 13 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./Tests/ 14 | 15 | 16 | 17 | 18 | ./QuickPay/ 19 | 20 | 21 | 22 | --------------------------------------------------------------------------------