├── .github └── workflows │ └── Build.yml ├── .gitignore ├── .releaserc ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── coverage.xml ├── phpcs.xml ├── phpunit.xml ├── src ├── Client.php ├── Request.php └── Response.php └── tests ├── ClientTest.php ├── RequestTest.php └── ResponseTest.php /.github/workflows/Build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | on: [push] 3 | jobs: 4 | test: 5 | name: Test 6 | runs-on: ubuntu-18.04 7 | steps: 8 | - uses: actions/checkout@master 9 | - name: Checkout 10 | run: git checkout "${GITHUB_REF:11}" 11 | - name: Setup PHP 12 | uses: shivammathur/setup-php@v2 13 | with: 14 | php-version: '7.3' 15 | coverage: xdebug 16 | - name: Composer Install 17 | run: composer install 18 | - name: PHPCS 19 | run: ./vendor/bin/phpcs src tests 20 | - name: Run Tests 21 | run: ./vendor/bin/phpunit --coverage-clover build/coverage.xml 22 | - name: Coveralls 23 | run: ./vendor/bin/php-coveralls -v --coverage_clover build/coverage.xml --json_path build/coveralls-upload.json 24 | env: 25 | COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }} 26 | release: 27 | name: Release 28 | if: github.ref == 'refs/heads/master' 29 | needs: test 30 | runs-on: ubuntu-18.04 31 | steps: 32 | - uses: actions/checkout@master 33 | - name: Checkout 34 | run: git checkout "${GITHUB_REF:11}" 35 | - name: Setup Node.js 36 | uses: actions/setup-node@v1 37 | with: 38 | node-version: 12 39 | - name: Install dependencies 40 | run: yarn install 41 | - name: Release 42 | env: 43 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 44 | run: npx semantic-release@15 45 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /build/ 3 | .phpunit.result.cache 4 | .coveralls.yml -------------------------------------------------------------------------------- /.releaserc: -------------------------------------------------------------------------------- 1 | plugins: 2 | - "@semantic-release/commit-analyzer" 3 | - "@semantic-release/release-notes-generator" 4 | - "@semantic-release/github" 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Oh See Software 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 | # Caddy Config PHP 2 | Caddy v2 API helper for PHP. 3 | 4 | [![Current Release](https://img.shields.io/github/release/ohseesoftware/caddy-config-php.svg?style=flat-square)](https://github.com/ohseesoftware/caddy-config-php/releases) 5 | ![Build Status Badge](https://github.com/ohseesoftware/caddy-config-php/workflows/Build/badge.svg) 6 | [![Coverage Status](https://coveralls.io/repos/github/ohseesoftware/caddy-config-php/badge.svg?branch=master)](https://coveralls.io/github/ohseesoftware/caddy-config-php?branch=master) 7 | [![Maintainability Score](https://img.shields.io/codeclimate/maintainability/ohseesoftware/caddy-config-php.svg?style=flat-square)](https://codeclimate.com/github/ohseesoftware/caddy-config-php) 8 | [![Downloads](https://img.shields.io/packagist/dt/ohseesoftware/caddy-config-php.svg?style=flat-square)](https://packagist.org/packages/ohseesoftware/caddy-config-php) 9 | [![MIT License](https://img.shields.io/github/license/ohseesoftware/caddy-config-php.svg?style=flat-square)](https://github.com/ohseesoftware/caddy-config-php/blob/master/LICENSE) 10 | 11 | --- 12 | 13 | Caddy v2 allows you to update your Caddy configuration via a JSON API. This package is a simple helper library to update parts of your configuration. 14 | 15 | Functionality for updating all aspects of the configuration will be added over time. 16 | 17 | ## Usage 18 | 19 | To get started, create an instance of `OhSeeSoftware\CaddyConfig\Client`, ensuring to pass your Caddy network address as the first argument: 20 | 21 | ```php 22 | $client = new OhSeeSoftware\CaddyConfig\Client('localhost:2019'); 23 | ``` 24 | 25 | From there, you can use the `$client` instance to make API requests to your Caddy instance. 26 | 27 | The idea behind the wrapper is that you can have a `Client` singleton class, and then use the `$client->request()` method to create new `Request` instances. You should create a new `Request` instance per HTTP request you send to your Caddy server. 28 | 29 | ## API Methods 30 | 31 | ### Client 32 | 33 | **__constructor()** 34 | 35 | Creates a new instance of the `Client` class. 36 | 37 | Arguments: 38 | 39 | * `$caddyHost` - _string_: The address where the [Caddy config endpoint](https://github.com/caddyserver/caddy/wiki/v2:-Documentation#admin) is listening. 40 | 41 | **setCaddyHost()** 42 | 43 | Allows you to change the Caddy host after creating the Client instance. 44 | 45 | Arguments: 46 | 47 | * `$caddyHost` - _string_: The address where the [Caddy config endpoint](https://github.com/caddyserver/caddy/wiki/v2:-Documentation#admin) is listening. 48 | 49 | **request()** 50 | 51 | Returns a new `Request` instance which you use to make configuration requests. 52 | 53 | No arguments. 54 | 55 | ### Request 56 | 57 | Use the `Request` class to compose your request to send to Caddy. Here's an example of how you can add a new host to a server: 58 | 59 | ```php 60 | $client = new OhSeeSoftware\CaddyConfig\Client('localhost:2019'); 61 | $client->request() 62 | ->http() 63 | ->server('srv0') 64 | ->route(0) 65 | ->match(0) 66 | ->addHost('example.com'); 67 | ``` 68 | 69 | **__constructor()** 70 | 71 | Creates a new instance of the `Request` class. 72 | 73 | Arguments: 74 | 75 | * `$caddyHost` - _string_: The address where the [Caddy config endpoint](https://github.com/caddyserver/caddy/wiki/v2:-Documentation#admin) is listening. 76 | 77 | **addHost()** 78 | 79 | Sends a request to Caddy to add the given host. 80 | 81 | Arguments: 82 | 83 | * `$host` - _string_: The host to add. 84 | 85 | Returns: 86 | 87 | * `Response` - The response from Caddy wrapped in a `Response` instance. 88 | 89 | **http()** 90 | 91 | Adds the http path, "/apps/http", to the request URI. 92 | 93 | No arguments. 94 | 95 | Returns: 96 | 97 | * `Request` - The request instance (allows chaining). 98 | 99 | **server()** 100 | 101 | Adds the server path, "/servers/{server}", to the request URI. 102 | 103 | Arguments: 104 | 105 | * `$server` - _string_: The name of the server to target. 106 | 107 | Returns: 108 | 109 | * `Request` - The request instance (allows chaining). 110 | 111 | **route()** 112 | 113 | Adds the route path, "/routes/{routeIndex}", to the request URI. 114 | 115 | Arguments: 116 | 117 | * `$routeIndex` - _int_: The route to target. 118 | 119 | Returns: 120 | 121 | * `Request` - The request instance (allows chaining). 122 | 123 | **match()** 124 | 125 | Adds the match path, "/match/{matchIndex}", to the request URI. 126 | 127 | Arguments: 128 | 129 | * `$matchIndex` - _int_: The match to target. 130 | 131 | Returns: 132 | 133 | * `Request` - The request instance (allows chaining). 134 | 135 | **sendRequest()** 136 | 137 | Sends the built request to the Caddy server. 138 | 139 | Arguments: 140 | 141 | * `$method` - _string_: The method for the request. 142 | * `$body` - _array|nuullable_: The request body to send to Caddy. 143 | 144 | Returns: 145 | 146 | * `Response` - A new instance of a `Response` instance. 147 | 148 | ### Response 149 | 150 | **__constructor()** 151 | 152 | Creates a new instance of the `Response` class. 153 | 154 | Arguments: 155 | 156 | * `$response` - _ResponseInterface_: Instance of a `ResponseInterface` (created by Guzzle). 157 | 158 | **getBody()** 159 | 160 | Returns the response body as a string. 161 | 162 | No arguments. 163 | 164 | **isSuccessful()** 165 | 166 | Returns a boolean indicating if the request was successful. Status codes of 200 or 201 are considered successful, everything else is not. 167 | 168 | No arguments. 169 | 170 | ## License 171 | 172 | The MIT License (MIT). Please see [License File](https://github.com/ohseesoftware/caddy-config-php/blob/master/LICENSE) for more information. 173 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ohseesoftware/caddy-config-php", 3 | "description": "Caddy v2 API helper library.", 4 | "type": "library", 5 | "require": { 6 | "guzzlehttp/guzzle": "^6.4" 7 | }, 8 | "require-dev": { 9 | "squizlabs/php_codesniffer": "*", 10 | "phpunit/phpunit": "^8.4", 11 | "php-coveralls/php-coveralls": "^2.2" 12 | }, 13 | "license": "MIT", 14 | "authors": [ 15 | { 16 | "name": "Owen Conti", 17 | "email": "owen@ohseemedia.com" 18 | } 19 | ], 20 | "autoload": { 21 | "psr-4": { 22 | "OhSeeSoftware\\CaddyConfig\\": "src/" 23 | } 24 | }, 25 | "autoload-dev": { 26 | "psr-4": { 27 | "Tests\\": "tests/" 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /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": "57d2643217d6bc98a2358af32b41851a", 8 | "packages": [ 9 | { 10 | "name": "guzzlehttp/guzzle", 11 | "version": "6.4.1", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/guzzle/guzzle.git", 15 | "reference": "0895c932405407fd3a7368b6910c09a24d26db11" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11", 20 | "reference": "0895c932405407fd3a7368b6910c09a24d26db11", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "ext-json": "*", 25 | "guzzlehttp/promises": "^1.0", 26 | "guzzlehttp/psr7": "^1.6.1", 27 | "php": ">=5.5" 28 | }, 29 | "require-dev": { 30 | "ext-curl": "*", 31 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", 32 | "psr/log": "^1.1" 33 | }, 34 | "suggest": { 35 | "psr/log": "Required for using the Log middleware" 36 | }, 37 | "type": "library", 38 | "extra": { 39 | "branch-alias": { 40 | "dev-master": "6.3-dev" 41 | } 42 | }, 43 | "autoload": { 44 | "psr-4": { 45 | "GuzzleHttp\\": "src/" 46 | }, 47 | "files": [ 48 | "src/functions_include.php" 49 | ] 50 | }, 51 | "notification-url": "https://packagist.org/downloads/", 52 | "license": [ 53 | "MIT" 54 | ], 55 | "authors": [ 56 | { 57 | "name": "Michael Dowling", 58 | "email": "mtdowling@gmail.com", 59 | "homepage": "https://github.com/mtdowling" 60 | } 61 | ], 62 | "description": "Guzzle is a PHP HTTP client library", 63 | "homepage": "http://guzzlephp.org/", 64 | "keywords": [ 65 | "client", 66 | "curl", 67 | "framework", 68 | "http", 69 | "http client", 70 | "rest", 71 | "web service" 72 | ], 73 | "time": "2019-10-23T15:58:00+00:00" 74 | }, 75 | { 76 | "name": "guzzlehttp/promises", 77 | "version": "v1.3.1", 78 | "source": { 79 | "type": "git", 80 | "url": "https://github.com/guzzle/promises.git", 81 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" 82 | }, 83 | "dist": { 84 | "type": "zip", 85 | "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", 86 | "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", 87 | "shasum": "" 88 | }, 89 | "require": { 90 | "php": ">=5.5.0" 91 | }, 92 | "require-dev": { 93 | "phpunit/phpunit": "^4.0" 94 | }, 95 | "type": "library", 96 | "extra": { 97 | "branch-alias": { 98 | "dev-master": "1.4-dev" 99 | } 100 | }, 101 | "autoload": { 102 | "psr-4": { 103 | "GuzzleHttp\\Promise\\": "src/" 104 | }, 105 | "files": [ 106 | "src/functions_include.php" 107 | ] 108 | }, 109 | "notification-url": "https://packagist.org/downloads/", 110 | "license": [ 111 | "MIT" 112 | ], 113 | "authors": [ 114 | { 115 | "name": "Michael Dowling", 116 | "email": "mtdowling@gmail.com", 117 | "homepage": "https://github.com/mtdowling" 118 | } 119 | ], 120 | "description": "Guzzle promises library", 121 | "keywords": [ 122 | "promise" 123 | ], 124 | "time": "2016-12-20T10:07:11+00:00" 125 | }, 126 | { 127 | "name": "guzzlehttp/psr7", 128 | "version": "1.6.1", 129 | "source": { 130 | "type": "git", 131 | "url": "https://github.com/guzzle/psr7.git", 132 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a" 133 | }, 134 | "dist": { 135 | "type": "zip", 136 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", 137 | "reference": "239400de7a173fe9901b9ac7c06497751f00727a", 138 | "shasum": "" 139 | }, 140 | "require": { 141 | "php": ">=5.4.0", 142 | "psr/http-message": "~1.0", 143 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 144 | }, 145 | "provide": { 146 | "psr/http-message-implementation": "1.0" 147 | }, 148 | "require-dev": { 149 | "ext-zlib": "*", 150 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" 151 | }, 152 | "suggest": { 153 | "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" 154 | }, 155 | "type": "library", 156 | "extra": { 157 | "branch-alias": { 158 | "dev-master": "1.6-dev" 159 | } 160 | }, 161 | "autoload": { 162 | "psr-4": { 163 | "GuzzleHttp\\Psr7\\": "src/" 164 | }, 165 | "files": [ 166 | "src/functions_include.php" 167 | ] 168 | }, 169 | "notification-url": "https://packagist.org/downloads/", 170 | "license": [ 171 | "MIT" 172 | ], 173 | "authors": [ 174 | { 175 | "name": "Michael Dowling", 176 | "email": "mtdowling@gmail.com", 177 | "homepage": "https://github.com/mtdowling" 178 | }, 179 | { 180 | "name": "Tobias Schultze", 181 | "homepage": "https://github.com/Tobion" 182 | } 183 | ], 184 | "description": "PSR-7 message implementation that also provides common utility methods", 185 | "keywords": [ 186 | "http", 187 | "message", 188 | "psr-7", 189 | "request", 190 | "response", 191 | "stream", 192 | "uri", 193 | "url" 194 | ], 195 | "time": "2019-07-01T23:21:34+00:00" 196 | }, 197 | { 198 | "name": "psr/http-message", 199 | "version": "1.0.1", 200 | "source": { 201 | "type": "git", 202 | "url": "https://github.com/php-fig/http-message.git", 203 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 204 | }, 205 | "dist": { 206 | "type": "zip", 207 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 208 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 209 | "shasum": "" 210 | }, 211 | "require": { 212 | "php": ">=5.3.0" 213 | }, 214 | "type": "library", 215 | "extra": { 216 | "branch-alias": { 217 | "dev-master": "1.0.x-dev" 218 | } 219 | }, 220 | "autoload": { 221 | "psr-4": { 222 | "Psr\\Http\\Message\\": "src/" 223 | } 224 | }, 225 | "notification-url": "https://packagist.org/downloads/", 226 | "license": [ 227 | "MIT" 228 | ], 229 | "authors": [ 230 | { 231 | "name": "PHP-FIG", 232 | "homepage": "http://www.php-fig.org/" 233 | } 234 | ], 235 | "description": "Common interface for HTTP messages", 236 | "homepage": "https://github.com/php-fig/http-message", 237 | "keywords": [ 238 | "http", 239 | "http-message", 240 | "psr", 241 | "psr-7", 242 | "request", 243 | "response" 244 | ], 245 | "time": "2016-08-06T14:39:51+00:00" 246 | }, 247 | { 248 | "name": "ralouphie/getallheaders", 249 | "version": "3.0.3", 250 | "source": { 251 | "type": "git", 252 | "url": "https://github.com/ralouphie/getallheaders.git", 253 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 254 | }, 255 | "dist": { 256 | "type": "zip", 257 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 258 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 259 | "shasum": "" 260 | }, 261 | "require": { 262 | "php": ">=5.6" 263 | }, 264 | "require-dev": { 265 | "php-coveralls/php-coveralls": "^2.1", 266 | "phpunit/phpunit": "^5 || ^6.5" 267 | }, 268 | "type": "library", 269 | "autoload": { 270 | "files": [ 271 | "src/getallheaders.php" 272 | ] 273 | }, 274 | "notification-url": "https://packagist.org/downloads/", 275 | "license": [ 276 | "MIT" 277 | ], 278 | "authors": [ 279 | { 280 | "name": "Ralph Khattar", 281 | "email": "ralph.khattar@gmail.com" 282 | } 283 | ], 284 | "description": "A polyfill for getallheaders.", 285 | "time": "2019-03-08T08:55:37+00:00" 286 | } 287 | ], 288 | "packages-dev": [ 289 | { 290 | "name": "doctrine/instantiator", 291 | "version": "1.3.0", 292 | "source": { 293 | "type": "git", 294 | "url": "https://github.com/doctrine/instantiator.git", 295 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" 296 | }, 297 | "dist": { 298 | "type": "zip", 299 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", 300 | "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", 301 | "shasum": "" 302 | }, 303 | "require": { 304 | "php": "^7.1" 305 | }, 306 | "require-dev": { 307 | "doctrine/coding-standard": "^6.0", 308 | "ext-pdo": "*", 309 | "ext-phar": "*", 310 | "phpbench/phpbench": "^0.13", 311 | "phpstan/phpstan-phpunit": "^0.11", 312 | "phpstan/phpstan-shim": "^0.11", 313 | "phpunit/phpunit": "^7.0" 314 | }, 315 | "type": "library", 316 | "extra": { 317 | "branch-alias": { 318 | "dev-master": "1.2.x-dev" 319 | } 320 | }, 321 | "autoload": { 322 | "psr-4": { 323 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 324 | } 325 | }, 326 | "notification-url": "https://packagist.org/downloads/", 327 | "license": [ 328 | "MIT" 329 | ], 330 | "authors": [ 331 | { 332 | "name": "Marco Pivetta", 333 | "email": "ocramius@gmail.com", 334 | "homepage": "http://ocramius.github.com/" 335 | } 336 | ], 337 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 338 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 339 | "keywords": [ 340 | "constructor", 341 | "instantiate" 342 | ], 343 | "time": "2019-10-21T16:45:58+00:00" 344 | }, 345 | { 346 | "name": "myclabs/deep-copy", 347 | "version": "1.9.3", 348 | "source": { 349 | "type": "git", 350 | "url": "https://github.com/myclabs/DeepCopy.git", 351 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" 352 | }, 353 | "dist": { 354 | "type": "zip", 355 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", 356 | "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", 357 | "shasum": "" 358 | }, 359 | "require": { 360 | "php": "^7.1" 361 | }, 362 | "replace": { 363 | "myclabs/deep-copy": "self.version" 364 | }, 365 | "require-dev": { 366 | "doctrine/collections": "^1.0", 367 | "doctrine/common": "^2.6", 368 | "phpunit/phpunit": "^7.1" 369 | }, 370 | "type": "library", 371 | "autoload": { 372 | "psr-4": { 373 | "DeepCopy\\": "src/DeepCopy/" 374 | }, 375 | "files": [ 376 | "src/DeepCopy/deep_copy.php" 377 | ] 378 | }, 379 | "notification-url": "https://packagist.org/downloads/", 380 | "license": [ 381 | "MIT" 382 | ], 383 | "description": "Create deep copies (clones) of your objects", 384 | "keywords": [ 385 | "clone", 386 | "copy", 387 | "duplicate", 388 | "object", 389 | "object graph" 390 | ], 391 | "time": "2019-08-09T12:45:53+00:00" 392 | }, 393 | { 394 | "name": "phar-io/manifest", 395 | "version": "1.0.3", 396 | "source": { 397 | "type": "git", 398 | "url": "https://github.com/phar-io/manifest.git", 399 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 400 | }, 401 | "dist": { 402 | "type": "zip", 403 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 404 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 405 | "shasum": "" 406 | }, 407 | "require": { 408 | "ext-dom": "*", 409 | "ext-phar": "*", 410 | "phar-io/version": "^2.0", 411 | "php": "^5.6 || ^7.0" 412 | }, 413 | "type": "library", 414 | "extra": { 415 | "branch-alias": { 416 | "dev-master": "1.0.x-dev" 417 | } 418 | }, 419 | "autoload": { 420 | "classmap": [ 421 | "src/" 422 | ] 423 | }, 424 | "notification-url": "https://packagist.org/downloads/", 425 | "license": [ 426 | "BSD-3-Clause" 427 | ], 428 | "authors": [ 429 | { 430 | "name": "Arne Blankerts", 431 | "email": "arne@blankerts.de", 432 | "role": "Developer" 433 | }, 434 | { 435 | "name": "Sebastian Heuer", 436 | "email": "sebastian@phpeople.de", 437 | "role": "Developer" 438 | }, 439 | { 440 | "name": "Sebastian Bergmann", 441 | "email": "sebastian@phpunit.de", 442 | "role": "Developer" 443 | } 444 | ], 445 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 446 | "time": "2018-07-08T19:23:20+00:00" 447 | }, 448 | { 449 | "name": "phar-io/version", 450 | "version": "2.0.1", 451 | "source": { 452 | "type": "git", 453 | "url": "https://github.com/phar-io/version.git", 454 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 455 | }, 456 | "dist": { 457 | "type": "zip", 458 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 459 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 460 | "shasum": "" 461 | }, 462 | "require": { 463 | "php": "^5.6 || ^7.0" 464 | }, 465 | "type": "library", 466 | "autoload": { 467 | "classmap": [ 468 | "src/" 469 | ] 470 | }, 471 | "notification-url": "https://packagist.org/downloads/", 472 | "license": [ 473 | "BSD-3-Clause" 474 | ], 475 | "authors": [ 476 | { 477 | "name": "Arne Blankerts", 478 | "email": "arne@blankerts.de", 479 | "role": "Developer" 480 | }, 481 | { 482 | "name": "Sebastian Heuer", 483 | "email": "sebastian@phpeople.de", 484 | "role": "Developer" 485 | }, 486 | { 487 | "name": "Sebastian Bergmann", 488 | "email": "sebastian@phpunit.de", 489 | "role": "Developer" 490 | } 491 | ], 492 | "description": "Library for handling version information and constraints", 493 | "time": "2018-07-08T19:19:57+00:00" 494 | }, 495 | { 496 | "name": "php-coveralls/php-coveralls", 497 | "version": "v2.2.0", 498 | "source": { 499 | "type": "git", 500 | "url": "https://github.com/php-coveralls/php-coveralls.git", 501 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae" 502 | }, 503 | "dist": { 504 | "type": "zip", 505 | "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae", 506 | "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae", 507 | "shasum": "" 508 | }, 509 | "require": { 510 | "ext-json": "*", 511 | "ext-simplexml": "*", 512 | "guzzlehttp/guzzle": "^6.0", 513 | "php": "^5.5 || ^7.0", 514 | "psr/log": "^1.0", 515 | "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0", 516 | "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0", 517 | "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0", 518 | "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0" 519 | }, 520 | "require-dev": { 521 | "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" 522 | }, 523 | "suggest": { 524 | "symfony/http-kernel": "Allows Symfony integration" 525 | }, 526 | "bin": [ 527 | "bin/php-coveralls" 528 | ], 529 | "type": "library", 530 | "extra": { 531 | "branch-alias": { 532 | "dev-master": "2.2-dev" 533 | } 534 | }, 535 | "autoload": { 536 | "psr-4": { 537 | "PhpCoveralls\\": "src/" 538 | } 539 | }, 540 | "notification-url": "https://packagist.org/downloads/", 541 | "license": [ 542 | "MIT" 543 | ], 544 | "authors": [ 545 | { 546 | "name": "Kitamura Satoshi", 547 | "email": "with.no.parachute@gmail.com", 548 | "homepage": "https://www.facebook.com/satooshi.jp", 549 | "role": "Original creator" 550 | }, 551 | { 552 | "name": "Takashi Matsuo", 553 | "email": "tmatsuo@google.com" 554 | }, 555 | { 556 | "name": "Google Inc" 557 | }, 558 | { 559 | "name": "Dariusz Ruminski", 560 | "email": "dariusz.ruminski@gmail.com", 561 | "homepage": "https://github.com/keradus" 562 | }, 563 | { 564 | "name": "Contributors", 565 | "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" 566 | } 567 | ], 568 | "description": "PHP client library for Coveralls API", 569 | "homepage": "https://github.com/php-coveralls/php-coveralls", 570 | "keywords": [ 571 | "ci", 572 | "coverage", 573 | "github", 574 | "test" 575 | ], 576 | "time": "2019-11-20T16:29:20+00:00" 577 | }, 578 | { 579 | "name": "phpdocumentor/reflection-common", 580 | "version": "2.0.0", 581 | "source": { 582 | "type": "git", 583 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 584 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" 585 | }, 586 | "dist": { 587 | "type": "zip", 588 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", 589 | "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", 590 | "shasum": "" 591 | }, 592 | "require": { 593 | "php": ">=7.1" 594 | }, 595 | "require-dev": { 596 | "phpunit/phpunit": "~6" 597 | }, 598 | "type": "library", 599 | "extra": { 600 | "branch-alias": { 601 | "dev-master": "2.x-dev" 602 | } 603 | }, 604 | "autoload": { 605 | "psr-4": { 606 | "phpDocumentor\\Reflection\\": "src/" 607 | } 608 | }, 609 | "notification-url": "https://packagist.org/downloads/", 610 | "license": [ 611 | "MIT" 612 | ], 613 | "authors": [ 614 | { 615 | "name": "Jaap van Otterdijk", 616 | "email": "opensource@ijaap.nl" 617 | } 618 | ], 619 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 620 | "homepage": "http://www.phpdoc.org", 621 | "keywords": [ 622 | "FQSEN", 623 | "phpDocumentor", 624 | "phpdoc", 625 | "reflection", 626 | "static analysis" 627 | ], 628 | "time": "2018-08-07T13:53:10+00:00" 629 | }, 630 | { 631 | "name": "phpdocumentor/reflection-docblock", 632 | "version": "4.3.2", 633 | "source": { 634 | "type": "git", 635 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 636 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" 637 | }, 638 | "dist": { 639 | "type": "zip", 640 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", 641 | "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", 642 | "shasum": "" 643 | }, 644 | "require": { 645 | "php": "^7.0", 646 | "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", 647 | "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", 648 | "webmozart/assert": "^1.0" 649 | }, 650 | "require-dev": { 651 | "doctrine/instantiator": "^1.0.5", 652 | "mockery/mockery": "^1.0", 653 | "phpunit/phpunit": "^6.4" 654 | }, 655 | "type": "library", 656 | "extra": { 657 | "branch-alias": { 658 | "dev-master": "4.x-dev" 659 | } 660 | }, 661 | "autoload": { 662 | "psr-4": { 663 | "phpDocumentor\\Reflection\\": [ 664 | "src/" 665 | ] 666 | } 667 | }, 668 | "notification-url": "https://packagist.org/downloads/", 669 | "license": [ 670 | "MIT" 671 | ], 672 | "authors": [ 673 | { 674 | "name": "Mike van Riel", 675 | "email": "me@mikevanriel.com" 676 | } 677 | ], 678 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 679 | "time": "2019-09-12T14:27:41+00:00" 680 | }, 681 | { 682 | "name": "phpdocumentor/type-resolver", 683 | "version": "1.0.1", 684 | "source": { 685 | "type": "git", 686 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 687 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" 688 | }, 689 | "dist": { 690 | "type": "zip", 691 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 692 | "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", 693 | "shasum": "" 694 | }, 695 | "require": { 696 | "php": "^7.1", 697 | "phpdocumentor/reflection-common": "^2.0" 698 | }, 699 | "require-dev": { 700 | "ext-tokenizer": "^7.1", 701 | "mockery/mockery": "~1", 702 | "phpunit/phpunit": "^7.0" 703 | }, 704 | "type": "library", 705 | "extra": { 706 | "branch-alias": { 707 | "dev-master": "1.x-dev" 708 | } 709 | }, 710 | "autoload": { 711 | "psr-4": { 712 | "phpDocumentor\\Reflection\\": "src" 713 | } 714 | }, 715 | "notification-url": "https://packagist.org/downloads/", 716 | "license": [ 717 | "MIT" 718 | ], 719 | "authors": [ 720 | { 721 | "name": "Mike van Riel", 722 | "email": "me@mikevanriel.com" 723 | } 724 | ], 725 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 726 | "time": "2019-08-22T18:11:29+00:00" 727 | }, 728 | { 729 | "name": "phpspec/prophecy", 730 | "version": "1.9.0", 731 | "source": { 732 | "type": "git", 733 | "url": "https://github.com/phpspec/prophecy.git", 734 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" 735 | }, 736 | "dist": { 737 | "type": "zip", 738 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", 739 | "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", 740 | "shasum": "" 741 | }, 742 | "require": { 743 | "doctrine/instantiator": "^1.0.2", 744 | "php": "^5.3|^7.0", 745 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", 746 | "sebastian/comparator": "^1.1|^2.0|^3.0", 747 | "sebastian/recursion-context": "^1.0|^2.0|^3.0" 748 | }, 749 | "require-dev": { 750 | "phpspec/phpspec": "^2.5|^3.2", 751 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 752 | }, 753 | "type": "library", 754 | "extra": { 755 | "branch-alias": { 756 | "dev-master": "1.8.x-dev" 757 | } 758 | }, 759 | "autoload": { 760 | "psr-4": { 761 | "Prophecy\\": "src/Prophecy" 762 | } 763 | }, 764 | "notification-url": "https://packagist.org/downloads/", 765 | "license": [ 766 | "MIT" 767 | ], 768 | "authors": [ 769 | { 770 | "name": "Konstantin Kudryashov", 771 | "email": "ever.zet@gmail.com", 772 | "homepage": "http://everzet.com" 773 | }, 774 | { 775 | "name": "Marcello Duarte", 776 | "email": "marcello.duarte@gmail.com" 777 | } 778 | ], 779 | "description": "Highly opinionated mocking framework for PHP 5.3+", 780 | "homepage": "https://github.com/phpspec/prophecy", 781 | "keywords": [ 782 | "Double", 783 | "Dummy", 784 | "fake", 785 | "mock", 786 | "spy", 787 | "stub" 788 | ], 789 | "time": "2019-10-03T11:07:50+00:00" 790 | }, 791 | { 792 | "name": "phpunit/php-code-coverage", 793 | "version": "7.0.10", 794 | "source": { 795 | "type": "git", 796 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 797 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" 798 | }, 799 | "dist": { 800 | "type": "zip", 801 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", 802 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", 803 | "shasum": "" 804 | }, 805 | "require": { 806 | "ext-dom": "*", 807 | "ext-xmlwriter": "*", 808 | "php": "^7.2", 809 | "phpunit/php-file-iterator": "^2.0.2", 810 | "phpunit/php-text-template": "^1.2.1", 811 | "phpunit/php-token-stream": "^3.1.1", 812 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 813 | "sebastian/environment": "^4.2.2", 814 | "sebastian/version": "^2.0.1", 815 | "theseer/tokenizer": "^1.1.3" 816 | }, 817 | "require-dev": { 818 | "phpunit/phpunit": "^8.2.2" 819 | }, 820 | "suggest": { 821 | "ext-xdebug": "^2.7.2" 822 | }, 823 | "type": "library", 824 | "extra": { 825 | "branch-alias": { 826 | "dev-master": "7.0-dev" 827 | } 828 | }, 829 | "autoload": { 830 | "classmap": [ 831 | "src/" 832 | ] 833 | }, 834 | "notification-url": "https://packagist.org/downloads/", 835 | "license": [ 836 | "BSD-3-Clause" 837 | ], 838 | "authors": [ 839 | { 840 | "name": "Sebastian Bergmann", 841 | "email": "sebastian@phpunit.de", 842 | "role": "lead" 843 | } 844 | ], 845 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 846 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 847 | "keywords": [ 848 | "coverage", 849 | "testing", 850 | "xunit" 851 | ], 852 | "time": "2019-11-20T13:55:58+00:00" 853 | }, 854 | { 855 | "name": "phpunit/php-file-iterator", 856 | "version": "2.0.2", 857 | "source": { 858 | "type": "git", 859 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 860 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 861 | }, 862 | "dist": { 863 | "type": "zip", 864 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 865 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 866 | "shasum": "" 867 | }, 868 | "require": { 869 | "php": "^7.1" 870 | }, 871 | "require-dev": { 872 | "phpunit/phpunit": "^7.1" 873 | }, 874 | "type": "library", 875 | "extra": { 876 | "branch-alias": { 877 | "dev-master": "2.0.x-dev" 878 | } 879 | }, 880 | "autoload": { 881 | "classmap": [ 882 | "src/" 883 | ] 884 | }, 885 | "notification-url": "https://packagist.org/downloads/", 886 | "license": [ 887 | "BSD-3-Clause" 888 | ], 889 | "authors": [ 890 | { 891 | "name": "Sebastian Bergmann", 892 | "email": "sebastian@phpunit.de", 893 | "role": "lead" 894 | } 895 | ], 896 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 897 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 898 | "keywords": [ 899 | "filesystem", 900 | "iterator" 901 | ], 902 | "time": "2018-09-13T20:33:42+00:00" 903 | }, 904 | { 905 | "name": "phpunit/php-text-template", 906 | "version": "1.2.1", 907 | "source": { 908 | "type": "git", 909 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 910 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 911 | }, 912 | "dist": { 913 | "type": "zip", 914 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 915 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 916 | "shasum": "" 917 | }, 918 | "require": { 919 | "php": ">=5.3.3" 920 | }, 921 | "type": "library", 922 | "autoload": { 923 | "classmap": [ 924 | "src/" 925 | ] 926 | }, 927 | "notification-url": "https://packagist.org/downloads/", 928 | "license": [ 929 | "BSD-3-Clause" 930 | ], 931 | "authors": [ 932 | { 933 | "name": "Sebastian Bergmann", 934 | "email": "sebastian@phpunit.de", 935 | "role": "lead" 936 | } 937 | ], 938 | "description": "Simple template engine.", 939 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 940 | "keywords": [ 941 | "template" 942 | ], 943 | "time": "2015-06-21T13:50:34+00:00" 944 | }, 945 | { 946 | "name": "phpunit/php-timer", 947 | "version": "2.1.2", 948 | "source": { 949 | "type": "git", 950 | "url": "https://github.com/sebastianbergmann/php-timer.git", 951 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 952 | }, 953 | "dist": { 954 | "type": "zip", 955 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 956 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 957 | "shasum": "" 958 | }, 959 | "require": { 960 | "php": "^7.1" 961 | }, 962 | "require-dev": { 963 | "phpunit/phpunit": "^7.0" 964 | }, 965 | "type": "library", 966 | "extra": { 967 | "branch-alias": { 968 | "dev-master": "2.1-dev" 969 | } 970 | }, 971 | "autoload": { 972 | "classmap": [ 973 | "src/" 974 | ] 975 | }, 976 | "notification-url": "https://packagist.org/downloads/", 977 | "license": [ 978 | "BSD-3-Clause" 979 | ], 980 | "authors": [ 981 | { 982 | "name": "Sebastian Bergmann", 983 | "email": "sebastian@phpunit.de", 984 | "role": "lead" 985 | } 986 | ], 987 | "description": "Utility class for timing", 988 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 989 | "keywords": [ 990 | "timer" 991 | ], 992 | "time": "2019-06-07T04:22:29+00:00" 993 | }, 994 | { 995 | "name": "phpunit/php-token-stream", 996 | "version": "3.1.1", 997 | "source": { 998 | "type": "git", 999 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1000 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" 1001 | }, 1002 | "dist": { 1003 | "type": "zip", 1004 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", 1005 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", 1006 | "shasum": "" 1007 | }, 1008 | "require": { 1009 | "ext-tokenizer": "*", 1010 | "php": "^7.1" 1011 | }, 1012 | "require-dev": { 1013 | "phpunit/phpunit": "^7.0" 1014 | }, 1015 | "type": "library", 1016 | "extra": { 1017 | "branch-alias": { 1018 | "dev-master": "3.1-dev" 1019 | } 1020 | }, 1021 | "autoload": { 1022 | "classmap": [ 1023 | "src/" 1024 | ] 1025 | }, 1026 | "notification-url": "https://packagist.org/downloads/", 1027 | "license": [ 1028 | "BSD-3-Clause" 1029 | ], 1030 | "authors": [ 1031 | { 1032 | "name": "Sebastian Bergmann", 1033 | "email": "sebastian@phpunit.de" 1034 | } 1035 | ], 1036 | "description": "Wrapper around PHP's tokenizer extension.", 1037 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1038 | "keywords": [ 1039 | "tokenizer" 1040 | ], 1041 | "time": "2019-09-17T06:23:10+00:00" 1042 | }, 1043 | { 1044 | "name": "phpunit/phpunit", 1045 | "version": "8.4.3", 1046 | "source": { 1047 | "type": "git", 1048 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1049 | "reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e" 1050 | }, 1051 | "dist": { 1052 | "type": "zip", 1053 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67f9e35bffc0dd52d55d565ddbe4230454fd6a4e", 1054 | "reference": "67f9e35bffc0dd52d55d565ddbe4230454fd6a4e", 1055 | "shasum": "" 1056 | }, 1057 | "require": { 1058 | "doctrine/instantiator": "^1.2.0", 1059 | "ext-dom": "*", 1060 | "ext-json": "*", 1061 | "ext-libxml": "*", 1062 | "ext-mbstring": "*", 1063 | "ext-xml": "*", 1064 | "ext-xmlwriter": "*", 1065 | "myclabs/deep-copy": "^1.9.1", 1066 | "phar-io/manifest": "^1.0.3", 1067 | "phar-io/version": "^2.0.1", 1068 | "php": "^7.2", 1069 | "phpspec/prophecy": "^1.8.1", 1070 | "phpunit/php-code-coverage": "^7.0.7", 1071 | "phpunit/php-file-iterator": "^2.0.2", 1072 | "phpunit/php-text-template": "^1.2.1", 1073 | "phpunit/php-timer": "^2.1.2", 1074 | "sebastian/comparator": "^3.0.2", 1075 | "sebastian/diff": "^3.0.2", 1076 | "sebastian/environment": "^4.2.2", 1077 | "sebastian/exporter": "^3.1.1", 1078 | "sebastian/global-state": "^3.0.0", 1079 | "sebastian/object-enumerator": "^3.0.3", 1080 | "sebastian/resource-operations": "^2.0.1", 1081 | "sebastian/type": "^1.1.3", 1082 | "sebastian/version": "^2.0.1" 1083 | }, 1084 | "require-dev": { 1085 | "ext-pdo": "*" 1086 | }, 1087 | "suggest": { 1088 | "ext-soap": "*", 1089 | "ext-xdebug": "*", 1090 | "phpunit/php-invoker": "^2.0.0" 1091 | }, 1092 | "bin": [ 1093 | "phpunit" 1094 | ], 1095 | "type": "library", 1096 | "extra": { 1097 | "branch-alias": { 1098 | "dev-master": "8.4-dev" 1099 | } 1100 | }, 1101 | "autoload": { 1102 | "classmap": [ 1103 | "src/" 1104 | ] 1105 | }, 1106 | "notification-url": "https://packagist.org/downloads/", 1107 | "license": [ 1108 | "BSD-3-Clause" 1109 | ], 1110 | "authors": [ 1111 | { 1112 | "name": "Sebastian Bergmann", 1113 | "email": "sebastian@phpunit.de", 1114 | "role": "lead" 1115 | } 1116 | ], 1117 | "description": "The PHP Unit Testing framework.", 1118 | "homepage": "https://phpunit.de/", 1119 | "keywords": [ 1120 | "phpunit", 1121 | "testing", 1122 | "xunit" 1123 | ], 1124 | "time": "2019-11-06T09:42:23+00:00" 1125 | }, 1126 | { 1127 | "name": "psr/container", 1128 | "version": "1.0.0", 1129 | "source": { 1130 | "type": "git", 1131 | "url": "https://github.com/php-fig/container.git", 1132 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 1133 | }, 1134 | "dist": { 1135 | "type": "zip", 1136 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1137 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1138 | "shasum": "" 1139 | }, 1140 | "require": { 1141 | "php": ">=5.3.0" 1142 | }, 1143 | "type": "library", 1144 | "extra": { 1145 | "branch-alias": { 1146 | "dev-master": "1.0.x-dev" 1147 | } 1148 | }, 1149 | "autoload": { 1150 | "psr-4": { 1151 | "Psr\\Container\\": "src/" 1152 | } 1153 | }, 1154 | "notification-url": "https://packagist.org/downloads/", 1155 | "license": [ 1156 | "MIT" 1157 | ], 1158 | "authors": [ 1159 | { 1160 | "name": "PHP-FIG", 1161 | "homepage": "http://www.php-fig.org/" 1162 | } 1163 | ], 1164 | "description": "Common Container Interface (PHP FIG PSR-11)", 1165 | "homepage": "https://github.com/php-fig/container", 1166 | "keywords": [ 1167 | "PSR-11", 1168 | "container", 1169 | "container-interface", 1170 | "container-interop", 1171 | "psr" 1172 | ], 1173 | "time": "2017-02-14T16:28:37+00:00" 1174 | }, 1175 | { 1176 | "name": "psr/log", 1177 | "version": "1.1.2", 1178 | "source": { 1179 | "type": "git", 1180 | "url": "https://github.com/php-fig/log.git", 1181 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" 1182 | }, 1183 | "dist": { 1184 | "type": "zip", 1185 | "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", 1186 | "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", 1187 | "shasum": "" 1188 | }, 1189 | "require": { 1190 | "php": ">=5.3.0" 1191 | }, 1192 | "type": "library", 1193 | "extra": { 1194 | "branch-alias": { 1195 | "dev-master": "1.1.x-dev" 1196 | } 1197 | }, 1198 | "autoload": { 1199 | "psr-4": { 1200 | "Psr\\Log\\": "Psr/Log/" 1201 | } 1202 | }, 1203 | "notification-url": "https://packagist.org/downloads/", 1204 | "license": [ 1205 | "MIT" 1206 | ], 1207 | "authors": [ 1208 | { 1209 | "name": "PHP-FIG", 1210 | "homepage": "http://www.php-fig.org/" 1211 | } 1212 | ], 1213 | "description": "Common interface for logging libraries", 1214 | "homepage": "https://github.com/php-fig/log", 1215 | "keywords": [ 1216 | "log", 1217 | "psr", 1218 | "psr-3" 1219 | ], 1220 | "time": "2019-11-01T11:05:21+00:00" 1221 | }, 1222 | { 1223 | "name": "sebastian/code-unit-reverse-lookup", 1224 | "version": "1.0.1", 1225 | "source": { 1226 | "type": "git", 1227 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1228 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1229 | }, 1230 | "dist": { 1231 | "type": "zip", 1232 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1233 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1234 | "shasum": "" 1235 | }, 1236 | "require": { 1237 | "php": "^5.6 || ^7.0" 1238 | }, 1239 | "require-dev": { 1240 | "phpunit/phpunit": "^5.7 || ^6.0" 1241 | }, 1242 | "type": "library", 1243 | "extra": { 1244 | "branch-alias": { 1245 | "dev-master": "1.0.x-dev" 1246 | } 1247 | }, 1248 | "autoload": { 1249 | "classmap": [ 1250 | "src/" 1251 | ] 1252 | }, 1253 | "notification-url": "https://packagist.org/downloads/", 1254 | "license": [ 1255 | "BSD-3-Clause" 1256 | ], 1257 | "authors": [ 1258 | { 1259 | "name": "Sebastian Bergmann", 1260 | "email": "sebastian@phpunit.de" 1261 | } 1262 | ], 1263 | "description": "Looks up which function or method a line of code belongs to", 1264 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1265 | "time": "2017-03-04T06:30:41+00:00" 1266 | }, 1267 | { 1268 | "name": "sebastian/comparator", 1269 | "version": "3.0.2", 1270 | "source": { 1271 | "type": "git", 1272 | "url": "https://github.com/sebastianbergmann/comparator.git", 1273 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 1274 | }, 1275 | "dist": { 1276 | "type": "zip", 1277 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1278 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1279 | "shasum": "" 1280 | }, 1281 | "require": { 1282 | "php": "^7.1", 1283 | "sebastian/diff": "^3.0", 1284 | "sebastian/exporter": "^3.1" 1285 | }, 1286 | "require-dev": { 1287 | "phpunit/phpunit": "^7.1" 1288 | }, 1289 | "type": "library", 1290 | "extra": { 1291 | "branch-alias": { 1292 | "dev-master": "3.0-dev" 1293 | } 1294 | }, 1295 | "autoload": { 1296 | "classmap": [ 1297 | "src/" 1298 | ] 1299 | }, 1300 | "notification-url": "https://packagist.org/downloads/", 1301 | "license": [ 1302 | "BSD-3-Clause" 1303 | ], 1304 | "authors": [ 1305 | { 1306 | "name": "Jeff Welch", 1307 | "email": "whatthejeff@gmail.com" 1308 | }, 1309 | { 1310 | "name": "Volker Dusch", 1311 | "email": "github@wallbash.com" 1312 | }, 1313 | { 1314 | "name": "Bernhard Schussek", 1315 | "email": "bschussek@2bepublished.at" 1316 | }, 1317 | { 1318 | "name": "Sebastian Bergmann", 1319 | "email": "sebastian@phpunit.de" 1320 | } 1321 | ], 1322 | "description": "Provides the functionality to compare PHP values for equality", 1323 | "homepage": "https://github.com/sebastianbergmann/comparator", 1324 | "keywords": [ 1325 | "comparator", 1326 | "compare", 1327 | "equality" 1328 | ], 1329 | "time": "2018-07-12T15:12:46+00:00" 1330 | }, 1331 | { 1332 | "name": "sebastian/diff", 1333 | "version": "3.0.2", 1334 | "source": { 1335 | "type": "git", 1336 | "url": "https://github.com/sebastianbergmann/diff.git", 1337 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 1338 | }, 1339 | "dist": { 1340 | "type": "zip", 1341 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1342 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1343 | "shasum": "" 1344 | }, 1345 | "require": { 1346 | "php": "^7.1" 1347 | }, 1348 | "require-dev": { 1349 | "phpunit/phpunit": "^7.5 || ^8.0", 1350 | "symfony/process": "^2 || ^3.3 || ^4" 1351 | }, 1352 | "type": "library", 1353 | "extra": { 1354 | "branch-alias": { 1355 | "dev-master": "3.0-dev" 1356 | } 1357 | }, 1358 | "autoload": { 1359 | "classmap": [ 1360 | "src/" 1361 | ] 1362 | }, 1363 | "notification-url": "https://packagist.org/downloads/", 1364 | "license": [ 1365 | "BSD-3-Clause" 1366 | ], 1367 | "authors": [ 1368 | { 1369 | "name": "Kore Nordmann", 1370 | "email": "mail@kore-nordmann.de" 1371 | }, 1372 | { 1373 | "name": "Sebastian Bergmann", 1374 | "email": "sebastian@phpunit.de" 1375 | } 1376 | ], 1377 | "description": "Diff implementation", 1378 | "homepage": "https://github.com/sebastianbergmann/diff", 1379 | "keywords": [ 1380 | "diff", 1381 | "udiff", 1382 | "unidiff", 1383 | "unified diff" 1384 | ], 1385 | "time": "2019-02-04T06:01:07+00:00" 1386 | }, 1387 | { 1388 | "name": "sebastian/environment", 1389 | "version": "4.2.3", 1390 | "source": { 1391 | "type": "git", 1392 | "url": "https://github.com/sebastianbergmann/environment.git", 1393 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" 1394 | }, 1395 | "dist": { 1396 | "type": "zip", 1397 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", 1398 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", 1399 | "shasum": "" 1400 | }, 1401 | "require": { 1402 | "php": "^7.1" 1403 | }, 1404 | "require-dev": { 1405 | "phpunit/phpunit": "^7.5" 1406 | }, 1407 | "suggest": { 1408 | "ext-posix": "*" 1409 | }, 1410 | "type": "library", 1411 | "extra": { 1412 | "branch-alias": { 1413 | "dev-master": "4.2-dev" 1414 | } 1415 | }, 1416 | "autoload": { 1417 | "classmap": [ 1418 | "src/" 1419 | ] 1420 | }, 1421 | "notification-url": "https://packagist.org/downloads/", 1422 | "license": [ 1423 | "BSD-3-Clause" 1424 | ], 1425 | "authors": [ 1426 | { 1427 | "name": "Sebastian Bergmann", 1428 | "email": "sebastian@phpunit.de" 1429 | } 1430 | ], 1431 | "description": "Provides functionality to handle HHVM/PHP environments", 1432 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1433 | "keywords": [ 1434 | "Xdebug", 1435 | "environment", 1436 | "hhvm" 1437 | ], 1438 | "time": "2019-11-20T08:46:58+00:00" 1439 | }, 1440 | { 1441 | "name": "sebastian/exporter", 1442 | "version": "3.1.2", 1443 | "source": { 1444 | "type": "git", 1445 | "url": "https://github.com/sebastianbergmann/exporter.git", 1446 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" 1447 | }, 1448 | "dist": { 1449 | "type": "zip", 1450 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", 1451 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", 1452 | "shasum": "" 1453 | }, 1454 | "require": { 1455 | "php": "^7.0", 1456 | "sebastian/recursion-context": "^3.0" 1457 | }, 1458 | "require-dev": { 1459 | "ext-mbstring": "*", 1460 | "phpunit/phpunit": "^6.0" 1461 | }, 1462 | "type": "library", 1463 | "extra": { 1464 | "branch-alias": { 1465 | "dev-master": "3.1.x-dev" 1466 | } 1467 | }, 1468 | "autoload": { 1469 | "classmap": [ 1470 | "src/" 1471 | ] 1472 | }, 1473 | "notification-url": "https://packagist.org/downloads/", 1474 | "license": [ 1475 | "BSD-3-Clause" 1476 | ], 1477 | "authors": [ 1478 | { 1479 | "name": "Sebastian Bergmann", 1480 | "email": "sebastian@phpunit.de" 1481 | }, 1482 | { 1483 | "name": "Jeff Welch", 1484 | "email": "whatthejeff@gmail.com" 1485 | }, 1486 | { 1487 | "name": "Volker Dusch", 1488 | "email": "github@wallbash.com" 1489 | }, 1490 | { 1491 | "name": "Adam Harvey", 1492 | "email": "aharvey@php.net" 1493 | }, 1494 | { 1495 | "name": "Bernhard Schussek", 1496 | "email": "bschussek@gmail.com" 1497 | } 1498 | ], 1499 | "description": "Provides the functionality to export PHP variables for visualization", 1500 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1501 | "keywords": [ 1502 | "export", 1503 | "exporter" 1504 | ], 1505 | "time": "2019-09-14T09:02:43+00:00" 1506 | }, 1507 | { 1508 | "name": "sebastian/global-state", 1509 | "version": "3.0.0", 1510 | "source": { 1511 | "type": "git", 1512 | "url": "https://github.com/sebastianbergmann/global-state.git", 1513 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" 1514 | }, 1515 | "dist": { 1516 | "type": "zip", 1517 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", 1518 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", 1519 | "shasum": "" 1520 | }, 1521 | "require": { 1522 | "php": "^7.2", 1523 | "sebastian/object-reflector": "^1.1.1", 1524 | "sebastian/recursion-context": "^3.0" 1525 | }, 1526 | "require-dev": { 1527 | "ext-dom": "*", 1528 | "phpunit/phpunit": "^8.0" 1529 | }, 1530 | "suggest": { 1531 | "ext-uopz": "*" 1532 | }, 1533 | "type": "library", 1534 | "extra": { 1535 | "branch-alias": { 1536 | "dev-master": "3.0-dev" 1537 | } 1538 | }, 1539 | "autoload": { 1540 | "classmap": [ 1541 | "src/" 1542 | ] 1543 | }, 1544 | "notification-url": "https://packagist.org/downloads/", 1545 | "license": [ 1546 | "BSD-3-Clause" 1547 | ], 1548 | "authors": [ 1549 | { 1550 | "name": "Sebastian Bergmann", 1551 | "email": "sebastian@phpunit.de" 1552 | } 1553 | ], 1554 | "description": "Snapshotting of global state", 1555 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1556 | "keywords": [ 1557 | "global state" 1558 | ], 1559 | "time": "2019-02-01T05:30:01+00:00" 1560 | }, 1561 | { 1562 | "name": "sebastian/object-enumerator", 1563 | "version": "3.0.3", 1564 | "source": { 1565 | "type": "git", 1566 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1567 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1568 | }, 1569 | "dist": { 1570 | "type": "zip", 1571 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1572 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1573 | "shasum": "" 1574 | }, 1575 | "require": { 1576 | "php": "^7.0", 1577 | "sebastian/object-reflector": "^1.1.1", 1578 | "sebastian/recursion-context": "^3.0" 1579 | }, 1580 | "require-dev": { 1581 | "phpunit/phpunit": "^6.0" 1582 | }, 1583 | "type": "library", 1584 | "extra": { 1585 | "branch-alias": { 1586 | "dev-master": "3.0.x-dev" 1587 | } 1588 | }, 1589 | "autoload": { 1590 | "classmap": [ 1591 | "src/" 1592 | ] 1593 | }, 1594 | "notification-url": "https://packagist.org/downloads/", 1595 | "license": [ 1596 | "BSD-3-Clause" 1597 | ], 1598 | "authors": [ 1599 | { 1600 | "name": "Sebastian Bergmann", 1601 | "email": "sebastian@phpunit.de" 1602 | } 1603 | ], 1604 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1605 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1606 | "time": "2017-08-03T12:35:26+00:00" 1607 | }, 1608 | { 1609 | "name": "sebastian/object-reflector", 1610 | "version": "1.1.1", 1611 | "source": { 1612 | "type": "git", 1613 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1614 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1615 | }, 1616 | "dist": { 1617 | "type": "zip", 1618 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1619 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1620 | "shasum": "" 1621 | }, 1622 | "require": { 1623 | "php": "^7.0" 1624 | }, 1625 | "require-dev": { 1626 | "phpunit/phpunit": "^6.0" 1627 | }, 1628 | "type": "library", 1629 | "extra": { 1630 | "branch-alias": { 1631 | "dev-master": "1.1-dev" 1632 | } 1633 | }, 1634 | "autoload": { 1635 | "classmap": [ 1636 | "src/" 1637 | ] 1638 | }, 1639 | "notification-url": "https://packagist.org/downloads/", 1640 | "license": [ 1641 | "BSD-3-Clause" 1642 | ], 1643 | "authors": [ 1644 | { 1645 | "name": "Sebastian Bergmann", 1646 | "email": "sebastian@phpunit.de" 1647 | } 1648 | ], 1649 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1650 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1651 | "time": "2017-03-29T09:07:27+00:00" 1652 | }, 1653 | { 1654 | "name": "sebastian/recursion-context", 1655 | "version": "3.0.0", 1656 | "source": { 1657 | "type": "git", 1658 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1659 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1660 | }, 1661 | "dist": { 1662 | "type": "zip", 1663 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1664 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1665 | "shasum": "" 1666 | }, 1667 | "require": { 1668 | "php": "^7.0" 1669 | }, 1670 | "require-dev": { 1671 | "phpunit/phpunit": "^6.0" 1672 | }, 1673 | "type": "library", 1674 | "extra": { 1675 | "branch-alias": { 1676 | "dev-master": "3.0.x-dev" 1677 | } 1678 | }, 1679 | "autoload": { 1680 | "classmap": [ 1681 | "src/" 1682 | ] 1683 | }, 1684 | "notification-url": "https://packagist.org/downloads/", 1685 | "license": [ 1686 | "BSD-3-Clause" 1687 | ], 1688 | "authors": [ 1689 | { 1690 | "name": "Jeff Welch", 1691 | "email": "whatthejeff@gmail.com" 1692 | }, 1693 | { 1694 | "name": "Sebastian Bergmann", 1695 | "email": "sebastian@phpunit.de" 1696 | }, 1697 | { 1698 | "name": "Adam Harvey", 1699 | "email": "aharvey@php.net" 1700 | } 1701 | ], 1702 | "description": "Provides functionality to recursively process PHP variables", 1703 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1704 | "time": "2017-03-03T06:23:57+00:00" 1705 | }, 1706 | { 1707 | "name": "sebastian/resource-operations", 1708 | "version": "2.0.1", 1709 | "source": { 1710 | "type": "git", 1711 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1712 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 1713 | }, 1714 | "dist": { 1715 | "type": "zip", 1716 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1717 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1718 | "shasum": "" 1719 | }, 1720 | "require": { 1721 | "php": "^7.1" 1722 | }, 1723 | "type": "library", 1724 | "extra": { 1725 | "branch-alias": { 1726 | "dev-master": "2.0-dev" 1727 | } 1728 | }, 1729 | "autoload": { 1730 | "classmap": [ 1731 | "src/" 1732 | ] 1733 | }, 1734 | "notification-url": "https://packagist.org/downloads/", 1735 | "license": [ 1736 | "BSD-3-Clause" 1737 | ], 1738 | "authors": [ 1739 | { 1740 | "name": "Sebastian Bergmann", 1741 | "email": "sebastian@phpunit.de" 1742 | } 1743 | ], 1744 | "description": "Provides a list of PHP built-in functions that operate on resources", 1745 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1746 | "time": "2018-10-04T04:07:39+00:00" 1747 | }, 1748 | { 1749 | "name": "sebastian/type", 1750 | "version": "1.1.3", 1751 | "source": { 1752 | "type": "git", 1753 | "url": "https://github.com/sebastianbergmann/type.git", 1754 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" 1755 | }, 1756 | "dist": { 1757 | "type": "zip", 1758 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", 1759 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", 1760 | "shasum": "" 1761 | }, 1762 | "require": { 1763 | "php": "^7.2" 1764 | }, 1765 | "require-dev": { 1766 | "phpunit/phpunit": "^8.2" 1767 | }, 1768 | "type": "library", 1769 | "extra": { 1770 | "branch-alias": { 1771 | "dev-master": "1.1-dev" 1772 | } 1773 | }, 1774 | "autoload": { 1775 | "classmap": [ 1776 | "src/" 1777 | ] 1778 | }, 1779 | "notification-url": "https://packagist.org/downloads/", 1780 | "license": [ 1781 | "BSD-3-Clause" 1782 | ], 1783 | "authors": [ 1784 | { 1785 | "name": "Sebastian Bergmann", 1786 | "email": "sebastian@phpunit.de", 1787 | "role": "lead" 1788 | } 1789 | ], 1790 | "description": "Collection of value objects that represent the types of the PHP type system", 1791 | "homepage": "https://github.com/sebastianbergmann/type", 1792 | "time": "2019-07-02T08:10:15+00:00" 1793 | }, 1794 | { 1795 | "name": "sebastian/version", 1796 | "version": "2.0.1", 1797 | "source": { 1798 | "type": "git", 1799 | "url": "https://github.com/sebastianbergmann/version.git", 1800 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1801 | }, 1802 | "dist": { 1803 | "type": "zip", 1804 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1805 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1806 | "shasum": "" 1807 | }, 1808 | "require": { 1809 | "php": ">=5.6" 1810 | }, 1811 | "type": "library", 1812 | "extra": { 1813 | "branch-alias": { 1814 | "dev-master": "2.0.x-dev" 1815 | } 1816 | }, 1817 | "autoload": { 1818 | "classmap": [ 1819 | "src/" 1820 | ] 1821 | }, 1822 | "notification-url": "https://packagist.org/downloads/", 1823 | "license": [ 1824 | "BSD-3-Clause" 1825 | ], 1826 | "authors": [ 1827 | { 1828 | "name": "Sebastian Bergmann", 1829 | "email": "sebastian@phpunit.de", 1830 | "role": "lead" 1831 | } 1832 | ], 1833 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1834 | "homepage": "https://github.com/sebastianbergmann/version", 1835 | "time": "2016-10-03T07:35:21+00:00" 1836 | }, 1837 | { 1838 | "name": "squizlabs/php_codesniffer", 1839 | "version": "3.5.2", 1840 | "source": { 1841 | "type": "git", 1842 | "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", 1843 | "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7" 1844 | }, 1845 | "dist": { 1846 | "type": "zip", 1847 | "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/65b12cdeaaa6cd276d4c3033a95b9b88b12701e7", 1848 | "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7", 1849 | "shasum": "" 1850 | }, 1851 | "require": { 1852 | "ext-simplexml": "*", 1853 | "ext-tokenizer": "*", 1854 | "ext-xmlwriter": "*", 1855 | "php": ">=5.4.0" 1856 | }, 1857 | "require-dev": { 1858 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" 1859 | }, 1860 | "bin": [ 1861 | "bin/phpcs", 1862 | "bin/phpcbf" 1863 | ], 1864 | "type": "library", 1865 | "extra": { 1866 | "branch-alias": { 1867 | "dev-master": "3.x-dev" 1868 | } 1869 | }, 1870 | "notification-url": "https://packagist.org/downloads/", 1871 | "license": [ 1872 | "BSD-3-Clause" 1873 | ], 1874 | "authors": [ 1875 | { 1876 | "name": "Greg Sherwood", 1877 | "role": "lead" 1878 | } 1879 | ], 1880 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 1881 | "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", 1882 | "keywords": [ 1883 | "phpcs", 1884 | "standards" 1885 | ], 1886 | "time": "2019-10-28T04:36:32+00:00" 1887 | }, 1888 | { 1889 | "name": "symfony/config", 1890 | "version": "v5.0.1", 1891 | "source": { 1892 | "type": "git", 1893 | "url": "https://github.com/symfony/config.git", 1894 | "reference": "c0773efcc2c940ffbc4c34a0dba2836f2cf6dc9c" 1895 | }, 1896 | "dist": { 1897 | "type": "zip", 1898 | "url": "https://api.github.com/repos/symfony/config/zipball/c0773efcc2c940ffbc4c34a0dba2836f2cf6dc9c", 1899 | "reference": "c0773efcc2c940ffbc4c34a0dba2836f2cf6dc9c", 1900 | "shasum": "" 1901 | }, 1902 | "require": { 1903 | "php": "^7.2.5", 1904 | "symfony/filesystem": "^4.4|^5.0", 1905 | "symfony/polyfill-ctype": "~1.8" 1906 | }, 1907 | "conflict": { 1908 | "symfony/finder": "<4.4" 1909 | }, 1910 | "require-dev": { 1911 | "symfony/event-dispatcher": "^4.4|^5.0", 1912 | "symfony/finder": "^4.4|^5.0", 1913 | "symfony/messenger": "^4.4|^5.0", 1914 | "symfony/service-contracts": "^1.1|^2", 1915 | "symfony/yaml": "^4.4|^5.0" 1916 | }, 1917 | "suggest": { 1918 | "symfony/yaml": "To use the yaml reference dumper" 1919 | }, 1920 | "type": "library", 1921 | "extra": { 1922 | "branch-alias": { 1923 | "dev-master": "5.0-dev" 1924 | } 1925 | }, 1926 | "autoload": { 1927 | "psr-4": { 1928 | "Symfony\\Component\\Config\\": "" 1929 | }, 1930 | "exclude-from-classmap": [ 1931 | "/Tests/" 1932 | ] 1933 | }, 1934 | "notification-url": "https://packagist.org/downloads/", 1935 | "license": [ 1936 | "MIT" 1937 | ], 1938 | "authors": [ 1939 | { 1940 | "name": "Fabien Potencier", 1941 | "email": "fabien@symfony.com" 1942 | }, 1943 | { 1944 | "name": "Symfony Community", 1945 | "homepage": "https://symfony.com/contributors" 1946 | } 1947 | ], 1948 | "description": "Symfony Config Component", 1949 | "homepage": "https://symfony.com", 1950 | "time": "2019-12-01T10:51:15+00:00" 1951 | }, 1952 | { 1953 | "name": "symfony/console", 1954 | "version": "v5.0.1", 1955 | "source": { 1956 | "type": "git", 1957 | "url": "https://github.com/symfony/console.git", 1958 | "reference": "dae5ef273d700771168ab889d9f8a19b2d206656" 1959 | }, 1960 | "dist": { 1961 | "type": "zip", 1962 | "url": "https://api.github.com/repos/symfony/console/zipball/dae5ef273d700771168ab889d9f8a19b2d206656", 1963 | "reference": "dae5ef273d700771168ab889d9f8a19b2d206656", 1964 | "shasum": "" 1965 | }, 1966 | "require": { 1967 | "php": "^7.2.5", 1968 | "symfony/polyfill-mbstring": "~1.0", 1969 | "symfony/polyfill-php73": "^1.8", 1970 | "symfony/service-contracts": "^1.1|^2" 1971 | }, 1972 | "conflict": { 1973 | "symfony/dependency-injection": "<4.4", 1974 | "symfony/event-dispatcher": "<4.4", 1975 | "symfony/lock": "<4.4", 1976 | "symfony/process": "<4.4" 1977 | }, 1978 | "provide": { 1979 | "psr/log-implementation": "1.0" 1980 | }, 1981 | "require-dev": { 1982 | "psr/log": "~1.0", 1983 | "symfony/config": "^4.4|^5.0", 1984 | "symfony/dependency-injection": "^4.4|^5.0", 1985 | "symfony/event-dispatcher": "^4.4|^5.0", 1986 | "symfony/lock": "^4.4|^5.0", 1987 | "symfony/process": "^4.4|^5.0", 1988 | "symfony/var-dumper": "^4.4|^5.0" 1989 | }, 1990 | "suggest": { 1991 | "psr/log": "For using the console logger", 1992 | "symfony/event-dispatcher": "", 1993 | "symfony/lock": "", 1994 | "symfony/process": "" 1995 | }, 1996 | "type": "library", 1997 | "extra": { 1998 | "branch-alias": { 1999 | "dev-master": "5.0-dev" 2000 | } 2001 | }, 2002 | "autoload": { 2003 | "psr-4": { 2004 | "Symfony\\Component\\Console\\": "" 2005 | }, 2006 | "exclude-from-classmap": [ 2007 | "/Tests/" 2008 | ] 2009 | }, 2010 | "notification-url": "https://packagist.org/downloads/", 2011 | "license": [ 2012 | "MIT" 2013 | ], 2014 | "authors": [ 2015 | { 2016 | "name": "Fabien Potencier", 2017 | "email": "fabien@symfony.com" 2018 | }, 2019 | { 2020 | "name": "Symfony Community", 2021 | "homepage": "https://symfony.com/contributors" 2022 | } 2023 | ], 2024 | "description": "Symfony Console Component", 2025 | "homepage": "https://symfony.com", 2026 | "time": "2019-12-01T10:51:15+00:00" 2027 | }, 2028 | { 2029 | "name": "symfony/filesystem", 2030 | "version": "v5.0.1", 2031 | "source": { 2032 | "type": "git", 2033 | "url": "https://github.com/symfony/filesystem.git", 2034 | "reference": "1d71f670bc5a07b9ccc97dc44f932177a322d4e6" 2035 | }, 2036 | "dist": { 2037 | "type": "zip", 2038 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/1d71f670bc5a07b9ccc97dc44f932177a322d4e6", 2039 | "reference": "1d71f670bc5a07b9ccc97dc44f932177a322d4e6", 2040 | "shasum": "" 2041 | }, 2042 | "require": { 2043 | "php": "^7.2.5", 2044 | "symfony/polyfill-ctype": "~1.8" 2045 | }, 2046 | "type": "library", 2047 | "extra": { 2048 | "branch-alias": { 2049 | "dev-master": "5.0-dev" 2050 | } 2051 | }, 2052 | "autoload": { 2053 | "psr-4": { 2054 | "Symfony\\Component\\Filesystem\\": "" 2055 | }, 2056 | "exclude-from-classmap": [ 2057 | "/Tests/" 2058 | ] 2059 | }, 2060 | "notification-url": "https://packagist.org/downloads/", 2061 | "license": [ 2062 | "MIT" 2063 | ], 2064 | "authors": [ 2065 | { 2066 | "name": "Fabien Potencier", 2067 | "email": "fabien@symfony.com" 2068 | }, 2069 | { 2070 | "name": "Symfony Community", 2071 | "homepage": "https://symfony.com/contributors" 2072 | } 2073 | ], 2074 | "description": "Symfony Filesystem Component", 2075 | "homepage": "https://symfony.com", 2076 | "time": "2019-11-26T23:25:11+00:00" 2077 | }, 2078 | { 2079 | "name": "symfony/polyfill-ctype", 2080 | "version": "v1.13.1", 2081 | "source": { 2082 | "type": "git", 2083 | "url": "https://github.com/symfony/polyfill-ctype.git", 2084 | "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" 2085 | }, 2086 | "dist": { 2087 | "type": "zip", 2088 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", 2089 | "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", 2090 | "shasum": "" 2091 | }, 2092 | "require": { 2093 | "php": ">=5.3.3" 2094 | }, 2095 | "suggest": { 2096 | "ext-ctype": "For best performance" 2097 | }, 2098 | "type": "library", 2099 | "extra": { 2100 | "branch-alias": { 2101 | "dev-master": "1.13-dev" 2102 | } 2103 | }, 2104 | "autoload": { 2105 | "psr-4": { 2106 | "Symfony\\Polyfill\\Ctype\\": "" 2107 | }, 2108 | "files": [ 2109 | "bootstrap.php" 2110 | ] 2111 | }, 2112 | "notification-url": "https://packagist.org/downloads/", 2113 | "license": [ 2114 | "MIT" 2115 | ], 2116 | "authors": [ 2117 | { 2118 | "name": "Gert de Pagter", 2119 | "email": "BackEndTea@gmail.com" 2120 | }, 2121 | { 2122 | "name": "Symfony Community", 2123 | "homepage": "https://symfony.com/contributors" 2124 | } 2125 | ], 2126 | "description": "Symfony polyfill for ctype functions", 2127 | "homepage": "https://symfony.com", 2128 | "keywords": [ 2129 | "compatibility", 2130 | "ctype", 2131 | "polyfill", 2132 | "portable" 2133 | ], 2134 | "time": "2019-11-27T13:56:44+00:00" 2135 | }, 2136 | { 2137 | "name": "symfony/polyfill-mbstring", 2138 | "version": "v1.13.1", 2139 | "source": { 2140 | "type": "git", 2141 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2142 | "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" 2143 | }, 2144 | "dist": { 2145 | "type": "zip", 2146 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", 2147 | "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", 2148 | "shasum": "" 2149 | }, 2150 | "require": { 2151 | "php": ">=5.3.3" 2152 | }, 2153 | "suggest": { 2154 | "ext-mbstring": "For best performance" 2155 | }, 2156 | "type": "library", 2157 | "extra": { 2158 | "branch-alias": { 2159 | "dev-master": "1.13-dev" 2160 | } 2161 | }, 2162 | "autoload": { 2163 | "psr-4": { 2164 | "Symfony\\Polyfill\\Mbstring\\": "" 2165 | }, 2166 | "files": [ 2167 | "bootstrap.php" 2168 | ] 2169 | }, 2170 | "notification-url": "https://packagist.org/downloads/", 2171 | "license": [ 2172 | "MIT" 2173 | ], 2174 | "authors": [ 2175 | { 2176 | "name": "Nicolas Grekas", 2177 | "email": "p@tchwork.com" 2178 | }, 2179 | { 2180 | "name": "Symfony Community", 2181 | "homepage": "https://symfony.com/contributors" 2182 | } 2183 | ], 2184 | "description": "Symfony polyfill for the Mbstring extension", 2185 | "homepage": "https://symfony.com", 2186 | "keywords": [ 2187 | "compatibility", 2188 | "mbstring", 2189 | "polyfill", 2190 | "portable", 2191 | "shim" 2192 | ], 2193 | "time": "2019-11-27T14:18:11+00:00" 2194 | }, 2195 | { 2196 | "name": "symfony/polyfill-php73", 2197 | "version": "v1.13.1", 2198 | "source": { 2199 | "type": "git", 2200 | "url": "https://github.com/symfony/polyfill-php73.git", 2201 | "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f" 2202 | }, 2203 | "dist": { 2204 | "type": "zip", 2205 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f", 2206 | "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f", 2207 | "shasum": "" 2208 | }, 2209 | "require": { 2210 | "php": ">=5.3.3" 2211 | }, 2212 | "type": "library", 2213 | "extra": { 2214 | "branch-alias": { 2215 | "dev-master": "1.13-dev" 2216 | } 2217 | }, 2218 | "autoload": { 2219 | "psr-4": { 2220 | "Symfony\\Polyfill\\Php73\\": "" 2221 | }, 2222 | "files": [ 2223 | "bootstrap.php" 2224 | ], 2225 | "classmap": [ 2226 | "Resources/stubs" 2227 | ] 2228 | }, 2229 | "notification-url": "https://packagist.org/downloads/", 2230 | "license": [ 2231 | "MIT" 2232 | ], 2233 | "authors": [ 2234 | { 2235 | "name": "Nicolas Grekas", 2236 | "email": "p@tchwork.com" 2237 | }, 2238 | { 2239 | "name": "Symfony Community", 2240 | "homepage": "https://symfony.com/contributors" 2241 | } 2242 | ], 2243 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 2244 | "homepage": "https://symfony.com", 2245 | "keywords": [ 2246 | "compatibility", 2247 | "polyfill", 2248 | "portable", 2249 | "shim" 2250 | ], 2251 | "time": "2019-11-27T16:25:15+00:00" 2252 | }, 2253 | { 2254 | "name": "symfony/service-contracts", 2255 | "version": "v2.0.1", 2256 | "source": { 2257 | "type": "git", 2258 | "url": "https://github.com/symfony/service-contracts.git", 2259 | "reference": "144c5e51266b281231e947b51223ba14acf1a749" 2260 | }, 2261 | "dist": { 2262 | "type": "zip", 2263 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749", 2264 | "reference": "144c5e51266b281231e947b51223ba14acf1a749", 2265 | "shasum": "" 2266 | }, 2267 | "require": { 2268 | "php": "^7.2.5", 2269 | "psr/container": "^1.0" 2270 | }, 2271 | "suggest": { 2272 | "symfony/service-implementation": "" 2273 | }, 2274 | "type": "library", 2275 | "extra": { 2276 | "branch-alias": { 2277 | "dev-master": "2.0-dev" 2278 | } 2279 | }, 2280 | "autoload": { 2281 | "psr-4": { 2282 | "Symfony\\Contracts\\Service\\": "" 2283 | } 2284 | }, 2285 | "notification-url": "https://packagist.org/downloads/", 2286 | "license": [ 2287 | "MIT" 2288 | ], 2289 | "authors": [ 2290 | { 2291 | "name": "Nicolas Grekas", 2292 | "email": "p@tchwork.com" 2293 | }, 2294 | { 2295 | "name": "Symfony Community", 2296 | "homepage": "https://symfony.com/contributors" 2297 | } 2298 | ], 2299 | "description": "Generic abstractions related to writing services", 2300 | "homepage": "https://symfony.com", 2301 | "keywords": [ 2302 | "abstractions", 2303 | "contracts", 2304 | "decoupling", 2305 | "interfaces", 2306 | "interoperability", 2307 | "standards" 2308 | ], 2309 | "time": "2019-11-18T17:27:11+00:00" 2310 | }, 2311 | { 2312 | "name": "symfony/stopwatch", 2313 | "version": "v5.0.1", 2314 | "source": { 2315 | "type": "git", 2316 | "url": "https://github.com/symfony/stopwatch.git", 2317 | "reference": "d410282956706e0b08681a5527447a8e6b6f421e" 2318 | }, 2319 | "dist": { 2320 | "type": "zip", 2321 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/d410282956706e0b08681a5527447a8e6b6f421e", 2322 | "reference": "d410282956706e0b08681a5527447a8e6b6f421e", 2323 | "shasum": "" 2324 | }, 2325 | "require": { 2326 | "php": "^7.2.5", 2327 | "symfony/service-contracts": "^1.0|^2" 2328 | }, 2329 | "type": "library", 2330 | "extra": { 2331 | "branch-alias": { 2332 | "dev-master": "5.0-dev" 2333 | } 2334 | }, 2335 | "autoload": { 2336 | "psr-4": { 2337 | "Symfony\\Component\\Stopwatch\\": "" 2338 | }, 2339 | "exclude-from-classmap": [ 2340 | "/Tests/" 2341 | ] 2342 | }, 2343 | "notification-url": "https://packagist.org/downloads/", 2344 | "license": [ 2345 | "MIT" 2346 | ], 2347 | "authors": [ 2348 | { 2349 | "name": "Fabien Potencier", 2350 | "email": "fabien@symfony.com" 2351 | }, 2352 | { 2353 | "name": "Symfony Community", 2354 | "homepage": "https://symfony.com/contributors" 2355 | } 2356 | ], 2357 | "description": "Symfony Stopwatch Component", 2358 | "homepage": "https://symfony.com", 2359 | "time": "2019-11-18T17:27:11+00:00" 2360 | }, 2361 | { 2362 | "name": "symfony/yaml", 2363 | "version": "v5.0.1", 2364 | "source": { 2365 | "type": "git", 2366 | "url": "https://github.com/symfony/yaml.git", 2367 | "reference": "51b684480184fa767b97e28eaca67664e48dd3e9" 2368 | }, 2369 | "dist": { 2370 | "type": "zip", 2371 | "url": "https://api.github.com/repos/symfony/yaml/zipball/51b684480184fa767b97e28eaca67664e48dd3e9", 2372 | "reference": "51b684480184fa767b97e28eaca67664e48dd3e9", 2373 | "shasum": "" 2374 | }, 2375 | "require": { 2376 | "php": "^7.2.5", 2377 | "symfony/polyfill-ctype": "~1.8" 2378 | }, 2379 | "conflict": { 2380 | "symfony/console": "<4.4" 2381 | }, 2382 | "require-dev": { 2383 | "symfony/console": "^4.4|^5.0" 2384 | }, 2385 | "suggest": { 2386 | "symfony/console": "For validating YAML files using the lint command" 2387 | }, 2388 | "type": "library", 2389 | "extra": { 2390 | "branch-alias": { 2391 | "dev-master": "5.0-dev" 2392 | } 2393 | }, 2394 | "autoload": { 2395 | "psr-4": { 2396 | "Symfony\\Component\\Yaml\\": "" 2397 | }, 2398 | "exclude-from-classmap": [ 2399 | "/Tests/" 2400 | ] 2401 | }, 2402 | "notification-url": "https://packagist.org/downloads/", 2403 | "license": [ 2404 | "MIT" 2405 | ], 2406 | "authors": [ 2407 | { 2408 | "name": "Fabien Potencier", 2409 | "email": "fabien@symfony.com" 2410 | }, 2411 | { 2412 | "name": "Symfony Community", 2413 | "homepage": "https://symfony.com/contributors" 2414 | } 2415 | ], 2416 | "description": "Symfony Yaml Component", 2417 | "homepage": "https://symfony.com", 2418 | "time": "2019-11-18T17:27:11+00:00" 2419 | }, 2420 | { 2421 | "name": "theseer/tokenizer", 2422 | "version": "1.1.3", 2423 | "source": { 2424 | "type": "git", 2425 | "url": "https://github.com/theseer/tokenizer.git", 2426 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" 2427 | }, 2428 | "dist": { 2429 | "type": "zip", 2430 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 2431 | "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", 2432 | "shasum": "" 2433 | }, 2434 | "require": { 2435 | "ext-dom": "*", 2436 | "ext-tokenizer": "*", 2437 | "ext-xmlwriter": "*", 2438 | "php": "^7.0" 2439 | }, 2440 | "type": "library", 2441 | "autoload": { 2442 | "classmap": [ 2443 | "src/" 2444 | ] 2445 | }, 2446 | "notification-url": "https://packagist.org/downloads/", 2447 | "license": [ 2448 | "BSD-3-Clause" 2449 | ], 2450 | "authors": [ 2451 | { 2452 | "name": "Arne Blankerts", 2453 | "email": "arne@blankerts.de", 2454 | "role": "Developer" 2455 | } 2456 | ], 2457 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2458 | "time": "2019-06-13T22:48:21+00:00" 2459 | }, 2460 | { 2461 | "name": "webmozart/assert", 2462 | "version": "1.6.0", 2463 | "source": { 2464 | "type": "git", 2465 | "url": "https://github.com/webmozart/assert.git", 2466 | "reference": "573381c0a64f155a0d9a23f4b0c797194805b925" 2467 | }, 2468 | "dist": { 2469 | "type": "zip", 2470 | "url": "https://api.github.com/repos/webmozart/assert/zipball/573381c0a64f155a0d9a23f4b0c797194805b925", 2471 | "reference": "573381c0a64f155a0d9a23f4b0c797194805b925", 2472 | "shasum": "" 2473 | }, 2474 | "require": { 2475 | "php": "^5.3.3 || ^7.0", 2476 | "symfony/polyfill-ctype": "^1.8" 2477 | }, 2478 | "conflict": { 2479 | "vimeo/psalm": "<3.6.0" 2480 | }, 2481 | "require-dev": { 2482 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 2483 | }, 2484 | "type": "library", 2485 | "autoload": { 2486 | "psr-4": { 2487 | "Webmozart\\Assert\\": "src/" 2488 | } 2489 | }, 2490 | "notification-url": "https://packagist.org/downloads/", 2491 | "license": [ 2492 | "MIT" 2493 | ], 2494 | "authors": [ 2495 | { 2496 | "name": "Bernhard Schussek", 2497 | "email": "bschussek@gmail.com" 2498 | } 2499 | ], 2500 | "description": "Assertions to validate method input/output with nice error messages.", 2501 | "keywords": [ 2502 | "assert", 2503 | "check", 2504 | "validate" 2505 | ], 2506 | "time": "2019-11-24T13:36:37+00:00" 2507 | } 2508 | ], 2509 | "aliases": [], 2510 | "minimum-stability": "stable", 2511 | "stability-flags": [], 2512 | "prefer-stable": false, 2513 | "prefer-lowest": false, 2514 | "platform": [], 2515 | "platform-dev": [] 2516 | } 2517 | -------------------------------------------------------------------------------- /coverage.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /phpcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Oh See Software PHPCS config. 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | ./tests 13 | 14 | 15 | 16 | 17 | src 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/Client.php: -------------------------------------------------------------------------------- 1 | setCaddyHost($caddyHost); 16 | $this->setHeaders($headers); 17 | } 18 | 19 | /** 20 | * Sets the Caddy host (base url). 21 | * 22 | * @param string $caddyHost 23 | * @return Client 24 | */ 25 | public function setCaddyHost(string $caddyHost) 26 | { 27 | $this->caddyHost = $caddyHost; 28 | return $this; 29 | } 30 | 31 | /** 32 | * Sets the headers. 33 | * 34 | * @param string $headers 35 | * @return Client 36 | */ 37 | public function setHeaders(array $headers = []) 38 | { 39 | $this->headers = $headers; 40 | return $this; 41 | } 42 | 43 | /** 44 | * Creates a new Request instance. 45 | * 46 | * @return Request 47 | */ 48 | public function request(): Request 49 | { 50 | return new Request($this->caddyHost, $this->headers); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/Request.php: -------------------------------------------------------------------------------- 1 | http = new Client([ 18 | 'base_uri' => $caddyHost 19 | ]); 20 | 21 | $this->options = [ 22 | 'http_errors' => false, 23 | 'headers' => $headers 24 | ]; 25 | } 26 | 27 | /** 28 | * Sends a GET request. 29 | * 30 | * @return void 31 | */ 32 | public function get(): Response 33 | { 34 | return $this->sendRequest('GET'); 35 | } 36 | 37 | /** 38 | * Adds a new host. 39 | * 40 | * @param string $host 41 | * @return Response 42 | */ 43 | public function addHost(string $host): Response 44 | { 45 | $this->uri .= '/host'; 46 | return $this->sendRequest('POST', $host); 47 | } 48 | 49 | /** 50 | * Adds the http route to the uri. 51 | * 52 | * @return Request 53 | */ 54 | public function http() 55 | { 56 | $this->uri .= '/apps/http'; 57 | return $this; 58 | } 59 | 60 | /** 61 | * Sets the server for the request. 62 | * 63 | * @param string $server 64 | * @return Request 65 | */ 66 | public function server(string $server) 67 | { 68 | $this->uri .= "/servers/{$server}"; 69 | return $this; 70 | } 71 | 72 | /** 73 | * Sets the route index for the request. 74 | * 75 | * @param int $routeIndex 76 | * @return Request 77 | */ 78 | public function route(int $routeIndex) 79 | { 80 | $this->uri .= "/routes/{$routeIndex}"; 81 | return $this; 82 | } 83 | 84 | /** 85 | * Sets the match index for the request. 86 | * 87 | * @param int $match 88 | * @return Request 89 | */ 90 | public function match(int $matchIndex) 91 | { 92 | $this->uri .= "/match/{$matchIndex}"; 93 | return $this; 94 | } 95 | 96 | /** 97 | * Sends the configured request. 98 | * 99 | * @param string $method 100 | * @param mixed $body 101 | * @return Response 102 | */ 103 | public function sendRequest(string $method, $body = null): Response 104 | { 105 | if ($body) { 106 | $this->options['json'] = $body; 107 | } 108 | 109 | $response = $this->http->request($method, $this->uri, $this->options); 110 | 111 | return new Response($response); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /src/Response.php: -------------------------------------------------------------------------------- 1 | response = $response; 15 | } 16 | 17 | /** 18 | * Returns the response body as a string. 19 | * 20 | * @return string 21 | */ 22 | public function getBody() 23 | { 24 | return $this->response->getBody()->getContents(); 25 | } 26 | 27 | /** 28 | * Returns a boolean indicating if the request was successful. 29 | * 30 | * @return boolean 31 | */ 32 | public function isSuccessful() 33 | { 34 | return in_array($this->response->getStatusCode(), [200, 201]); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /tests/ClientTest.php: -------------------------------------------------------------------------------- 1 | assertEquals('localhost:2019', $client->caddyHost); 16 | } 17 | 18 | /** @test */ 19 | public function it_can_be_initialized_with_custom_caddy_host() 20 | { 21 | $client = new Client('1.2.3.4:2019'); 22 | $this->assertEquals('1.2.3.4:2019', $client->caddyHost); 23 | } 24 | 25 | /** @test */ 26 | public function it_can_be_initialized_with_custom_headers() 27 | { 28 | $client = new Client('localhost:2019', [ 29 | 'Origin' => 'abc1234' 30 | ]); 31 | $this->assertEquals([ 32 | 'Origin' => 'abc1234' 33 | ], $client->headers); 34 | } 35 | 36 | /** @test */ 37 | public function it_creates_new_request_instance() 38 | { 39 | $client = new Client(); 40 | $this->assertInstanceOf(Request::class, $client->request()); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /tests/RequestTest.php: -------------------------------------------------------------------------------- 1 | getMockBuilder(GuzzleHttpClient::class); 16 | $this->mock = $mockBuilder->setMethods(['request'])->getMock(); 17 | 18 | $this->request = new Request('localhost:2019'); 19 | $this->request->http = $this->mock; 20 | } 21 | 22 | /** @test */ 23 | public function it_sets_http_uri() 24 | { 25 | $this->request->http(); 26 | $this->assertEquals('/config/apps/http', $this->request->uri); 27 | } 28 | 29 | /** @test */ 30 | public function it_sets_server_uri() 31 | { 32 | $this->request->server('example'); 33 | $this->assertEquals('/config/servers/example', $this->request->uri); 34 | } 35 | 36 | /** @test */ 37 | public function it_sets_route_uri() 38 | { 39 | $this->request->route(0); 40 | $this->assertEquals('/config/routes/0', $this->request->uri); 41 | } 42 | 43 | /** @test */ 44 | public function it_sets_match_uri() 45 | { 46 | $this->request->match(0); 47 | $this->assertEquals('/config/match/0', $this->request->uri); 48 | } 49 | 50 | /** @test */ 51 | public function it_sets_base_uri_when_creating_http_client() 52 | { 53 | // Given 54 | $this->request = new Request('example.com:443'); 55 | 56 | // When 57 | $config = $this->request->http->getConfig('base_uri'); 58 | 59 | // Then 60 | $this->assertEquals('example.com', $config->getHost()); 61 | $this->assertEquals(443, $config->getPort()); 62 | } 63 | 64 | /** @test */ 65 | public function it_sends_request_to_get_current_configuration() 66 | { 67 | // Given 68 | $this->mock->expects($this->once()) 69 | ->method('request') 70 | ->with('GET', '/config/apps/http') 71 | ->willReturn(new GuzzleHttpResponse(200)); 72 | 73 | // When 74 | $response = $this->request->http()->get(); 75 | 76 | // Then 77 | $this->assertInstanceOf(Response::class, $response); 78 | } 79 | 80 | /** @test */ 81 | public function it_adds_origin_header_to_request() 82 | { 83 | // Given 84 | $this->request = new Request('localhost:2019', [ 85 | 'Origin' => 'abc123' 86 | ]); 87 | 88 | // Then 89 | $this->assertEquals([ 90 | 'Origin' => 'abc123' 91 | ], $this->request->options['headers']); 92 | } 93 | 94 | /** @test */ 95 | public function it_sends_request_to_add_a_host() 96 | { 97 | // Given 98 | $this->mock->expects($this->once()) 99 | ->method('request') 100 | ->with('POST', '/config/apps/http/servers/srv0/routes/0/match/0/host', [ 101 | 'json' => 'example.com', 102 | 'http_errors' => false, 103 | 'headers' => [] 104 | ]) 105 | ->willReturn(new GuzzleHttpResponse(200)); 106 | 107 | // When 108 | $response = $this->request->http() 109 | ->server('srv0') 110 | ->route(0) 111 | ->match(0) 112 | ->addHost('example.com'); 113 | 114 | // Then 115 | $this->assertInstanceOf(Response::class, $response); 116 | } 117 | 118 | /** @test */ 119 | public function it_returns_a_response_instance() 120 | { 121 | // Given 122 | $this->mock->expects($this->once()) 123 | ->method('request') 124 | ->with('POST', '/config', [ 125 | 'http_errors' => false, 126 | 'headers' => [] 127 | ]) 128 | ->willReturn(new GuzzleHttpResponse(200)); 129 | 130 | // When 131 | $this->request->uri = '/config'; 132 | $response = $this->request->sendRequest('POST', []); 133 | 134 | // Then 135 | $this->assertInstanceOf(Response::class, $response); 136 | } 137 | 138 | /** @test */ 139 | public function it_returns_a_response_instance_for_an_error_request() 140 | { 141 | // Given 142 | $this->mock->expects($this->once()) 143 | ->method('request') 144 | ->with('POST', '/config', [ 145 | 'http_errors' => false, 146 | 'headers' => [] 147 | ]) 148 | ->willReturn(new GuzzleHttpResponse(500)); 149 | 150 | // When 151 | $this->request->uri = '/config'; 152 | $response = $this->request->sendRequest('POST', []); 153 | 154 | // Then 155 | $this->assertInstanceOf(Response::class, $response); 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /tests/ResponseTest.php: -------------------------------------------------------------------------------- 1 | assertTrue($response->isSuccessful()); 16 | 17 | $response = new Response(new GuzzleResponse(201, [])); 18 | $this->assertTrue($response->isSuccessful()); 19 | } 20 | 21 | /** @test */ 22 | public function it_returns_false_if_the_response_is_successful() 23 | { 24 | $response = new Response(new GuzzleResponse(401, [])); 25 | $this->assertFalse($response->isSuccessful()); 26 | 27 | $response = new Response(new GuzzleResponse(403, [])); 28 | $this->assertFalse($response->isSuccessful()); 29 | 30 | $response = new Response(new GuzzleResponse(500, [])); 31 | $this->assertFalse($response->isSuccessful()); 32 | } 33 | 34 | /** @test */ 35 | public function it_returns_the_response_body() 36 | { 37 | $response = new Response(new GuzzleResponse(200, [], 'example body')); 38 | $this->assertEquals('example body', $response->getBody()); 39 | 40 | $body = ['abc' => 123]; 41 | $response = new Response(new GuzzleResponse(201, [], json_encode($body))); 42 | $this->assertEquals(json_encode($body), $response->getBody()); 43 | } 44 | } 45 | --------------------------------------------------------------------------------