├── .gitignore ├── .idea └── .gitignore ├── src ├── Exception │ ├── Error.php │ └── ResponseError.php ├── Header.php ├── Response.php └── Client.php ├── phpstan.neon ├── composer.json ├── LICENSE.txt ├── README.md └── composer.lock /.gitignore: -------------------------------------------------------------------------------- 1 | vendor 2 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | !codeStyles/* 4 | !fileTemplates/* 5 | !inspectionProfiles/* 6 | -------------------------------------------------------------------------------- /src/Exception/Error.php: -------------------------------------------------------------------------------- 1 | name; 16 | } 17 | 18 | public function getValue(): string 19 | { 20 | return $this->value; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "espocrm/php-espo-api-client", 3 | "description": "API client for EspoCRM.", 4 | "type": "library", 5 | "license": "MIT", 6 | "autoload": { 7 | "psr-4": { 8 | "Espo\\ApiClient\\": "src/" 9 | } 10 | }, 11 | "authors": [ 12 | { 13 | "name": "EspoCRM" 14 | } 15 | ], 16 | "require": { 17 | "php": ">=8.0.0", 18 | "ext-curl": "*" 19 | }, 20 | "require-dev": { 21 | "phpunit/phpunit": "^9.5", 22 | "phpstan/phpstan": "^1.9" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/Exception/ResponseError.php: -------------------------------------------------------------------------------- 1 | response; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/Response.php: -------------------------------------------------------------------------------- 1 | code; 18 | } 19 | 20 | public function getHeadersPart(): string 21 | { 22 | return $this->headersPart; 23 | } 24 | 25 | public function getBodyPart(): string 26 | { 27 | return $this->bodyPart; 28 | } 29 | 30 | public function getContentType(): ?string 31 | { 32 | return $this->contentType; 33 | } 34 | 35 | public function getParsedBody(): mixed 36 | { 37 | if ($this->getContentType() === 'application/json') { 38 | return json_decode($this->getBodyPart()); 39 | } 40 | 41 | return null; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP EspoCRM API client 2 | 3 | Require with Composer: 4 | 5 | ``` 6 | composer require espocrm/php-espo-api-client 7 | ``` 8 | 9 | ## Usage 10 | 11 | ```php 12 | use Espo\ApiClient\Client; 13 | use Espo\ApiClient\Header; 14 | use Espo\ApiClient\Exception\ResponseError; 15 | 16 | $client = new Client($yourEspoUrl); 17 | $client->setApiKey($apiKey); 18 | $client->setSecretKey($secretKey); // if you use HMAC method 19 | 20 | try { 21 | $response = $client->request( 22 | Client::METHOD_POST, 23 | 'Lead', 24 | [ 25 | 'firstName' => $firstName, 26 | 'lastName' => $lastName, 27 | 'emailAddress' => $emailAddress, 28 | ], 29 | [new Header('X-Skip-Duplicate-Check', 'true')] 30 | ); 31 | 32 | $parsedBody = $response->getParsedBody(); 33 | } catch (ResponseError $e) { 34 | // Error response. 35 | $response = $e->getResponse(); 36 | 37 | $code = $response->getCode(); 38 | $body = $response->getBodyPart(); 39 | 40 | // Consider using some additional library if you need parsed response headers. 41 | } 42 | ``` 43 | 44 | ## Changelog 45 | 46 | ### 1.0.0 47 | 48 | * Using new method for constructing *X-Hmac-Authorization* header https://github.com/espocrm/php-espo-api-client/issues/2 49 | -------------------------------------------------------------------------------- /src/Client.php: -------------------------------------------------------------------------------- 1 | username = $username; 44 | $this->password = $password; 45 | 46 | return $this; 47 | } 48 | 49 | /** 50 | * Set an API key. 51 | */ 52 | public function setApiKey(?string $apiKey): self 53 | { 54 | $this->apiKey = $apiKey; 55 | 56 | return $this; 57 | } 58 | 59 | /** 60 | * Set a secret key (for HMAC authentication). 61 | */ 62 | public function setSecretKey(?string $secretKey): self 63 | { 64 | $this->secretKey = $secretKey; 65 | 66 | return $this; 67 | } 68 | 69 | /** 70 | * Send request to EspoCRM. 71 | * 72 | * @param self::METHOD_* $method A method. 'GET', 'POST', 'PUT', 'DELETE'. 73 | * @param string $path A relative URL path. E.g. `Account/00000000000id`. 74 | * @param array|array|stdClass|null $data Payload data. 75 | * @param Header[] $headers Headers. 76 | * @return Response A response (on success). 77 | * @throws Error 78 | * @throws ResponseError On error occurred on request. 79 | */ 80 | public function request( 81 | string $method, 82 | string $path, 83 | mixed $data = null, 84 | array $headers = [] 85 | ): Response { 86 | 87 | $method = strtoupper($method); 88 | $this->lastCh = null; 89 | $url = $this->composeFullUrl($path); 90 | $curlHeaderList = []; 91 | 92 | $ch = curl_init($url); 93 | 94 | if (!$ch) { 95 | throw new RuntimeException("Could not init CURL."); 96 | } 97 | 98 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 99 | 100 | if ( 101 | $this->apiKey && 102 | $this->secretKey 103 | ) { 104 | $string = $method . ' /' . $path; 105 | $authPart = base64_encode($this->apiKey . ':' . hash_hmac('sha256', $string, $this->secretKey)); 106 | $authHeader = 'X-Hmac-Authorization: ' . $authPart; 107 | 108 | $curlHeaderList[] = $authHeader; 109 | } 110 | else if ($this->apiKey) { 111 | $authHeader = 'X-Api-Key: ' . $this->apiKey; 112 | 113 | $curlHeaderList[] = $authHeader; 114 | } 115 | else if ( 116 | $this->username && 117 | $this->password 118 | ) { 119 | curl_setopt($ch, CURLOPT_USERPWD, $this->username . ':' . $this->password); 120 | curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 121 | } 122 | 123 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 124 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 125 | curl_setopt($ch, CURLOPT_HEADER, true); 126 | 127 | if ($this->port !== null) { 128 | curl_setopt($ch, CURLOPT_PORT, $this->port); 129 | } 130 | 131 | if ($method !== self::METHOD_GET) { 132 | curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); 133 | } 134 | 135 | if ( 136 | ( 137 | $data !== null && 138 | !is_array($data) && 139 | !is_object($data) && 140 | !is_string($data) 141 | ) || 142 | ( 143 | $method === self::METHOD_GET && 144 | is_string($data) 145 | ) 146 | ) { 147 | throw new InvalidArgumentException("\$data should be array|stdClass|null."); 148 | } 149 | 150 | if (isset($data)) { 151 | if ($method === self::METHOD_GET) { 152 | curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($data)); 153 | } 154 | else { 155 | $contentType = $this->obtainHeaderValue($headers, 'Content-Type'); 156 | 157 | if ( 158 | !$contentType || 159 | $contentType === 'application/json' 160 | ) { 161 | try { 162 | $payload = json_encode($data, JSON_THROW_ON_ERROR); 163 | } 164 | catch (JsonException) { 165 | throw new InvalidArgumentException("Invalid JSON."); 166 | } 167 | 168 | if (!$contentType) { 169 | $curlHeaderList[] = 'Content-Type: application/json'; 170 | } 171 | } 172 | else if ($contentType === 'application/x-www-form-urlencoded') { 173 | $payload = $data; 174 | } 175 | else { 176 | $payload = $data; 177 | } 178 | 179 | curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); 180 | 181 | if (is_string($payload)) { 182 | $curlHeaderList[] = 'Content-Length: ' . strlen($payload); 183 | } 184 | } 185 | } 186 | 187 | foreach ($headers as $header) { 188 | $curlHeaderList[] = $header->getName() . ':' . $header->getValue(); 189 | } 190 | 191 | if ($curlHeaderList !== []) { 192 | curl_setopt($ch, CURLOPT_HTTPHEADER, $curlHeaderList); 193 | } 194 | 195 | /** @var string|false $lastResponse */ 196 | $lastResponse = curl_exec($ch); 197 | 198 | if ($lastResponse === false) { 199 | throw new Error('CURL exec failure.', 0); 200 | } 201 | 202 | $this->lastCh = $ch; 203 | 204 | $parsedResponse = $this->parseResponse($lastResponse); 205 | $responseCode = $this->getResponseHttpCode(); 206 | $responseContentType = $this->getResponseContentType(); 207 | 208 | $response = new Response( 209 | $responseCode ?? 0, 210 | $responseContentType, 211 | $parsedResponse['header'], 212 | $parsedResponse['body'], 213 | ); 214 | 215 | curl_close($ch); 216 | 217 | if ( 218 | $responseCode !== null && 219 | $responseCode >= 200 && 220 | $responseCode < 300 221 | ) { 222 | return $response; 223 | } 224 | 225 | $responseHeaders = $this->parseHeader($parsedResponse['header']); 226 | $errorMessage = $responseHeaders['x-status-reason'] ?? ''; 227 | 228 | throw new ResponseError($response, $errorMessage, $responseCode ?? 0); 229 | } 230 | 231 | /** 232 | * Get a response content type. 233 | */ 234 | private function getResponseContentType(): ?string 235 | { 236 | return $this->getInfo(CURLINFO_CONTENT_TYPE); 237 | } 238 | 239 | /** 240 | * Get a response code. 241 | */ 242 | private function getResponseHttpCode(): ?int 243 | { 244 | return $this->getInfo(CURLINFO_HTTP_CODE); 245 | } 246 | 247 | /** 248 | * @param Header[] $headers 249 | */ 250 | private function obtainHeaderValue(array $headers, string $name): ?string 251 | { 252 | foreach ($headers as $header) { 253 | if (strtolower($header->getName()) === strtolower($name)) { 254 | return $header->getValue(); 255 | } 256 | } 257 | 258 | return null; 259 | } 260 | 261 | private function composeFullUrl(string $action): string 262 | { 263 | return $this->url . $this->urlPath . $action; 264 | } 265 | 266 | private function getInfo(int $option): mixed 267 | { 268 | if (isset($this->lastCh)) { 269 | return curl_getinfo($this->lastCh, $option); 270 | } 271 | 272 | return null; 273 | } 274 | 275 | /** 276 | * @return array{header: string, body: string} 277 | */ 278 | private function parseResponse(string $response): array 279 | { 280 | $headerSize = $this->getInfo(CURLINFO_HEADER_SIZE); 281 | 282 | return [ 283 | 'header' => trim(substr($response, 0, $headerSize)), 284 | 'body' => substr($response, $headerSize), 285 | ]; 286 | } 287 | 288 | /** 289 | * @return string[] 290 | */ 291 | private function parseHeader(string $header): array 292 | { 293 | preg_match_all('/(.*?): (.*)\r\n/', $header, $matches); 294 | 295 | $headerArray = []; 296 | 297 | foreach ($matches[1] as $index => $name) { 298 | if (isset($matches[2][$index])) { 299 | $headerArray[strtolower($name)] = trim($matches[2][$index]); 300 | } 301 | } 302 | 303 | return $headerArray; 304 | } 305 | } -------------------------------------------------------------------------------- /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": "55f13615bbba21974f39597f81c34f33", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "doctrine/instantiator", 12 | "version": "1.4.1", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/instantiator.git", 16 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", 21 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^7.1 || ^8.0" 26 | }, 27 | "require-dev": { 28 | "doctrine/coding-standard": "^9", 29 | "ext-pdo": "*", 30 | "ext-phar": "*", 31 | "phpbench/phpbench": "^0.16 || ^1", 32 | "phpstan/phpstan": "^1.4", 33 | "phpstan/phpstan-phpunit": "^1", 34 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 35 | "vimeo/psalm": "^4.22" 36 | }, 37 | "type": "library", 38 | "autoload": { 39 | "psr-4": { 40 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 41 | } 42 | }, 43 | "notification-url": "https://packagist.org/downloads/", 44 | "license": [ 45 | "MIT" 46 | ], 47 | "authors": [ 48 | { 49 | "name": "Marco Pivetta", 50 | "email": "ocramius@gmail.com", 51 | "homepage": "https://ocramius.github.io/" 52 | } 53 | ], 54 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 55 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 56 | "keywords": [ 57 | "constructor", 58 | "instantiate" 59 | ], 60 | "support": { 61 | "issues": "https://github.com/doctrine/instantiator/issues", 62 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1" 63 | }, 64 | "funding": [ 65 | { 66 | "url": "https://www.doctrine-project.org/sponsorship.html", 67 | "type": "custom" 68 | }, 69 | { 70 | "url": "https://www.patreon.com/phpdoctrine", 71 | "type": "patreon" 72 | }, 73 | { 74 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 75 | "type": "tidelift" 76 | } 77 | ], 78 | "time": "2022-03-03T08:28:38+00:00" 79 | }, 80 | { 81 | "name": "myclabs/deep-copy", 82 | "version": "1.11.0", 83 | "source": { 84 | "type": "git", 85 | "url": "https://github.com/myclabs/DeepCopy.git", 86 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" 87 | }, 88 | "dist": { 89 | "type": "zip", 90 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", 91 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", 92 | "shasum": "" 93 | }, 94 | "require": { 95 | "php": "^7.1 || ^8.0" 96 | }, 97 | "conflict": { 98 | "doctrine/collections": "<1.6.8", 99 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 100 | }, 101 | "require-dev": { 102 | "doctrine/collections": "^1.6.8", 103 | "doctrine/common": "^2.13.3 || ^3.2.2", 104 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 105 | }, 106 | "type": "library", 107 | "autoload": { 108 | "files": [ 109 | "src/DeepCopy/deep_copy.php" 110 | ], 111 | "psr-4": { 112 | "DeepCopy\\": "src/DeepCopy/" 113 | } 114 | }, 115 | "notification-url": "https://packagist.org/downloads/", 116 | "license": [ 117 | "MIT" 118 | ], 119 | "description": "Create deep copies (clones) of your objects", 120 | "keywords": [ 121 | "clone", 122 | "copy", 123 | "duplicate", 124 | "object", 125 | "object graph" 126 | ], 127 | "support": { 128 | "issues": "https://github.com/myclabs/DeepCopy/issues", 129 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" 130 | }, 131 | "funding": [ 132 | { 133 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 134 | "type": "tidelift" 135 | } 136 | ], 137 | "time": "2022-03-03T13:19:32+00:00" 138 | }, 139 | { 140 | "name": "nikic/php-parser", 141 | "version": "v4.15.2", 142 | "source": { 143 | "type": "git", 144 | "url": "https://github.com/nikic/PHP-Parser.git", 145 | "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" 146 | }, 147 | "dist": { 148 | "type": "zip", 149 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", 150 | "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", 151 | "shasum": "" 152 | }, 153 | "require": { 154 | "ext-tokenizer": "*", 155 | "php": ">=7.0" 156 | }, 157 | "require-dev": { 158 | "ircmaxell/php-yacc": "^0.0.7", 159 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 160 | }, 161 | "bin": [ 162 | "bin/php-parse" 163 | ], 164 | "type": "library", 165 | "extra": { 166 | "branch-alias": { 167 | "dev-master": "4.9-dev" 168 | } 169 | }, 170 | "autoload": { 171 | "psr-4": { 172 | "PhpParser\\": "lib/PhpParser" 173 | } 174 | }, 175 | "notification-url": "https://packagist.org/downloads/", 176 | "license": [ 177 | "BSD-3-Clause" 178 | ], 179 | "authors": [ 180 | { 181 | "name": "Nikita Popov" 182 | } 183 | ], 184 | "description": "A PHP parser written in PHP", 185 | "keywords": [ 186 | "parser", 187 | "php" 188 | ], 189 | "support": { 190 | "issues": "https://github.com/nikic/PHP-Parser/issues", 191 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" 192 | }, 193 | "time": "2022-11-12T15:38:23+00:00" 194 | }, 195 | { 196 | "name": "phar-io/manifest", 197 | "version": "2.0.3", 198 | "source": { 199 | "type": "git", 200 | "url": "https://github.com/phar-io/manifest.git", 201 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 202 | }, 203 | "dist": { 204 | "type": "zip", 205 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 206 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 207 | "shasum": "" 208 | }, 209 | "require": { 210 | "ext-dom": "*", 211 | "ext-phar": "*", 212 | "ext-xmlwriter": "*", 213 | "phar-io/version": "^3.0.1", 214 | "php": "^7.2 || ^8.0" 215 | }, 216 | "type": "library", 217 | "extra": { 218 | "branch-alias": { 219 | "dev-master": "2.0.x-dev" 220 | } 221 | }, 222 | "autoload": { 223 | "classmap": [ 224 | "src/" 225 | ] 226 | }, 227 | "notification-url": "https://packagist.org/downloads/", 228 | "license": [ 229 | "BSD-3-Clause" 230 | ], 231 | "authors": [ 232 | { 233 | "name": "Arne Blankerts", 234 | "email": "arne@blankerts.de", 235 | "role": "Developer" 236 | }, 237 | { 238 | "name": "Sebastian Heuer", 239 | "email": "sebastian@phpeople.de", 240 | "role": "Developer" 241 | }, 242 | { 243 | "name": "Sebastian Bergmann", 244 | "email": "sebastian@phpunit.de", 245 | "role": "Developer" 246 | } 247 | ], 248 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 249 | "support": { 250 | "issues": "https://github.com/phar-io/manifest/issues", 251 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 252 | }, 253 | "time": "2021-07-20T11:28:43+00:00" 254 | }, 255 | { 256 | "name": "phar-io/version", 257 | "version": "3.2.1", 258 | "source": { 259 | "type": "git", 260 | "url": "https://github.com/phar-io/version.git", 261 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 262 | }, 263 | "dist": { 264 | "type": "zip", 265 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 266 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 267 | "shasum": "" 268 | }, 269 | "require": { 270 | "php": "^7.2 || ^8.0" 271 | }, 272 | "type": "library", 273 | "autoload": { 274 | "classmap": [ 275 | "src/" 276 | ] 277 | }, 278 | "notification-url": "https://packagist.org/downloads/", 279 | "license": [ 280 | "BSD-3-Clause" 281 | ], 282 | "authors": [ 283 | { 284 | "name": "Arne Blankerts", 285 | "email": "arne@blankerts.de", 286 | "role": "Developer" 287 | }, 288 | { 289 | "name": "Sebastian Heuer", 290 | "email": "sebastian@phpeople.de", 291 | "role": "Developer" 292 | }, 293 | { 294 | "name": "Sebastian Bergmann", 295 | "email": "sebastian@phpunit.de", 296 | "role": "Developer" 297 | } 298 | ], 299 | "description": "Library for handling version information and constraints", 300 | "support": { 301 | "issues": "https://github.com/phar-io/version/issues", 302 | "source": "https://github.com/phar-io/version/tree/3.2.1" 303 | }, 304 | "time": "2022-02-21T01:04:05+00:00" 305 | }, 306 | { 307 | "name": "phpstan/phpstan", 308 | "version": "1.9.4", 309 | "source": { 310 | "type": "git", 311 | "url": "https://github.com/phpstan/phpstan.git", 312 | "reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2" 313 | }, 314 | "dist": { 315 | "type": "zip", 316 | "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d03bccee595e2146b7c9d174486b84f4dc61b0f2", 317 | "reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2", 318 | "shasum": "" 319 | }, 320 | "require": { 321 | "php": "^7.2|^8.0" 322 | }, 323 | "conflict": { 324 | "phpstan/phpstan-shim": "*" 325 | }, 326 | "bin": [ 327 | "phpstan", 328 | "phpstan.phar" 329 | ], 330 | "type": "library", 331 | "autoload": { 332 | "files": [ 333 | "bootstrap.php" 334 | ] 335 | }, 336 | "notification-url": "https://packagist.org/downloads/", 337 | "license": [ 338 | "MIT" 339 | ], 340 | "description": "PHPStan - PHP Static Analysis Tool", 341 | "keywords": [ 342 | "dev", 343 | "static analysis" 344 | ], 345 | "support": { 346 | "issues": "https://github.com/phpstan/phpstan/issues", 347 | "source": "https://github.com/phpstan/phpstan/tree/1.9.4" 348 | }, 349 | "funding": [ 350 | { 351 | "url": "https://github.com/ondrejmirtes", 352 | "type": "github" 353 | }, 354 | { 355 | "url": "https://github.com/phpstan", 356 | "type": "github" 357 | }, 358 | { 359 | "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", 360 | "type": "tidelift" 361 | } 362 | ], 363 | "time": "2022-12-17T13:33:52+00:00" 364 | }, 365 | { 366 | "name": "phpunit/php-code-coverage", 367 | "version": "9.2.22", 368 | "source": { 369 | "type": "git", 370 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 371 | "reference": "e4bf60d2220b4baaa0572986b5d69870226b06df" 372 | }, 373 | "dist": { 374 | "type": "zip", 375 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e4bf60d2220b4baaa0572986b5d69870226b06df", 376 | "reference": "e4bf60d2220b4baaa0572986b5d69870226b06df", 377 | "shasum": "" 378 | }, 379 | "require": { 380 | "ext-dom": "*", 381 | "ext-libxml": "*", 382 | "ext-xmlwriter": "*", 383 | "nikic/php-parser": "^4.14", 384 | "php": ">=7.3", 385 | "phpunit/php-file-iterator": "^3.0.3", 386 | "phpunit/php-text-template": "^2.0.2", 387 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 388 | "sebastian/complexity": "^2.0", 389 | "sebastian/environment": "^5.1.2", 390 | "sebastian/lines-of-code": "^1.0.3", 391 | "sebastian/version": "^3.0.1", 392 | "theseer/tokenizer": "^1.2.0" 393 | }, 394 | "require-dev": { 395 | "phpunit/phpunit": "^9.3" 396 | }, 397 | "suggest": { 398 | "ext-pcov": "*", 399 | "ext-xdebug": "*" 400 | }, 401 | "type": "library", 402 | "extra": { 403 | "branch-alias": { 404 | "dev-master": "9.2-dev" 405 | } 406 | }, 407 | "autoload": { 408 | "classmap": [ 409 | "src/" 410 | ] 411 | }, 412 | "notification-url": "https://packagist.org/downloads/", 413 | "license": [ 414 | "BSD-3-Clause" 415 | ], 416 | "authors": [ 417 | { 418 | "name": "Sebastian Bergmann", 419 | "email": "sebastian@phpunit.de", 420 | "role": "lead" 421 | } 422 | ], 423 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 424 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 425 | "keywords": [ 426 | "coverage", 427 | "testing", 428 | "xunit" 429 | ], 430 | "support": { 431 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 432 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.22" 433 | }, 434 | "funding": [ 435 | { 436 | "url": "https://github.com/sebastianbergmann", 437 | "type": "github" 438 | } 439 | ], 440 | "time": "2022-12-18T16:40:55+00:00" 441 | }, 442 | { 443 | "name": "phpunit/php-file-iterator", 444 | "version": "3.0.6", 445 | "source": { 446 | "type": "git", 447 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 448 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 449 | }, 450 | "dist": { 451 | "type": "zip", 452 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 453 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 454 | "shasum": "" 455 | }, 456 | "require": { 457 | "php": ">=7.3" 458 | }, 459 | "require-dev": { 460 | "phpunit/phpunit": "^9.3" 461 | }, 462 | "type": "library", 463 | "extra": { 464 | "branch-alias": { 465 | "dev-master": "3.0-dev" 466 | } 467 | }, 468 | "autoload": { 469 | "classmap": [ 470 | "src/" 471 | ] 472 | }, 473 | "notification-url": "https://packagist.org/downloads/", 474 | "license": [ 475 | "BSD-3-Clause" 476 | ], 477 | "authors": [ 478 | { 479 | "name": "Sebastian Bergmann", 480 | "email": "sebastian@phpunit.de", 481 | "role": "lead" 482 | } 483 | ], 484 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 485 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 486 | "keywords": [ 487 | "filesystem", 488 | "iterator" 489 | ], 490 | "support": { 491 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 492 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 493 | }, 494 | "funding": [ 495 | { 496 | "url": "https://github.com/sebastianbergmann", 497 | "type": "github" 498 | } 499 | ], 500 | "time": "2021-12-02T12:48:52+00:00" 501 | }, 502 | { 503 | "name": "phpunit/php-invoker", 504 | "version": "3.1.1", 505 | "source": { 506 | "type": "git", 507 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 508 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 509 | }, 510 | "dist": { 511 | "type": "zip", 512 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 513 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 514 | "shasum": "" 515 | }, 516 | "require": { 517 | "php": ">=7.3" 518 | }, 519 | "require-dev": { 520 | "ext-pcntl": "*", 521 | "phpunit/phpunit": "^9.3" 522 | }, 523 | "suggest": { 524 | "ext-pcntl": "*" 525 | }, 526 | "type": "library", 527 | "extra": { 528 | "branch-alias": { 529 | "dev-master": "3.1-dev" 530 | } 531 | }, 532 | "autoload": { 533 | "classmap": [ 534 | "src/" 535 | ] 536 | }, 537 | "notification-url": "https://packagist.org/downloads/", 538 | "license": [ 539 | "BSD-3-Clause" 540 | ], 541 | "authors": [ 542 | { 543 | "name": "Sebastian Bergmann", 544 | "email": "sebastian@phpunit.de", 545 | "role": "lead" 546 | } 547 | ], 548 | "description": "Invoke callables with a timeout", 549 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 550 | "keywords": [ 551 | "process" 552 | ], 553 | "support": { 554 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 555 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 556 | }, 557 | "funding": [ 558 | { 559 | "url": "https://github.com/sebastianbergmann", 560 | "type": "github" 561 | } 562 | ], 563 | "time": "2020-09-28T05:58:55+00:00" 564 | }, 565 | { 566 | "name": "phpunit/php-text-template", 567 | "version": "2.0.4", 568 | "source": { 569 | "type": "git", 570 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 571 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 572 | }, 573 | "dist": { 574 | "type": "zip", 575 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 576 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 577 | "shasum": "" 578 | }, 579 | "require": { 580 | "php": ">=7.3" 581 | }, 582 | "require-dev": { 583 | "phpunit/phpunit": "^9.3" 584 | }, 585 | "type": "library", 586 | "extra": { 587 | "branch-alias": { 588 | "dev-master": "2.0-dev" 589 | } 590 | }, 591 | "autoload": { 592 | "classmap": [ 593 | "src/" 594 | ] 595 | }, 596 | "notification-url": "https://packagist.org/downloads/", 597 | "license": [ 598 | "BSD-3-Clause" 599 | ], 600 | "authors": [ 601 | { 602 | "name": "Sebastian Bergmann", 603 | "email": "sebastian@phpunit.de", 604 | "role": "lead" 605 | } 606 | ], 607 | "description": "Simple template engine.", 608 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 609 | "keywords": [ 610 | "template" 611 | ], 612 | "support": { 613 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 614 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 615 | }, 616 | "funding": [ 617 | { 618 | "url": "https://github.com/sebastianbergmann", 619 | "type": "github" 620 | } 621 | ], 622 | "time": "2020-10-26T05:33:50+00:00" 623 | }, 624 | { 625 | "name": "phpunit/php-timer", 626 | "version": "5.0.3", 627 | "source": { 628 | "type": "git", 629 | "url": "https://github.com/sebastianbergmann/php-timer.git", 630 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 631 | }, 632 | "dist": { 633 | "type": "zip", 634 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 635 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 636 | "shasum": "" 637 | }, 638 | "require": { 639 | "php": ">=7.3" 640 | }, 641 | "require-dev": { 642 | "phpunit/phpunit": "^9.3" 643 | }, 644 | "type": "library", 645 | "extra": { 646 | "branch-alias": { 647 | "dev-master": "5.0-dev" 648 | } 649 | }, 650 | "autoload": { 651 | "classmap": [ 652 | "src/" 653 | ] 654 | }, 655 | "notification-url": "https://packagist.org/downloads/", 656 | "license": [ 657 | "BSD-3-Clause" 658 | ], 659 | "authors": [ 660 | { 661 | "name": "Sebastian Bergmann", 662 | "email": "sebastian@phpunit.de", 663 | "role": "lead" 664 | } 665 | ], 666 | "description": "Utility class for timing", 667 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 668 | "keywords": [ 669 | "timer" 670 | ], 671 | "support": { 672 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 673 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 674 | }, 675 | "funding": [ 676 | { 677 | "url": "https://github.com/sebastianbergmann", 678 | "type": "github" 679 | } 680 | ], 681 | "time": "2020-10-26T13:16:10+00:00" 682 | }, 683 | { 684 | "name": "phpunit/phpunit", 685 | "version": "9.5.27", 686 | "source": { 687 | "type": "git", 688 | "url": "https://github.com/sebastianbergmann/phpunit.git", 689 | "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" 690 | }, 691 | "dist": { 692 | "type": "zip", 693 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", 694 | "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", 695 | "shasum": "" 696 | }, 697 | "require": { 698 | "doctrine/instantiator": "^1.3.1", 699 | "ext-dom": "*", 700 | "ext-json": "*", 701 | "ext-libxml": "*", 702 | "ext-mbstring": "*", 703 | "ext-xml": "*", 704 | "ext-xmlwriter": "*", 705 | "myclabs/deep-copy": "^1.10.1", 706 | "phar-io/manifest": "^2.0.3", 707 | "phar-io/version": "^3.0.2", 708 | "php": ">=7.3", 709 | "phpunit/php-code-coverage": "^9.2.13", 710 | "phpunit/php-file-iterator": "^3.0.5", 711 | "phpunit/php-invoker": "^3.1.1", 712 | "phpunit/php-text-template": "^2.0.3", 713 | "phpunit/php-timer": "^5.0.2", 714 | "sebastian/cli-parser": "^1.0.1", 715 | "sebastian/code-unit": "^1.0.6", 716 | "sebastian/comparator": "^4.0.8", 717 | "sebastian/diff": "^4.0.3", 718 | "sebastian/environment": "^5.1.3", 719 | "sebastian/exporter": "^4.0.5", 720 | "sebastian/global-state": "^5.0.1", 721 | "sebastian/object-enumerator": "^4.0.3", 722 | "sebastian/resource-operations": "^3.0.3", 723 | "sebastian/type": "^3.2", 724 | "sebastian/version": "^3.0.2" 725 | }, 726 | "suggest": { 727 | "ext-soap": "*", 728 | "ext-xdebug": "*" 729 | }, 730 | "bin": [ 731 | "phpunit" 732 | ], 733 | "type": "library", 734 | "extra": { 735 | "branch-alias": { 736 | "dev-master": "9.5-dev" 737 | } 738 | }, 739 | "autoload": { 740 | "files": [ 741 | "src/Framework/Assert/Functions.php" 742 | ], 743 | "classmap": [ 744 | "src/" 745 | ] 746 | }, 747 | "notification-url": "https://packagist.org/downloads/", 748 | "license": [ 749 | "BSD-3-Clause" 750 | ], 751 | "authors": [ 752 | { 753 | "name": "Sebastian Bergmann", 754 | "email": "sebastian@phpunit.de", 755 | "role": "lead" 756 | } 757 | ], 758 | "description": "The PHP Unit Testing framework.", 759 | "homepage": "https://phpunit.de/", 760 | "keywords": [ 761 | "phpunit", 762 | "testing", 763 | "xunit" 764 | ], 765 | "support": { 766 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 767 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" 768 | }, 769 | "funding": [ 770 | { 771 | "url": "https://phpunit.de/sponsors.html", 772 | "type": "custom" 773 | }, 774 | { 775 | "url": "https://github.com/sebastianbergmann", 776 | "type": "github" 777 | }, 778 | { 779 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 780 | "type": "tidelift" 781 | } 782 | ], 783 | "time": "2022-12-09T07:31:23+00:00" 784 | }, 785 | { 786 | "name": "sebastian/cli-parser", 787 | "version": "1.0.1", 788 | "source": { 789 | "type": "git", 790 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 791 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 792 | }, 793 | "dist": { 794 | "type": "zip", 795 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 796 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 797 | "shasum": "" 798 | }, 799 | "require": { 800 | "php": ">=7.3" 801 | }, 802 | "require-dev": { 803 | "phpunit/phpunit": "^9.3" 804 | }, 805 | "type": "library", 806 | "extra": { 807 | "branch-alias": { 808 | "dev-master": "1.0-dev" 809 | } 810 | }, 811 | "autoload": { 812 | "classmap": [ 813 | "src/" 814 | ] 815 | }, 816 | "notification-url": "https://packagist.org/downloads/", 817 | "license": [ 818 | "BSD-3-Clause" 819 | ], 820 | "authors": [ 821 | { 822 | "name": "Sebastian Bergmann", 823 | "email": "sebastian@phpunit.de", 824 | "role": "lead" 825 | } 826 | ], 827 | "description": "Library for parsing CLI options", 828 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 829 | "support": { 830 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 831 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 832 | }, 833 | "funding": [ 834 | { 835 | "url": "https://github.com/sebastianbergmann", 836 | "type": "github" 837 | } 838 | ], 839 | "time": "2020-09-28T06:08:49+00:00" 840 | }, 841 | { 842 | "name": "sebastian/code-unit", 843 | "version": "1.0.8", 844 | "source": { 845 | "type": "git", 846 | "url": "https://github.com/sebastianbergmann/code-unit.git", 847 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 848 | }, 849 | "dist": { 850 | "type": "zip", 851 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 852 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 853 | "shasum": "" 854 | }, 855 | "require": { 856 | "php": ">=7.3" 857 | }, 858 | "require-dev": { 859 | "phpunit/phpunit": "^9.3" 860 | }, 861 | "type": "library", 862 | "extra": { 863 | "branch-alias": { 864 | "dev-master": "1.0-dev" 865 | } 866 | }, 867 | "autoload": { 868 | "classmap": [ 869 | "src/" 870 | ] 871 | }, 872 | "notification-url": "https://packagist.org/downloads/", 873 | "license": [ 874 | "BSD-3-Clause" 875 | ], 876 | "authors": [ 877 | { 878 | "name": "Sebastian Bergmann", 879 | "email": "sebastian@phpunit.de", 880 | "role": "lead" 881 | } 882 | ], 883 | "description": "Collection of value objects that represent the PHP code units", 884 | "homepage": "https://github.com/sebastianbergmann/code-unit", 885 | "support": { 886 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 887 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 888 | }, 889 | "funding": [ 890 | { 891 | "url": "https://github.com/sebastianbergmann", 892 | "type": "github" 893 | } 894 | ], 895 | "time": "2020-10-26T13:08:54+00:00" 896 | }, 897 | { 898 | "name": "sebastian/code-unit-reverse-lookup", 899 | "version": "2.0.3", 900 | "source": { 901 | "type": "git", 902 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 903 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 904 | }, 905 | "dist": { 906 | "type": "zip", 907 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 908 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 909 | "shasum": "" 910 | }, 911 | "require": { 912 | "php": ">=7.3" 913 | }, 914 | "require-dev": { 915 | "phpunit/phpunit": "^9.3" 916 | }, 917 | "type": "library", 918 | "extra": { 919 | "branch-alias": { 920 | "dev-master": "2.0-dev" 921 | } 922 | }, 923 | "autoload": { 924 | "classmap": [ 925 | "src/" 926 | ] 927 | }, 928 | "notification-url": "https://packagist.org/downloads/", 929 | "license": [ 930 | "BSD-3-Clause" 931 | ], 932 | "authors": [ 933 | { 934 | "name": "Sebastian Bergmann", 935 | "email": "sebastian@phpunit.de" 936 | } 937 | ], 938 | "description": "Looks up which function or method a line of code belongs to", 939 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 940 | "support": { 941 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 942 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 943 | }, 944 | "funding": [ 945 | { 946 | "url": "https://github.com/sebastianbergmann", 947 | "type": "github" 948 | } 949 | ], 950 | "time": "2020-09-28T05:30:19+00:00" 951 | }, 952 | { 953 | "name": "sebastian/comparator", 954 | "version": "4.0.8", 955 | "source": { 956 | "type": "git", 957 | "url": "https://github.com/sebastianbergmann/comparator.git", 958 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a" 959 | }, 960 | "dist": { 961 | "type": "zip", 962 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", 963 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a", 964 | "shasum": "" 965 | }, 966 | "require": { 967 | "php": ">=7.3", 968 | "sebastian/diff": "^4.0", 969 | "sebastian/exporter": "^4.0" 970 | }, 971 | "require-dev": { 972 | "phpunit/phpunit": "^9.3" 973 | }, 974 | "type": "library", 975 | "extra": { 976 | "branch-alias": { 977 | "dev-master": "4.0-dev" 978 | } 979 | }, 980 | "autoload": { 981 | "classmap": [ 982 | "src/" 983 | ] 984 | }, 985 | "notification-url": "https://packagist.org/downloads/", 986 | "license": [ 987 | "BSD-3-Clause" 988 | ], 989 | "authors": [ 990 | { 991 | "name": "Sebastian Bergmann", 992 | "email": "sebastian@phpunit.de" 993 | }, 994 | { 995 | "name": "Jeff Welch", 996 | "email": "whatthejeff@gmail.com" 997 | }, 998 | { 999 | "name": "Volker Dusch", 1000 | "email": "github@wallbash.com" 1001 | }, 1002 | { 1003 | "name": "Bernhard Schussek", 1004 | "email": "bschussek@2bepublished.at" 1005 | } 1006 | ], 1007 | "description": "Provides the functionality to compare PHP values for equality", 1008 | "homepage": "https://github.com/sebastianbergmann/comparator", 1009 | "keywords": [ 1010 | "comparator", 1011 | "compare", 1012 | "equality" 1013 | ], 1014 | "support": { 1015 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1016 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" 1017 | }, 1018 | "funding": [ 1019 | { 1020 | "url": "https://github.com/sebastianbergmann", 1021 | "type": "github" 1022 | } 1023 | ], 1024 | "time": "2022-09-14T12:41:17+00:00" 1025 | }, 1026 | { 1027 | "name": "sebastian/complexity", 1028 | "version": "2.0.2", 1029 | "source": { 1030 | "type": "git", 1031 | "url": "https://github.com/sebastianbergmann/complexity.git", 1032 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1033 | }, 1034 | "dist": { 1035 | "type": "zip", 1036 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1037 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1038 | "shasum": "" 1039 | }, 1040 | "require": { 1041 | "nikic/php-parser": "^4.7", 1042 | "php": ">=7.3" 1043 | }, 1044 | "require-dev": { 1045 | "phpunit/phpunit": "^9.3" 1046 | }, 1047 | "type": "library", 1048 | "extra": { 1049 | "branch-alias": { 1050 | "dev-master": "2.0-dev" 1051 | } 1052 | }, 1053 | "autoload": { 1054 | "classmap": [ 1055 | "src/" 1056 | ] 1057 | }, 1058 | "notification-url": "https://packagist.org/downloads/", 1059 | "license": [ 1060 | "BSD-3-Clause" 1061 | ], 1062 | "authors": [ 1063 | { 1064 | "name": "Sebastian Bergmann", 1065 | "email": "sebastian@phpunit.de", 1066 | "role": "lead" 1067 | } 1068 | ], 1069 | "description": "Library for calculating the complexity of PHP code units", 1070 | "homepage": "https://github.com/sebastianbergmann/complexity", 1071 | "support": { 1072 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1073 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1074 | }, 1075 | "funding": [ 1076 | { 1077 | "url": "https://github.com/sebastianbergmann", 1078 | "type": "github" 1079 | } 1080 | ], 1081 | "time": "2020-10-26T15:52:27+00:00" 1082 | }, 1083 | { 1084 | "name": "sebastian/diff", 1085 | "version": "4.0.4", 1086 | "source": { 1087 | "type": "git", 1088 | "url": "https://github.com/sebastianbergmann/diff.git", 1089 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1090 | }, 1091 | "dist": { 1092 | "type": "zip", 1093 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1094 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1095 | "shasum": "" 1096 | }, 1097 | "require": { 1098 | "php": ">=7.3" 1099 | }, 1100 | "require-dev": { 1101 | "phpunit/phpunit": "^9.3", 1102 | "symfony/process": "^4.2 || ^5" 1103 | }, 1104 | "type": "library", 1105 | "extra": { 1106 | "branch-alias": { 1107 | "dev-master": "4.0-dev" 1108 | } 1109 | }, 1110 | "autoload": { 1111 | "classmap": [ 1112 | "src/" 1113 | ] 1114 | }, 1115 | "notification-url": "https://packagist.org/downloads/", 1116 | "license": [ 1117 | "BSD-3-Clause" 1118 | ], 1119 | "authors": [ 1120 | { 1121 | "name": "Sebastian Bergmann", 1122 | "email": "sebastian@phpunit.de" 1123 | }, 1124 | { 1125 | "name": "Kore Nordmann", 1126 | "email": "mail@kore-nordmann.de" 1127 | } 1128 | ], 1129 | "description": "Diff implementation", 1130 | "homepage": "https://github.com/sebastianbergmann/diff", 1131 | "keywords": [ 1132 | "diff", 1133 | "udiff", 1134 | "unidiff", 1135 | "unified diff" 1136 | ], 1137 | "support": { 1138 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1139 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 1140 | }, 1141 | "funding": [ 1142 | { 1143 | "url": "https://github.com/sebastianbergmann", 1144 | "type": "github" 1145 | } 1146 | ], 1147 | "time": "2020-10-26T13:10:38+00:00" 1148 | }, 1149 | { 1150 | "name": "sebastian/environment", 1151 | "version": "5.1.4", 1152 | "source": { 1153 | "type": "git", 1154 | "url": "https://github.com/sebastianbergmann/environment.git", 1155 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" 1156 | }, 1157 | "dist": { 1158 | "type": "zip", 1159 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", 1160 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", 1161 | "shasum": "" 1162 | }, 1163 | "require": { 1164 | "php": ">=7.3" 1165 | }, 1166 | "require-dev": { 1167 | "phpunit/phpunit": "^9.3" 1168 | }, 1169 | "suggest": { 1170 | "ext-posix": "*" 1171 | }, 1172 | "type": "library", 1173 | "extra": { 1174 | "branch-alias": { 1175 | "dev-master": "5.1-dev" 1176 | } 1177 | }, 1178 | "autoload": { 1179 | "classmap": [ 1180 | "src/" 1181 | ] 1182 | }, 1183 | "notification-url": "https://packagist.org/downloads/", 1184 | "license": [ 1185 | "BSD-3-Clause" 1186 | ], 1187 | "authors": [ 1188 | { 1189 | "name": "Sebastian Bergmann", 1190 | "email": "sebastian@phpunit.de" 1191 | } 1192 | ], 1193 | "description": "Provides functionality to handle HHVM/PHP environments", 1194 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1195 | "keywords": [ 1196 | "Xdebug", 1197 | "environment", 1198 | "hhvm" 1199 | ], 1200 | "support": { 1201 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1202 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" 1203 | }, 1204 | "funding": [ 1205 | { 1206 | "url": "https://github.com/sebastianbergmann", 1207 | "type": "github" 1208 | } 1209 | ], 1210 | "time": "2022-04-03T09:37:03+00:00" 1211 | }, 1212 | { 1213 | "name": "sebastian/exporter", 1214 | "version": "4.0.5", 1215 | "source": { 1216 | "type": "git", 1217 | "url": "https://github.com/sebastianbergmann/exporter.git", 1218 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" 1219 | }, 1220 | "dist": { 1221 | "type": "zip", 1222 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 1223 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 1224 | "shasum": "" 1225 | }, 1226 | "require": { 1227 | "php": ">=7.3", 1228 | "sebastian/recursion-context": "^4.0" 1229 | }, 1230 | "require-dev": { 1231 | "ext-mbstring": "*", 1232 | "phpunit/phpunit": "^9.3" 1233 | }, 1234 | "type": "library", 1235 | "extra": { 1236 | "branch-alias": { 1237 | "dev-master": "4.0-dev" 1238 | } 1239 | }, 1240 | "autoload": { 1241 | "classmap": [ 1242 | "src/" 1243 | ] 1244 | }, 1245 | "notification-url": "https://packagist.org/downloads/", 1246 | "license": [ 1247 | "BSD-3-Clause" 1248 | ], 1249 | "authors": [ 1250 | { 1251 | "name": "Sebastian Bergmann", 1252 | "email": "sebastian@phpunit.de" 1253 | }, 1254 | { 1255 | "name": "Jeff Welch", 1256 | "email": "whatthejeff@gmail.com" 1257 | }, 1258 | { 1259 | "name": "Volker Dusch", 1260 | "email": "github@wallbash.com" 1261 | }, 1262 | { 1263 | "name": "Adam Harvey", 1264 | "email": "aharvey@php.net" 1265 | }, 1266 | { 1267 | "name": "Bernhard Schussek", 1268 | "email": "bschussek@gmail.com" 1269 | } 1270 | ], 1271 | "description": "Provides the functionality to export PHP variables for visualization", 1272 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1273 | "keywords": [ 1274 | "export", 1275 | "exporter" 1276 | ], 1277 | "support": { 1278 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1279 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" 1280 | }, 1281 | "funding": [ 1282 | { 1283 | "url": "https://github.com/sebastianbergmann", 1284 | "type": "github" 1285 | } 1286 | ], 1287 | "time": "2022-09-14T06:03:37+00:00" 1288 | }, 1289 | { 1290 | "name": "sebastian/global-state", 1291 | "version": "5.0.5", 1292 | "source": { 1293 | "type": "git", 1294 | "url": "https://github.com/sebastianbergmann/global-state.git", 1295 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 1296 | }, 1297 | "dist": { 1298 | "type": "zip", 1299 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1300 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1301 | "shasum": "" 1302 | }, 1303 | "require": { 1304 | "php": ">=7.3", 1305 | "sebastian/object-reflector": "^2.0", 1306 | "sebastian/recursion-context": "^4.0" 1307 | }, 1308 | "require-dev": { 1309 | "ext-dom": "*", 1310 | "phpunit/phpunit": "^9.3" 1311 | }, 1312 | "suggest": { 1313 | "ext-uopz": "*" 1314 | }, 1315 | "type": "library", 1316 | "extra": { 1317 | "branch-alias": { 1318 | "dev-master": "5.0-dev" 1319 | } 1320 | }, 1321 | "autoload": { 1322 | "classmap": [ 1323 | "src/" 1324 | ] 1325 | }, 1326 | "notification-url": "https://packagist.org/downloads/", 1327 | "license": [ 1328 | "BSD-3-Clause" 1329 | ], 1330 | "authors": [ 1331 | { 1332 | "name": "Sebastian Bergmann", 1333 | "email": "sebastian@phpunit.de" 1334 | } 1335 | ], 1336 | "description": "Snapshotting of global state", 1337 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1338 | "keywords": [ 1339 | "global state" 1340 | ], 1341 | "support": { 1342 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1343 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 1344 | }, 1345 | "funding": [ 1346 | { 1347 | "url": "https://github.com/sebastianbergmann", 1348 | "type": "github" 1349 | } 1350 | ], 1351 | "time": "2022-02-14T08:28:10+00:00" 1352 | }, 1353 | { 1354 | "name": "sebastian/lines-of-code", 1355 | "version": "1.0.3", 1356 | "source": { 1357 | "type": "git", 1358 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1359 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 1360 | }, 1361 | "dist": { 1362 | "type": "zip", 1363 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1364 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 1365 | "shasum": "" 1366 | }, 1367 | "require": { 1368 | "nikic/php-parser": "^4.6", 1369 | "php": ">=7.3" 1370 | }, 1371 | "require-dev": { 1372 | "phpunit/phpunit": "^9.3" 1373 | }, 1374 | "type": "library", 1375 | "extra": { 1376 | "branch-alias": { 1377 | "dev-master": "1.0-dev" 1378 | } 1379 | }, 1380 | "autoload": { 1381 | "classmap": [ 1382 | "src/" 1383 | ] 1384 | }, 1385 | "notification-url": "https://packagist.org/downloads/", 1386 | "license": [ 1387 | "BSD-3-Clause" 1388 | ], 1389 | "authors": [ 1390 | { 1391 | "name": "Sebastian Bergmann", 1392 | "email": "sebastian@phpunit.de", 1393 | "role": "lead" 1394 | } 1395 | ], 1396 | "description": "Library for counting the lines of code in PHP source code", 1397 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1398 | "support": { 1399 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 1400 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 1401 | }, 1402 | "funding": [ 1403 | { 1404 | "url": "https://github.com/sebastianbergmann", 1405 | "type": "github" 1406 | } 1407 | ], 1408 | "time": "2020-11-28T06:42:11+00:00" 1409 | }, 1410 | { 1411 | "name": "sebastian/object-enumerator", 1412 | "version": "4.0.4", 1413 | "source": { 1414 | "type": "git", 1415 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1416 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 1417 | }, 1418 | "dist": { 1419 | "type": "zip", 1420 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 1421 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 1422 | "shasum": "" 1423 | }, 1424 | "require": { 1425 | "php": ">=7.3", 1426 | "sebastian/object-reflector": "^2.0", 1427 | "sebastian/recursion-context": "^4.0" 1428 | }, 1429 | "require-dev": { 1430 | "phpunit/phpunit": "^9.3" 1431 | }, 1432 | "type": "library", 1433 | "extra": { 1434 | "branch-alias": { 1435 | "dev-master": "4.0-dev" 1436 | } 1437 | }, 1438 | "autoload": { 1439 | "classmap": [ 1440 | "src/" 1441 | ] 1442 | }, 1443 | "notification-url": "https://packagist.org/downloads/", 1444 | "license": [ 1445 | "BSD-3-Clause" 1446 | ], 1447 | "authors": [ 1448 | { 1449 | "name": "Sebastian Bergmann", 1450 | "email": "sebastian@phpunit.de" 1451 | } 1452 | ], 1453 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1454 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1455 | "support": { 1456 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 1457 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 1458 | }, 1459 | "funding": [ 1460 | { 1461 | "url": "https://github.com/sebastianbergmann", 1462 | "type": "github" 1463 | } 1464 | ], 1465 | "time": "2020-10-26T13:12:34+00:00" 1466 | }, 1467 | { 1468 | "name": "sebastian/object-reflector", 1469 | "version": "2.0.4", 1470 | "source": { 1471 | "type": "git", 1472 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1473 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 1474 | }, 1475 | "dist": { 1476 | "type": "zip", 1477 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1478 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1479 | "shasum": "" 1480 | }, 1481 | "require": { 1482 | "php": ">=7.3" 1483 | }, 1484 | "require-dev": { 1485 | "phpunit/phpunit": "^9.3" 1486 | }, 1487 | "type": "library", 1488 | "extra": { 1489 | "branch-alias": { 1490 | "dev-master": "2.0-dev" 1491 | } 1492 | }, 1493 | "autoload": { 1494 | "classmap": [ 1495 | "src/" 1496 | ] 1497 | }, 1498 | "notification-url": "https://packagist.org/downloads/", 1499 | "license": [ 1500 | "BSD-3-Clause" 1501 | ], 1502 | "authors": [ 1503 | { 1504 | "name": "Sebastian Bergmann", 1505 | "email": "sebastian@phpunit.de" 1506 | } 1507 | ], 1508 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1509 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1510 | "support": { 1511 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 1512 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 1513 | }, 1514 | "funding": [ 1515 | { 1516 | "url": "https://github.com/sebastianbergmann", 1517 | "type": "github" 1518 | } 1519 | ], 1520 | "time": "2020-10-26T13:14:26+00:00" 1521 | }, 1522 | { 1523 | "name": "sebastian/recursion-context", 1524 | "version": "4.0.4", 1525 | "source": { 1526 | "type": "git", 1527 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1528 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 1529 | }, 1530 | "dist": { 1531 | "type": "zip", 1532 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 1533 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 1534 | "shasum": "" 1535 | }, 1536 | "require": { 1537 | "php": ">=7.3" 1538 | }, 1539 | "require-dev": { 1540 | "phpunit/phpunit": "^9.3" 1541 | }, 1542 | "type": "library", 1543 | "extra": { 1544 | "branch-alias": { 1545 | "dev-master": "4.0-dev" 1546 | } 1547 | }, 1548 | "autoload": { 1549 | "classmap": [ 1550 | "src/" 1551 | ] 1552 | }, 1553 | "notification-url": "https://packagist.org/downloads/", 1554 | "license": [ 1555 | "BSD-3-Clause" 1556 | ], 1557 | "authors": [ 1558 | { 1559 | "name": "Sebastian Bergmann", 1560 | "email": "sebastian@phpunit.de" 1561 | }, 1562 | { 1563 | "name": "Jeff Welch", 1564 | "email": "whatthejeff@gmail.com" 1565 | }, 1566 | { 1567 | "name": "Adam Harvey", 1568 | "email": "aharvey@php.net" 1569 | } 1570 | ], 1571 | "description": "Provides functionality to recursively process PHP variables", 1572 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1573 | "support": { 1574 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 1575 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 1576 | }, 1577 | "funding": [ 1578 | { 1579 | "url": "https://github.com/sebastianbergmann", 1580 | "type": "github" 1581 | } 1582 | ], 1583 | "time": "2020-10-26T13:17:30+00:00" 1584 | }, 1585 | { 1586 | "name": "sebastian/resource-operations", 1587 | "version": "3.0.3", 1588 | "source": { 1589 | "type": "git", 1590 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1591 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 1592 | }, 1593 | "dist": { 1594 | "type": "zip", 1595 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1596 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 1597 | "shasum": "" 1598 | }, 1599 | "require": { 1600 | "php": ">=7.3" 1601 | }, 1602 | "require-dev": { 1603 | "phpunit/phpunit": "^9.0" 1604 | }, 1605 | "type": "library", 1606 | "extra": { 1607 | "branch-alias": { 1608 | "dev-master": "3.0-dev" 1609 | } 1610 | }, 1611 | "autoload": { 1612 | "classmap": [ 1613 | "src/" 1614 | ] 1615 | }, 1616 | "notification-url": "https://packagist.org/downloads/", 1617 | "license": [ 1618 | "BSD-3-Clause" 1619 | ], 1620 | "authors": [ 1621 | { 1622 | "name": "Sebastian Bergmann", 1623 | "email": "sebastian@phpunit.de" 1624 | } 1625 | ], 1626 | "description": "Provides a list of PHP built-in functions that operate on resources", 1627 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1628 | "support": { 1629 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 1630 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 1631 | }, 1632 | "funding": [ 1633 | { 1634 | "url": "https://github.com/sebastianbergmann", 1635 | "type": "github" 1636 | } 1637 | ], 1638 | "time": "2020-09-28T06:45:17+00:00" 1639 | }, 1640 | { 1641 | "name": "sebastian/type", 1642 | "version": "3.2.0", 1643 | "source": { 1644 | "type": "git", 1645 | "url": "https://github.com/sebastianbergmann/type.git", 1646 | "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" 1647 | }, 1648 | "dist": { 1649 | "type": "zip", 1650 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", 1651 | "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", 1652 | "shasum": "" 1653 | }, 1654 | "require": { 1655 | "php": ">=7.3" 1656 | }, 1657 | "require-dev": { 1658 | "phpunit/phpunit": "^9.5" 1659 | }, 1660 | "type": "library", 1661 | "extra": { 1662 | "branch-alias": { 1663 | "dev-master": "3.2-dev" 1664 | } 1665 | }, 1666 | "autoload": { 1667 | "classmap": [ 1668 | "src/" 1669 | ] 1670 | }, 1671 | "notification-url": "https://packagist.org/downloads/", 1672 | "license": [ 1673 | "BSD-3-Clause" 1674 | ], 1675 | "authors": [ 1676 | { 1677 | "name": "Sebastian Bergmann", 1678 | "email": "sebastian@phpunit.de", 1679 | "role": "lead" 1680 | } 1681 | ], 1682 | "description": "Collection of value objects that represent the types of the PHP type system", 1683 | "homepage": "https://github.com/sebastianbergmann/type", 1684 | "support": { 1685 | "issues": "https://github.com/sebastianbergmann/type/issues", 1686 | "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" 1687 | }, 1688 | "funding": [ 1689 | { 1690 | "url": "https://github.com/sebastianbergmann", 1691 | "type": "github" 1692 | } 1693 | ], 1694 | "time": "2022-09-12T14:47:03+00:00" 1695 | }, 1696 | { 1697 | "name": "sebastian/version", 1698 | "version": "3.0.2", 1699 | "source": { 1700 | "type": "git", 1701 | "url": "https://github.com/sebastianbergmann/version.git", 1702 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 1703 | }, 1704 | "dist": { 1705 | "type": "zip", 1706 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 1707 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 1708 | "shasum": "" 1709 | }, 1710 | "require": { 1711 | "php": ">=7.3" 1712 | }, 1713 | "type": "library", 1714 | "extra": { 1715 | "branch-alias": { 1716 | "dev-master": "3.0-dev" 1717 | } 1718 | }, 1719 | "autoload": { 1720 | "classmap": [ 1721 | "src/" 1722 | ] 1723 | }, 1724 | "notification-url": "https://packagist.org/downloads/", 1725 | "license": [ 1726 | "BSD-3-Clause" 1727 | ], 1728 | "authors": [ 1729 | { 1730 | "name": "Sebastian Bergmann", 1731 | "email": "sebastian@phpunit.de", 1732 | "role": "lead" 1733 | } 1734 | ], 1735 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1736 | "homepage": "https://github.com/sebastianbergmann/version", 1737 | "support": { 1738 | "issues": "https://github.com/sebastianbergmann/version/issues", 1739 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 1740 | }, 1741 | "funding": [ 1742 | { 1743 | "url": "https://github.com/sebastianbergmann", 1744 | "type": "github" 1745 | } 1746 | ], 1747 | "time": "2020-09-28T06:39:44+00:00" 1748 | }, 1749 | { 1750 | "name": "theseer/tokenizer", 1751 | "version": "1.2.1", 1752 | "source": { 1753 | "type": "git", 1754 | "url": "https://github.com/theseer/tokenizer.git", 1755 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 1756 | }, 1757 | "dist": { 1758 | "type": "zip", 1759 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 1760 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 1761 | "shasum": "" 1762 | }, 1763 | "require": { 1764 | "ext-dom": "*", 1765 | "ext-tokenizer": "*", 1766 | "ext-xmlwriter": "*", 1767 | "php": "^7.2 || ^8.0" 1768 | }, 1769 | "type": "library", 1770 | "autoload": { 1771 | "classmap": [ 1772 | "src/" 1773 | ] 1774 | }, 1775 | "notification-url": "https://packagist.org/downloads/", 1776 | "license": [ 1777 | "BSD-3-Clause" 1778 | ], 1779 | "authors": [ 1780 | { 1781 | "name": "Arne Blankerts", 1782 | "email": "arne@blankerts.de", 1783 | "role": "Developer" 1784 | } 1785 | ], 1786 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1787 | "support": { 1788 | "issues": "https://github.com/theseer/tokenizer/issues", 1789 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 1790 | }, 1791 | "funding": [ 1792 | { 1793 | "url": "https://github.com/theseer", 1794 | "type": "github" 1795 | } 1796 | ], 1797 | "time": "2021-07-28T10:34:58+00:00" 1798 | } 1799 | ], 1800 | "aliases": [], 1801 | "minimum-stability": "stable", 1802 | "stability-flags": [], 1803 | "prefer-stable": false, 1804 | "prefer-lowest": false, 1805 | "platform": { 1806 | "php": ">=8.0.0", 1807 | "ext-curl": "*" 1808 | }, 1809 | "platform-dev": [], 1810 | "plugin-api-version": "2.3.0" 1811 | } 1812 | --------------------------------------------------------------------------------