├── .gitignore ├── .php_cs ├── .travis.yml ├── CHANGELOG.md ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── phpunit.xml ├── src ├── Generator.php ├── Repr.php └── RepresentableInterface.php └── test └── suite ├── GeneratorTest.php └── ReprTest.php /.gitignore: -------------------------------------------------------------------------------- 1 | /artifacts/ 2 | /vendor/ 3 | .phpunit.result.cache 4 | -------------------------------------------------------------------------------- /.php_cs: -------------------------------------------------------------------------------- 1 | in(__DIR__) 5 | ->exclude([ 6 | 'artifacts', 7 | 'vendor', 8 | ]); 9 | 10 | return PhpCsFixer\Config::create() 11 | ->setFinder($finder) 12 | ->setCacheFile(__DIR__ . '/artifacts/.php_cs.cache') 13 | ->setRules([ 14 | '@PSR2' => true, 15 | 16 | 'array_syntax' => ['syntax' => 'short'], 17 | 'binary_operator_spaces' => false, 18 | 'blank_line_after_opening_tag' => true, 19 | 'blank_line_before_return' => true, 20 | 'braces' => false, 21 | 'cast_spaces' => true, 22 | 'class_definition' => ['singleLine' => false], 23 | 'concat_space' => ['spacing' => 'one'], 24 | 'declare_equal_normalize' => true, 25 | 'function_typehint_space' => true, 26 | 'hash_to_slash_comment' => true, 27 | 'heredoc_to_nowdoc' => true, 28 | 'include' => true, 29 | 'linebreak_after_opening_tag' => true, 30 | 'lowercase_cast' => true, 31 | 'method_separation' => true, 32 | 'native_function_casing' => true, 33 | 'new_with_braces' => true, 34 | 'no_blank_lines_after_class_opening' => true, 35 | 'no_blank_lines_after_phpdoc' => true, 36 | 'no_empty_comment' => true, 37 | 'no_empty_phpdoc' => true, 38 | 'no_empty_statement' => true, 39 | 'no_extra_consecutive_blank_lines' => true, 40 | 'no_leading_import_slash' => true, 41 | 'no_leading_namespace_whitespace' => true, 42 | 'no_mixed_echo_print' => true, 43 | 'no_multiline_whitespace_before_semicolons' => true, 44 | 'no_short_bool_cast' => true, 45 | 'no_singleline_whitespace_before_semicolons' => true, 46 | 'no_spaces_around_offset' => true, 47 | 'no_trailing_comma_in_singleline_array' => true, 48 | 'no_unneeded_control_parentheses' => true, 49 | 'no_unused_imports' => true, 50 | 'no_whitespace_before_comma_in_array' => true, 51 | 'no_whitespace_in_blank_line' => true, 52 | 'normalize_index_brace' => true, 53 | 'object_operator_without_whitespace' => true, 54 | 'ordered_imports' => true, 55 | 'phpdoc_align' => true, 56 | 'phpdoc_indent' => true, 57 | 'phpdoc_no_package' => true, 58 | 'phpdoc_scalar' => true, 59 | 'phpdoc_to_comment' => true, 60 | 'phpdoc_trim' => true, 61 | 'phpdoc_types' => true, 62 | 'pre_increment' => true, 63 | 'return_type_declaration' => true, 64 | 'self_accessor' => true, 65 | 'short_scalar_cast' => true, 66 | 'single_blank_line_before_namespace' => true, 67 | 'single_quote' => true, 68 | 'space_after_semicolon' => true, 69 | 'standardize_not_equals' => true, 70 | 'ternary_operator_spaces' => true, 71 | 'trailing_comma_in_multiline_array' => true, 72 | 'trim_array_spaces' => true, 73 | 'unary_operator_spaces' => true, 74 | 'whitespace_after_comma_in_array' => true, 75 | ]); 76 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: php 3 | php: 4 | - '7.2' 5 | - '7.3' 6 | - '7.4' 7 | - 'nightly' 8 | matrix: 9 | fast_finish: true 10 | allow_failures: 11 | - php: 'nightly' 12 | before_install: 13 | - phpenv config-rm xdebug.ini || true 14 | - "[[ $GITHUB_TOKEN ]] && composer config --global github-oauth.github.com $GITHUB_TOKEN" 15 | install: composer install --no-interaction 16 | script: phpdbg -qrr vendor/bin/phpunit 17 | after_script: bash <(curl -s https://codecov.io/bash) 18 | env: 19 | global: 20 | secure: AFGBABndywa34PpjoHcwExHZq1SEnzLHhF9/Vbd+KEATqJXt1ozAh4yQdmQg8ADFA04eLiiksn++Tl31rBcfFfs8tS66vuITe1js8oHTSM53WnIGMZBAEwFNbn+UVPx4iMTchr9XR2npZUwK7lNlj+yO/4bcZrUU+6pbcSPr4XE= 21 | cache: 22 | directories: 23 | - "$HOME/.composer/cache/files" 24 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Repr Changelog 2 | 3 | ### 4.0.0 (2020-08-25) 4 | 5 | - **[BC]** Add parameter and return type hints to all types 6 | 7 | ### 3.0.0 (2020-08-25) 8 | 9 | - **[BC]** Drop support for PHP 7.1 10 | 11 | ### 2.0.1 (2019-10-23) 12 | 13 | - Convert curly-brace string offsets to use square brackets (php 7.4 compatibility) 14 | 15 | ### 2.0.0 (2019-05-28) 16 | 17 | - **[BC]** Drop support for PHP 5.x and PHP 7.0 18 | - **[BC]** Remove `PackageInfo` type 19 | 20 | ### 1.0.1 (2014-07-25) 21 | 22 | - **[IMPROVED]** Updated autoloader to [PSR-4](http://www.php-fig.org/psr/psr-4/) 23 | 24 | ### 1.0.0 (2013-01-10) 25 | 26 | - Initial release 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2012 James Harris 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 | # Repr 2 | 3 | [![Build Status](http://img.shields.io/travis/icecave/repr/master.svg?style=flat-square)](https://travis-ci.org/icecave/repr) 4 | [![Code Coverage](https://img.shields.io/codecov/c/github/icecave/repr/master.svg?style=flat-square)](https://codecov.io/github/icecave/repr) 5 | [![Latest Version](http://img.shields.io/packagist/v/icecave/repr.svg?style=flat-square&label=semver)](https://semver.org) 6 | 7 | **Repr** provides a way to generate informational string representations of any value, inspired by Python's 8 | [reprlib](http://docs.python.org/release/3.1.5/library/reprlib.html) library. 9 | 10 | composer require icecave/repr 11 | 12 | ## Example 13 | 14 | Use the ```Repr::repr()``` method to obtain a string representation for any type. 15 | 16 | ```php 17 | use Icecave\Repr\Repr; 18 | 19 | echo Repr::repr([1, 2, 3]); 20 | ``` 21 | 22 | The output from the example above is: 23 | 24 | ``` 25 | [1, 2, 3] 26 | ``` 27 | 28 | ### Arrays 29 | 30 | Arrays are represented using PHP 5.4 style short array notation. By default a maximum of 3 elements are shown along with 31 | a count of any additional elements. Nested arrays are represented up to 3 levels deep by default, with any arrays nested 32 | deeper than this showing only the element count. 33 | 34 | ### Numeric Values 35 | 36 | Numbers are represented naturally, floating point values will always display a decimal point even if representing a 37 | whole number. 38 | 39 | ### Strings 40 | 41 | Strings are represented enclosed in double quotes up to a default maximum length of 50 characters. Any control 42 | characters are shown as escape sequences. 43 | 44 | ### Objects 45 | 46 | Objects are represented as a class name and SPL object hash enclosed in angle brackets. If the object has a `__toString` 47 | method, the result of this is shown after the class name according to the rules of string representations specified 48 | above. 49 | 50 | If an object implements [RepresentableInterface](src/Icecave/Repr/RepresentableInterface.php), 51 | the result of its stringRepresentation() method is used instead. 52 | 53 | ### Resources 54 | 55 | Resources are represented as a resource type and ID enclosed in angle brackets. Stream resources will also display the 56 | stream mode. 57 | 58 | ### Other Types 59 | 60 | All other types are represented by the result of [var_export()](http://php.net/manual/en/function.var-export.php) in 61 | lowercase. 62 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "icecave/repr", 3 | "description": "A library for generating string representations of any value, inspired by Python's reprlib library.", 4 | "keywords": [ 5 | "string", 6 | "representation", 7 | "human", 8 | "readable", 9 | "repr" 10 | ], 11 | "homepage": "https://github.com/icecave/repr", 12 | "license": "MIT", 13 | "authors": [ 14 | { 15 | "name": "James Harris", 16 | "email": "mailjamesharris@gmail.com", 17 | "homepage": "https://github.com/jmalloc" 18 | } 19 | ], 20 | "require": { 21 | "php": ">=7.2" 22 | }, 23 | "require-dev": { 24 | "eloquent/phony-phpunit": "^6", 25 | "friendsofphp/php-cs-fixer": "^2", 26 | "phpunit/phpunit": "^8" 27 | }, 28 | "autoload": { "psr-4": { "Icecave\\Repr\\": "src" } }, 29 | "autoload-dev": { "psr-4": { "Icecave\\Repr\\": "test/src" } }, 30 | "config": { 31 | "sort-packages": true, 32 | "platform": { 33 | "php": "7.2" 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /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": "1656c76ca51f141e6ad5f637633e94f3", 8 | "packages": [], 9 | "packages-dev": [ 10 | { 11 | "name": "composer/semver", 12 | "version": "1.5.1", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/composer/semver.git", 16 | "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", 21 | "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": "^5.3.2 || ^7.0" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^4.5 || ^5.0.5" 29 | }, 30 | "type": "library", 31 | "extra": { 32 | "branch-alias": { 33 | "dev-master": "1.x-dev" 34 | } 35 | }, 36 | "autoload": { 37 | "psr-4": { 38 | "Composer\\Semver\\": "src" 39 | } 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Nils Adermann", 48 | "email": "naderman@naderman.de", 49 | "homepage": "http://www.naderman.de" 50 | }, 51 | { 52 | "name": "Jordi Boggiano", 53 | "email": "j.boggiano@seld.be", 54 | "homepage": "http://seld.be" 55 | }, 56 | { 57 | "name": "Rob Bast", 58 | "email": "rob.bast@gmail.com", 59 | "homepage": "http://robbast.nl" 60 | } 61 | ], 62 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 63 | "keywords": [ 64 | "semantic", 65 | "semver", 66 | "validation", 67 | "versioning" 68 | ], 69 | "time": "2020-01-13T12:06:48+00:00" 70 | }, 71 | { 72 | "name": "composer/xdebug-handler", 73 | "version": "1.4.3", 74 | "source": { 75 | "type": "git", 76 | "url": "https://github.com/composer/xdebug-handler.git", 77 | "reference": "ebd27a9866ae8254e873866f795491f02418c5a5" 78 | }, 79 | "dist": { 80 | "type": "zip", 81 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5", 82 | "reference": "ebd27a9866ae8254e873866f795491f02418c5a5", 83 | "shasum": "" 84 | }, 85 | "require": { 86 | "php": "^5.3.2 || ^7.0 || ^8.0", 87 | "psr/log": "^1.0" 88 | }, 89 | "require-dev": { 90 | "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" 91 | }, 92 | "type": "library", 93 | "autoload": { 94 | "psr-4": { 95 | "Composer\\XdebugHandler\\": "src" 96 | } 97 | }, 98 | "notification-url": "https://packagist.org/downloads/", 99 | "license": [ 100 | "MIT" 101 | ], 102 | "authors": [ 103 | { 104 | "name": "John Stevenson", 105 | "email": "john-stevenson@blueyonder.co.uk" 106 | } 107 | ], 108 | "description": "Restarts a process without Xdebug.", 109 | "keywords": [ 110 | "Xdebug", 111 | "performance" 112 | ], 113 | "funding": [ 114 | { 115 | "url": "https://packagist.com", 116 | "type": "custom" 117 | }, 118 | { 119 | "url": "https://github.com/composer", 120 | "type": "github" 121 | }, 122 | { 123 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 124 | "type": "tidelift" 125 | } 126 | ], 127 | "time": "2020-08-19T10:27:58+00:00" 128 | }, 129 | { 130 | "name": "doctrine/annotations", 131 | "version": "1.10.4", 132 | "source": { 133 | "type": "git", 134 | "url": "https://github.com/doctrine/annotations.git", 135 | "reference": "bfe91e31984e2ba76df1c1339681770401ec262f" 136 | }, 137 | "dist": { 138 | "type": "zip", 139 | "url": "https://api.github.com/repos/doctrine/annotations/zipball/bfe91e31984e2ba76df1c1339681770401ec262f", 140 | "reference": "bfe91e31984e2ba76df1c1339681770401ec262f", 141 | "shasum": "" 142 | }, 143 | "require": { 144 | "doctrine/lexer": "1.*", 145 | "ext-tokenizer": "*", 146 | "php": "^7.1 || ^8.0" 147 | }, 148 | "require-dev": { 149 | "doctrine/cache": "1.*", 150 | "phpstan/phpstan": "^0.12.20", 151 | "phpunit/phpunit": "^7.5 || ^9.1.5" 152 | }, 153 | "type": "library", 154 | "extra": { 155 | "branch-alias": { 156 | "dev-master": "1.9.x-dev" 157 | } 158 | }, 159 | "autoload": { 160 | "psr-4": { 161 | "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" 162 | } 163 | }, 164 | "notification-url": "https://packagist.org/downloads/", 165 | "license": [ 166 | "MIT" 167 | ], 168 | "authors": [ 169 | { 170 | "name": "Guilherme Blanco", 171 | "email": "guilhermeblanco@gmail.com" 172 | }, 173 | { 174 | "name": "Roman Borschel", 175 | "email": "roman@code-factory.org" 176 | }, 177 | { 178 | "name": "Benjamin Eberlei", 179 | "email": "kontakt@beberlei.de" 180 | }, 181 | { 182 | "name": "Jonathan Wage", 183 | "email": "jonwage@gmail.com" 184 | }, 185 | { 186 | "name": "Johannes Schmitt", 187 | "email": "schmittjoh@gmail.com" 188 | } 189 | ], 190 | "description": "Docblock Annotations Parser", 191 | "homepage": "http://www.doctrine-project.org", 192 | "keywords": [ 193 | "annotations", 194 | "docblock", 195 | "parser" 196 | ], 197 | "time": "2020-08-10T19:35:50+00:00" 198 | }, 199 | { 200 | "name": "doctrine/instantiator", 201 | "version": "1.3.1", 202 | "source": { 203 | "type": "git", 204 | "url": "https://github.com/doctrine/instantiator.git", 205 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" 206 | }, 207 | "dist": { 208 | "type": "zip", 209 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", 210 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", 211 | "shasum": "" 212 | }, 213 | "require": { 214 | "php": "^7.1 || ^8.0" 215 | }, 216 | "require-dev": { 217 | "doctrine/coding-standard": "^6.0", 218 | "ext-pdo": "*", 219 | "ext-phar": "*", 220 | "phpbench/phpbench": "^0.13", 221 | "phpstan/phpstan-phpunit": "^0.11", 222 | "phpstan/phpstan-shim": "^0.11", 223 | "phpunit/phpunit": "^7.0" 224 | }, 225 | "type": "library", 226 | "extra": { 227 | "branch-alias": { 228 | "dev-master": "1.2.x-dev" 229 | } 230 | }, 231 | "autoload": { 232 | "psr-4": { 233 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 234 | } 235 | }, 236 | "notification-url": "https://packagist.org/downloads/", 237 | "license": [ 238 | "MIT" 239 | ], 240 | "authors": [ 241 | { 242 | "name": "Marco Pivetta", 243 | "email": "ocramius@gmail.com", 244 | "homepage": "http://ocramius.github.com/" 245 | } 246 | ], 247 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 248 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 249 | "keywords": [ 250 | "constructor", 251 | "instantiate" 252 | ], 253 | "funding": [ 254 | { 255 | "url": "https://www.doctrine-project.org/sponsorship.html", 256 | "type": "custom" 257 | }, 258 | { 259 | "url": "https://www.patreon.com/phpdoctrine", 260 | "type": "patreon" 261 | }, 262 | { 263 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 264 | "type": "tidelift" 265 | } 266 | ], 267 | "time": "2020-05-29T17:27:14+00:00" 268 | }, 269 | { 270 | "name": "doctrine/lexer", 271 | "version": "1.2.1", 272 | "source": { 273 | "type": "git", 274 | "url": "https://github.com/doctrine/lexer.git", 275 | "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" 276 | }, 277 | "dist": { 278 | "type": "zip", 279 | "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", 280 | "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", 281 | "shasum": "" 282 | }, 283 | "require": { 284 | "php": "^7.2 || ^8.0" 285 | }, 286 | "require-dev": { 287 | "doctrine/coding-standard": "^6.0", 288 | "phpstan/phpstan": "^0.11.8", 289 | "phpunit/phpunit": "^8.2" 290 | }, 291 | "type": "library", 292 | "extra": { 293 | "branch-alias": { 294 | "dev-master": "1.2.x-dev" 295 | } 296 | }, 297 | "autoload": { 298 | "psr-4": { 299 | "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" 300 | } 301 | }, 302 | "notification-url": "https://packagist.org/downloads/", 303 | "license": [ 304 | "MIT" 305 | ], 306 | "authors": [ 307 | { 308 | "name": "Guilherme Blanco", 309 | "email": "guilhermeblanco@gmail.com" 310 | }, 311 | { 312 | "name": "Roman Borschel", 313 | "email": "roman@code-factory.org" 314 | }, 315 | { 316 | "name": "Johannes Schmitt", 317 | "email": "schmittjoh@gmail.com" 318 | } 319 | ], 320 | "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", 321 | "homepage": "https://www.doctrine-project.org/projects/lexer.html", 322 | "keywords": [ 323 | "annotations", 324 | "docblock", 325 | "lexer", 326 | "parser", 327 | "php" 328 | ], 329 | "funding": [ 330 | { 331 | "url": "https://www.doctrine-project.org/sponsorship.html", 332 | "type": "custom" 333 | }, 334 | { 335 | "url": "https://www.patreon.com/phpdoctrine", 336 | "type": "patreon" 337 | }, 338 | { 339 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", 340 | "type": "tidelift" 341 | } 342 | ], 343 | "time": "2020-05-25T17:44:05+00:00" 344 | }, 345 | { 346 | "name": "eloquent/phony", 347 | "version": "4.0.0", 348 | "source": { 349 | "type": "git", 350 | "url": "https://github.com/eloquent/phony.git", 351 | "reference": "eabc78a62b88c31f7b2c1a142e16d918fe833782" 352 | }, 353 | "dist": { 354 | "type": "zip", 355 | "url": "https://api.github.com/repos/eloquent/phony/zipball/eabc78a62b88c31f7b2c1a142e16d918fe833782", 356 | "reference": "eabc78a62b88c31f7b2c1a142e16d918fe833782", 357 | "shasum": "" 358 | }, 359 | "require": { 360 | "php": ">=7.2" 361 | }, 362 | "require-dev": { 363 | "eloquent/code-style": "^1.0", 364 | "eloquent/phpstan-phony": "^0.7-dev", 365 | "errors/exceptions": "^0.2", 366 | "ext-pdo": "*", 367 | "friendsofphp/php-cs-fixer": "^2", 368 | "hamcrest/hamcrest-php": "^2", 369 | "phpstan/extension-installer": "^1", 370 | "phpstan/phpstan": "^0.12", 371 | "phpstan/phpstan-phpunit": "^0.12", 372 | "phpunit/phpunit": "^7 || ^8 <8.3.0 || ^8.3.4" 373 | }, 374 | "type": "library", 375 | "extra": { 376 | "branch-alias": { 377 | "dev-master": "4.1.x-dev" 378 | } 379 | }, 380 | "autoload": { 381 | "psr-4": { 382 | "Eloquent\\Phony\\": "src" 383 | }, 384 | "files": [ 385 | "src/initialize.php", 386 | "src/functions.php" 387 | ] 388 | }, 389 | "notification-url": "https://packagist.org/downloads/", 390 | "license": [ 391 | "MIT" 392 | ], 393 | "authors": [ 394 | { 395 | "name": "Erin Millard", 396 | "email": "ezzatron@gmail.com", 397 | "homepage": "http://ezzatron.com/" 398 | } 399 | ], 400 | "description": "Mocks, stubs, and spies for PHP.", 401 | "homepage": "http://eloquent-software.com/phony/", 402 | "keywords": [ 403 | "Double", 404 | "Dummy", 405 | "fake", 406 | "mock", 407 | "mocking", 408 | "spy", 409 | "stub", 410 | "stubbing", 411 | "test" 412 | ], 413 | "time": "2019-12-31T10:57:26+00:00" 414 | }, 415 | { 416 | "name": "eloquent/phony-phpunit", 417 | "version": "6.0.0", 418 | "source": { 419 | "type": "git", 420 | "url": "https://github.com/eloquent/phony-phpunit.git", 421 | "reference": "3b218fb6ae673f975d570227cf0ba663431f3928" 422 | }, 423 | "dist": { 424 | "type": "zip", 425 | "url": "https://api.github.com/repos/eloquent/phony-phpunit/zipball/3b218fb6ae673f975d570227cf0ba663431f3928", 426 | "reference": "3b218fb6ae673f975d570227cf0ba663431f3928", 427 | "shasum": "" 428 | }, 429 | "require": { 430 | "eloquent/phony": "^4", 431 | "php": ">=7.2", 432 | "phpunit/phpunit": "^8" 433 | }, 434 | "require-dev": { 435 | "eloquent/code-style": "^1", 436 | "eloquent/phpstan-phony": "^0.7", 437 | "errors/exceptions": "^0.2", 438 | "friendsofphp/php-cs-fixer": "^2", 439 | "phpstan/extension-installer": "^1", 440 | "phpstan/phpstan": "^0.12", 441 | "phpstan/phpstan-phpunit": "^0.12" 442 | }, 443 | "type": "library", 444 | "extra": { 445 | "branch-alias": { 446 | "dev-master": "6.1.x-dev" 447 | } 448 | }, 449 | "autoload": { 450 | "psr-4": { 451 | "Eloquent\\Phony\\Phpunit\\": "src" 452 | }, 453 | "files": [ 454 | "src/initialize.php", 455 | "src/functions.php" 456 | ] 457 | }, 458 | "notification-url": "https://packagist.org/downloads/", 459 | "license": [ 460 | "MIT" 461 | ], 462 | "authors": [ 463 | { 464 | "name": "Erin Millard", 465 | "email": "ezzatron@gmail.com", 466 | "homepage": "http://ezzatron.com/" 467 | } 468 | ], 469 | "description": "Phony for PHPUnit.", 470 | "homepage": "http://eloquent-software.com/phony/", 471 | "keywords": [ 472 | "Double", 473 | "Dummy", 474 | "fake", 475 | "mock", 476 | "mocking", 477 | "spy", 478 | "stub", 479 | "stubbing", 480 | "test" 481 | ], 482 | "time": "2020-01-05T23:52:20+00:00" 483 | }, 484 | { 485 | "name": "friendsofphp/php-cs-fixer", 486 | "version": "v2.16.4", 487 | "source": { 488 | "type": "git", 489 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", 490 | "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13" 491 | }, 492 | "dist": { 493 | "type": "zip", 494 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1023c3458137ab052f6ff1e09621a721bfdeca13", 495 | "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13", 496 | "shasum": "" 497 | }, 498 | "require": { 499 | "composer/semver": "^1.4", 500 | "composer/xdebug-handler": "^1.2", 501 | "doctrine/annotations": "^1.2", 502 | "ext-json": "*", 503 | "ext-tokenizer": "*", 504 | "php": "^5.6 || ^7.0", 505 | "php-cs-fixer/diff": "^1.3", 506 | "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", 507 | "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", 508 | "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", 509 | "symfony/finder": "^3.0 || ^4.0 || ^5.0", 510 | "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", 511 | "symfony/polyfill-php70": "^1.0", 512 | "symfony/polyfill-php72": "^1.4", 513 | "symfony/process": "^3.0 || ^4.0 || ^5.0", 514 | "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" 515 | }, 516 | "require-dev": { 517 | "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", 518 | "justinrainbow/json-schema": "^5.0", 519 | "keradus/cli-executor": "^1.2", 520 | "mikey179/vfsstream": "^1.6", 521 | "php-coveralls/php-coveralls": "^2.1", 522 | "php-cs-fixer/accessible-object": "^1.0", 523 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", 524 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", 525 | "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", 526 | "phpunitgoodpractices/traits": "^1.8", 527 | "symfony/phpunit-bridge": "^5.1", 528 | "symfony/yaml": "^3.0 || ^4.0 || ^5.0" 529 | }, 530 | "suggest": { 531 | "ext-dom": "For handling output formats in XML", 532 | "ext-mbstring": "For handling non-UTF8 characters.", 533 | "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", 534 | "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", 535 | "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." 536 | }, 537 | "bin": [ 538 | "php-cs-fixer" 539 | ], 540 | "type": "application", 541 | "autoload": { 542 | "psr-4": { 543 | "PhpCsFixer\\": "src/" 544 | }, 545 | "classmap": [ 546 | "tests/Test/AbstractFixerTestCase.php", 547 | "tests/Test/AbstractIntegrationCaseFactory.php", 548 | "tests/Test/AbstractIntegrationTestCase.php", 549 | "tests/Test/Assert/AssertTokensTrait.php", 550 | "tests/Test/IntegrationCase.php", 551 | "tests/Test/IntegrationCaseFactory.php", 552 | "tests/Test/IntegrationCaseFactoryInterface.php", 553 | "tests/Test/InternalIntegrationCaseFactory.php", 554 | "tests/Test/IsIdenticalConstraint.php", 555 | "tests/TestCase.php" 556 | ] 557 | }, 558 | "notification-url": "https://packagist.org/downloads/", 559 | "license": [ 560 | "MIT" 561 | ], 562 | "authors": [ 563 | { 564 | "name": "Fabien Potencier", 565 | "email": "fabien@symfony.com" 566 | }, 567 | { 568 | "name": "Dariusz Rumiński", 569 | "email": "dariusz.ruminski@gmail.com" 570 | } 571 | ], 572 | "description": "A tool to automatically fix PHP code style", 573 | "funding": [ 574 | { 575 | "url": "https://github.com/keradus", 576 | "type": "github" 577 | } 578 | ], 579 | "time": "2020-06-27T23:57:46+00:00" 580 | }, 581 | { 582 | "name": "myclabs/deep-copy", 583 | "version": "1.10.1", 584 | "source": { 585 | "type": "git", 586 | "url": "https://github.com/myclabs/DeepCopy.git", 587 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" 588 | }, 589 | "dist": { 590 | "type": "zip", 591 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", 592 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", 593 | "shasum": "" 594 | }, 595 | "require": { 596 | "php": "^7.1 || ^8.0" 597 | }, 598 | "replace": { 599 | "myclabs/deep-copy": "self.version" 600 | }, 601 | "require-dev": { 602 | "doctrine/collections": "^1.0", 603 | "doctrine/common": "^2.6", 604 | "phpunit/phpunit": "^7.1" 605 | }, 606 | "type": "library", 607 | "autoload": { 608 | "psr-4": { 609 | "DeepCopy\\": "src/DeepCopy/" 610 | }, 611 | "files": [ 612 | "src/DeepCopy/deep_copy.php" 613 | ] 614 | }, 615 | "notification-url": "https://packagist.org/downloads/", 616 | "license": [ 617 | "MIT" 618 | ], 619 | "description": "Create deep copies (clones) of your objects", 620 | "keywords": [ 621 | "clone", 622 | "copy", 623 | "duplicate", 624 | "object", 625 | "object graph" 626 | ], 627 | "funding": [ 628 | { 629 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 630 | "type": "tidelift" 631 | } 632 | ], 633 | "time": "2020-06-29T13:22:24+00:00" 634 | }, 635 | { 636 | "name": "paragonie/random_compat", 637 | "version": "v9.99.99", 638 | "source": { 639 | "type": "git", 640 | "url": "https://github.com/paragonie/random_compat.git", 641 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" 642 | }, 643 | "dist": { 644 | "type": "zip", 645 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 646 | "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", 647 | "shasum": "" 648 | }, 649 | "require": { 650 | "php": "^7" 651 | }, 652 | "require-dev": { 653 | "phpunit/phpunit": "4.*|5.*", 654 | "vimeo/psalm": "^1" 655 | }, 656 | "suggest": { 657 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 658 | }, 659 | "type": "library", 660 | "notification-url": "https://packagist.org/downloads/", 661 | "license": [ 662 | "MIT" 663 | ], 664 | "authors": [ 665 | { 666 | "name": "Paragon Initiative Enterprises", 667 | "email": "security@paragonie.com", 668 | "homepage": "https://paragonie.com" 669 | } 670 | ], 671 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 672 | "keywords": [ 673 | "csprng", 674 | "polyfill", 675 | "pseudorandom", 676 | "random" 677 | ], 678 | "time": "2018-07-02T15:55:56+00:00" 679 | }, 680 | { 681 | "name": "phar-io/manifest", 682 | "version": "1.0.3", 683 | "source": { 684 | "type": "git", 685 | "url": "https://github.com/phar-io/manifest.git", 686 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 687 | }, 688 | "dist": { 689 | "type": "zip", 690 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 691 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 692 | "shasum": "" 693 | }, 694 | "require": { 695 | "ext-dom": "*", 696 | "ext-phar": "*", 697 | "phar-io/version": "^2.0", 698 | "php": "^5.6 || ^7.0" 699 | }, 700 | "type": "library", 701 | "extra": { 702 | "branch-alias": { 703 | "dev-master": "1.0.x-dev" 704 | } 705 | }, 706 | "autoload": { 707 | "classmap": [ 708 | "src/" 709 | ] 710 | }, 711 | "notification-url": "https://packagist.org/downloads/", 712 | "license": [ 713 | "BSD-3-Clause" 714 | ], 715 | "authors": [ 716 | { 717 | "name": "Arne Blankerts", 718 | "email": "arne@blankerts.de", 719 | "role": "Developer" 720 | }, 721 | { 722 | "name": "Sebastian Heuer", 723 | "email": "sebastian@phpeople.de", 724 | "role": "Developer" 725 | }, 726 | { 727 | "name": "Sebastian Bergmann", 728 | "email": "sebastian@phpunit.de", 729 | "role": "Developer" 730 | } 731 | ], 732 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 733 | "time": "2018-07-08T19:23:20+00:00" 734 | }, 735 | { 736 | "name": "phar-io/version", 737 | "version": "2.0.1", 738 | "source": { 739 | "type": "git", 740 | "url": "https://github.com/phar-io/version.git", 741 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 742 | }, 743 | "dist": { 744 | "type": "zip", 745 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 746 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 747 | "shasum": "" 748 | }, 749 | "require": { 750 | "php": "^5.6 || ^7.0" 751 | }, 752 | "type": "library", 753 | "autoload": { 754 | "classmap": [ 755 | "src/" 756 | ] 757 | }, 758 | "notification-url": "https://packagist.org/downloads/", 759 | "license": [ 760 | "BSD-3-Clause" 761 | ], 762 | "authors": [ 763 | { 764 | "name": "Arne Blankerts", 765 | "email": "arne@blankerts.de", 766 | "role": "Developer" 767 | }, 768 | { 769 | "name": "Sebastian Heuer", 770 | "email": "sebastian@phpeople.de", 771 | "role": "Developer" 772 | }, 773 | { 774 | "name": "Sebastian Bergmann", 775 | "email": "sebastian@phpunit.de", 776 | "role": "Developer" 777 | } 778 | ], 779 | "description": "Library for handling version information and constraints", 780 | "time": "2018-07-08T19:19:57+00:00" 781 | }, 782 | { 783 | "name": "php-cs-fixer/diff", 784 | "version": "v1.3.0", 785 | "source": { 786 | "type": "git", 787 | "url": "https://github.com/PHP-CS-Fixer/diff.git", 788 | "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" 789 | }, 790 | "dist": { 791 | "type": "zip", 792 | "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", 793 | "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", 794 | "shasum": "" 795 | }, 796 | "require": { 797 | "php": "^5.6 || ^7.0" 798 | }, 799 | "require-dev": { 800 | "phpunit/phpunit": "^5.7.23 || ^6.4.3", 801 | "symfony/process": "^3.3" 802 | }, 803 | "type": "library", 804 | "autoload": { 805 | "classmap": [ 806 | "src/" 807 | ] 808 | }, 809 | "notification-url": "https://packagist.org/downloads/", 810 | "license": [ 811 | "BSD-3-Clause" 812 | ], 813 | "authors": [ 814 | { 815 | "name": "Kore Nordmann", 816 | "email": "mail@kore-nordmann.de" 817 | }, 818 | { 819 | "name": "Sebastian Bergmann", 820 | "email": "sebastian@phpunit.de" 821 | }, 822 | { 823 | "name": "SpacePossum" 824 | } 825 | ], 826 | "description": "sebastian/diff v2 backport support for PHP5.6", 827 | "homepage": "https://github.com/PHP-CS-Fixer", 828 | "keywords": [ 829 | "diff" 830 | ], 831 | "time": "2018-02-15T16:58:55+00:00" 832 | }, 833 | { 834 | "name": "phpdocumentor/reflection-common", 835 | "version": "2.2.0", 836 | "source": { 837 | "type": "git", 838 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 839 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 840 | }, 841 | "dist": { 842 | "type": "zip", 843 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 844 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 845 | "shasum": "" 846 | }, 847 | "require": { 848 | "php": "^7.2 || ^8.0" 849 | }, 850 | "type": "library", 851 | "extra": { 852 | "branch-alias": { 853 | "dev-2.x": "2.x-dev" 854 | } 855 | }, 856 | "autoload": { 857 | "psr-4": { 858 | "phpDocumentor\\Reflection\\": "src/" 859 | } 860 | }, 861 | "notification-url": "https://packagist.org/downloads/", 862 | "license": [ 863 | "MIT" 864 | ], 865 | "authors": [ 866 | { 867 | "name": "Jaap van Otterdijk", 868 | "email": "opensource@ijaap.nl" 869 | } 870 | ], 871 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 872 | "homepage": "http://www.phpdoc.org", 873 | "keywords": [ 874 | "FQSEN", 875 | "phpDocumentor", 876 | "phpdoc", 877 | "reflection", 878 | "static analysis" 879 | ], 880 | "time": "2020-06-27T09:03:43+00:00" 881 | }, 882 | { 883 | "name": "phpdocumentor/reflection-docblock", 884 | "version": "5.2.1", 885 | "source": { 886 | "type": "git", 887 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 888 | "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44" 889 | }, 890 | "dist": { 891 | "type": "zip", 892 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d870572532cd70bc3fab58f2e23ad423c8404c44", 893 | "reference": "d870572532cd70bc3fab58f2e23ad423c8404c44", 894 | "shasum": "" 895 | }, 896 | "require": { 897 | "ext-filter": "*", 898 | "php": "^7.2 || ^8.0", 899 | "phpdocumentor/reflection-common": "^2.2", 900 | "phpdocumentor/type-resolver": "^1.3", 901 | "webmozart/assert": "^1.9.1" 902 | }, 903 | "require-dev": { 904 | "mockery/mockery": "~1.3.2" 905 | }, 906 | "type": "library", 907 | "extra": { 908 | "branch-alias": { 909 | "dev-master": "5.x-dev" 910 | } 911 | }, 912 | "autoload": { 913 | "psr-4": { 914 | "phpDocumentor\\Reflection\\": "src" 915 | } 916 | }, 917 | "notification-url": "https://packagist.org/downloads/", 918 | "license": [ 919 | "MIT" 920 | ], 921 | "authors": [ 922 | { 923 | "name": "Mike van Riel", 924 | "email": "me@mikevanriel.com" 925 | }, 926 | { 927 | "name": "Jaap van Otterdijk", 928 | "email": "account@ijaap.nl" 929 | } 930 | ], 931 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 932 | "time": "2020-08-15T11:14:08+00:00" 933 | }, 934 | { 935 | "name": "phpdocumentor/type-resolver", 936 | "version": "1.3.0", 937 | "source": { 938 | "type": "git", 939 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 940 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" 941 | }, 942 | "dist": { 943 | "type": "zip", 944 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", 945 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", 946 | "shasum": "" 947 | }, 948 | "require": { 949 | "php": "^7.2 || ^8.0", 950 | "phpdocumentor/reflection-common": "^2.0" 951 | }, 952 | "require-dev": { 953 | "ext-tokenizer": "*" 954 | }, 955 | "type": "library", 956 | "extra": { 957 | "branch-alias": { 958 | "dev-1.x": "1.x-dev" 959 | } 960 | }, 961 | "autoload": { 962 | "psr-4": { 963 | "phpDocumentor\\Reflection\\": "src" 964 | } 965 | }, 966 | "notification-url": "https://packagist.org/downloads/", 967 | "license": [ 968 | "MIT" 969 | ], 970 | "authors": [ 971 | { 972 | "name": "Mike van Riel", 973 | "email": "me@mikevanriel.com" 974 | } 975 | ], 976 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 977 | "time": "2020-06-27T10:12:23+00:00" 978 | }, 979 | { 980 | "name": "phpspec/prophecy", 981 | "version": "1.11.1", 982 | "source": { 983 | "type": "git", 984 | "url": "https://github.com/phpspec/prophecy.git", 985 | "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" 986 | }, 987 | "dist": { 988 | "type": "zip", 989 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", 990 | "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", 991 | "shasum": "" 992 | }, 993 | "require": { 994 | "doctrine/instantiator": "^1.2", 995 | "php": "^7.2", 996 | "phpdocumentor/reflection-docblock": "^5.0", 997 | "sebastian/comparator": "^3.0 || ^4.0", 998 | "sebastian/recursion-context": "^3.0 || ^4.0" 999 | }, 1000 | "require-dev": { 1001 | "phpspec/phpspec": "^6.0", 1002 | "phpunit/phpunit": "^8.0" 1003 | }, 1004 | "type": "library", 1005 | "extra": { 1006 | "branch-alias": { 1007 | "dev-master": "1.11.x-dev" 1008 | } 1009 | }, 1010 | "autoload": { 1011 | "psr-4": { 1012 | "Prophecy\\": "src/Prophecy" 1013 | } 1014 | }, 1015 | "notification-url": "https://packagist.org/downloads/", 1016 | "license": [ 1017 | "MIT" 1018 | ], 1019 | "authors": [ 1020 | { 1021 | "name": "Konstantin Kudryashov", 1022 | "email": "ever.zet@gmail.com", 1023 | "homepage": "http://everzet.com" 1024 | }, 1025 | { 1026 | "name": "Marcello Duarte", 1027 | "email": "marcello.duarte@gmail.com" 1028 | } 1029 | ], 1030 | "description": "Highly opinionated mocking framework for PHP 5.3+", 1031 | "homepage": "https://github.com/phpspec/prophecy", 1032 | "keywords": [ 1033 | "Double", 1034 | "Dummy", 1035 | "fake", 1036 | "mock", 1037 | "spy", 1038 | "stub" 1039 | ], 1040 | "time": "2020-07-08T12:44:21+00:00" 1041 | }, 1042 | { 1043 | "name": "phpunit/php-code-coverage", 1044 | "version": "7.0.10", 1045 | "source": { 1046 | "type": "git", 1047 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1048 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf" 1049 | }, 1050 | "dist": { 1051 | "type": "zip", 1052 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf", 1053 | "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf", 1054 | "shasum": "" 1055 | }, 1056 | "require": { 1057 | "ext-dom": "*", 1058 | "ext-xmlwriter": "*", 1059 | "php": "^7.2", 1060 | "phpunit/php-file-iterator": "^2.0.2", 1061 | "phpunit/php-text-template": "^1.2.1", 1062 | "phpunit/php-token-stream": "^3.1.1", 1063 | "sebastian/code-unit-reverse-lookup": "^1.0.1", 1064 | "sebastian/environment": "^4.2.2", 1065 | "sebastian/version": "^2.0.1", 1066 | "theseer/tokenizer": "^1.1.3" 1067 | }, 1068 | "require-dev": { 1069 | "phpunit/phpunit": "^8.2.2" 1070 | }, 1071 | "suggest": { 1072 | "ext-xdebug": "^2.7.2" 1073 | }, 1074 | "type": "library", 1075 | "extra": { 1076 | "branch-alias": { 1077 | "dev-master": "7.0-dev" 1078 | } 1079 | }, 1080 | "autoload": { 1081 | "classmap": [ 1082 | "src/" 1083 | ] 1084 | }, 1085 | "notification-url": "https://packagist.org/downloads/", 1086 | "license": [ 1087 | "BSD-3-Clause" 1088 | ], 1089 | "authors": [ 1090 | { 1091 | "name": "Sebastian Bergmann", 1092 | "email": "sebastian@phpunit.de", 1093 | "role": "lead" 1094 | } 1095 | ], 1096 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1097 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1098 | "keywords": [ 1099 | "coverage", 1100 | "testing", 1101 | "xunit" 1102 | ], 1103 | "time": "2019-11-20T13:55:58+00:00" 1104 | }, 1105 | { 1106 | "name": "phpunit/php-file-iterator", 1107 | "version": "2.0.2", 1108 | "source": { 1109 | "type": "git", 1110 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1111 | "reference": "050bedf145a257b1ff02746c31894800e5122946" 1112 | }, 1113 | "dist": { 1114 | "type": "zip", 1115 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", 1116 | "reference": "050bedf145a257b1ff02746c31894800e5122946", 1117 | "shasum": "" 1118 | }, 1119 | "require": { 1120 | "php": "^7.1" 1121 | }, 1122 | "require-dev": { 1123 | "phpunit/phpunit": "^7.1" 1124 | }, 1125 | "type": "library", 1126 | "extra": { 1127 | "branch-alias": { 1128 | "dev-master": "2.0.x-dev" 1129 | } 1130 | }, 1131 | "autoload": { 1132 | "classmap": [ 1133 | "src/" 1134 | ] 1135 | }, 1136 | "notification-url": "https://packagist.org/downloads/", 1137 | "license": [ 1138 | "BSD-3-Clause" 1139 | ], 1140 | "authors": [ 1141 | { 1142 | "name": "Sebastian Bergmann", 1143 | "email": "sebastian@phpunit.de", 1144 | "role": "lead" 1145 | } 1146 | ], 1147 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1148 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1149 | "keywords": [ 1150 | "filesystem", 1151 | "iterator" 1152 | ], 1153 | "time": "2018-09-13T20:33:42+00:00" 1154 | }, 1155 | { 1156 | "name": "phpunit/php-text-template", 1157 | "version": "1.2.1", 1158 | "source": { 1159 | "type": "git", 1160 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1161 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 1162 | }, 1163 | "dist": { 1164 | "type": "zip", 1165 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1166 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 1167 | "shasum": "" 1168 | }, 1169 | "require": { 1170 | "php": ">=5.3.3" 1171 | }, 1172 | "type": "library", 1173 | "autoload": { 1174 | "classmap": [ 1175 | "src/" 1176 | ] 1177 | }, 1178 | "notification-url": "https://packagist.org/downloads/", 1179 | "license": [ 1180 | "BSD-3-Clause" 1181 | ], 1182 | "authors": [ 1183 | { 1184 | "name": "Sebastian Bergmann", 1185 | "email": "sebastian@phpunit.de", 1186 | "role": "lead" 1187 | } 1188 | ], 1189 | "description": "Simple template engine.", 1190 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1191 | "keywords": [ 1192 | "template" 1193 | ], 1194 | "time": "2015-06-21T13:50:34+00:00" 1195 | }, 1196 | { 1197 | "name": "phpunit/php-timer", 1198 | "version": "2.1.2", 1199 | "source": { 1200 | "type": "git", 1201 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1202 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e" 1203 | }, 1204 | "dist": { 1205 | "type": "zip", 1206 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e", 1207 | "reference": "1038454804406b0b5f5f520358e78c1c2f71501e", 1208 | "shasum": "" 1209 | }, 1210 | "require": { 1211 | "php": "^7.1" 1212 | }, 1213 | "require-dev": { 1214 | "phpunit/phpunit": "^7.0" 1215 | }, 1216 | "type": "library", 1217 | "extra": { 1218 | "branch-alias": { 1219 | "dev-master": "2.1-dev" 1220 | } 1221 | }, 1222 | "autoload": { 1223 | "classmap": [ 1224 | "src/" 1225 | ] 1226 | }, 1227 | "notification-url": "https://packagist.org/downloads/", 1228 | "license": [ 1229 | "BSD-3-Clause" 1230 | ], 1231 | "authors": [ 1232 | { 1233 | "name": "Sebastian Bergmann", 1234 | "email": "sebastian@phpunit.de", 1235 | "role": "lead" 1236 | } 1237 | ], 1238 | "description": "Utility class for timing", 1239 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1240 | "keywords": [ 1241 | "timer" 1242 | ], 1243 | "time": "2019-06-07T04:22:29+00:00" 1244 | }, 1245 | { 1246 | "name": "phpunit/php-token-stream", 1247 | "version": "3.1.1", 1248 | "source": { 1249 | "type": "git", 1250 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1251 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff" 1252 | }, 1253 | "dist": { 1254 | "type": "zip", 1255 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff", 1256 | "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff", 1257 | "shasum": "" 1258 | }, 1259 | "require": { 1260 | "ext-tokenizer": "*", 1261 | "php": "^7.1" 1262 | }, 1263 | "require-dev": { 1264 | "phpunit/phpunit": "^7.0" 1265 | }, 1266 | "type": "library", 1267 | "extra": { 1268 | "branch-alias": { 1269 | "dev-master": "3.1-dev" 1270 | } 1271 | }, 1272 | "autoload": { 1273 | "classmap": [ 1274 | "src/" 1275 | ] 1276 | }, 1277 | "notification-url": "https://packagist.org/downloads/", 1278 | "license": [ 1279 | "BSD-3-Clause" 1280 | ], 1281 | "authors": [ 1282 | { 1283 | "name": "Sebastian Bergmann", 1284 | "email": "sebastian@phpunit.de" 1285 | } 1286 | ], 1287 | "description": "Wrapper around PHP's tokenizer extension.", 1288 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1289 | "keywords": [ 1290 | "tokenizer" 1291 | ], 1292 | "abandoned": true, 1293 | "time": "2019-09-17T06:23:10+00:00" 1294 | }, 1295 | { 1296 | "name": "phpunit/phpunit", 1297 | "version": "8.5.8", 1298 | "source": { 1299 | "type": "git", 1300 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1301 | "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997" 1302 | }, 1303 | "dist": { 1304 | "type": "zip", 1305 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34c18baa6a44f1d1fbf0338907139e9dce95b997", 1306 | "reference": "34c18baa6a44f1d1fbf0338907139e9dce95b997", 1307 | "shasum": "" 1308 | }, 1309 | "require": { 1310 | "doctrine/instantiator": "^1.2.0", 1311 | "ext-dom": "*", 1312 | "ext-json": "*", 1313 | "ext-libxml": "*", 1314 | "ext-mbstring": "*", 1315 | "ext-xml": "*", 1316 | "ext-xmlwriter": "*", 1317 | "myclabs/deep-copy": "^1.9.1", 1318 | "phar-io/manifest": "^1.0.3", 1319 | "phar-io/version": "^2.0.1", 1320 | "php": "^7.2", 1321 | "phpspec/prophecy": "^1.8.1", 1322 | "phpunit/php-code-coverage": "^7.0.7", 1323 | "phpunit/php-file-iterator": "^2.0.2", 1324 | "phpunit/php-text-template": "^1.2.1", 1325 | "phpunit/php-timer": "^2.1.2", 1326 | "sebastian/comparator": "^3.0.2", 1327 | "sebastian/diff": "^3.0.2", 1328 | "sebastian/environment": "^4.2.2", 1329 | "sebastian/exporter": "^3.1.1", 1330 | "sebastian/global-state": "^3.0.0", 1331 | "sebastian/object-enumerator": "^3.0.3", 1332 | "sebastian/resource-operations": "^2.0.1", 1333 | "sebastian/type": "^1.1.3", 1334 | "sebastian/version": "^2.0.1" 1335 | }, 1336 | "require-dev": { 1337 | "ext-pdo": "*" 1338 | }, 1339 | "suggest": { 1340 | "ext-soap": "*", 1341 | "ext-xdebug": "*", 1342 | "phpunit/php-invoker": "^2.0.0" 1343 | }, 1344 | "bin": [ 1345 | "phpunit" 1346 | ], 1347 | "type": "library", 1348 | "extra": { 1349 | "branch-alias": { 1350 | "dev-master": "8.5-dev" 1351 | } 1352 | }, 1353 | "autoload": { 1354 | "classmap": [ 1355 | "src/" 1356 | ] 1357 | }, 1358 | "notification-url": "https://packagist.org/downloads/", 1359 | "license": [ 1360 | "BSD-3-Clause" 1361 | ], 1362 | "authors": [ 1363 | { 1364 | "name": "Sebastian Bergmann", 1365 | "email": "sebastian@phpunit.de", 1366 | "role": "lead" 1367 | } 1368 | ], 1369 | "description": "The PHP Unit Testing framework.", 1370 | "homepage": "https://phpunit.de/", 1371 | "keywords": [ 1372 | "phpunit", 1373 | "testing", 1374 | "xunit" 1375 | ], 1376 | "funding": [ 1377 | { 1378 | "url": "https://phpunit.de/donate.html", 1379 | "type": "custom" 1380 | }, 1381 | { 1382 | "url": "https://github.com/sebastianbergmann", 1383 | "type": "github" 1384 | } 1385 | ], 1386 | "time": "2020-06-22T07:06:58+00:00" 1387 | }, 1388 | { 1389 | "name": "psr/container", 1390 | "version": "1.0.0", 1391 | "source": { 1392 | "type": "git", 1393 | "url": "https://github.com/php-fig/container.git", 1394 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 1395 | }, 1396 | "dist": { 1397 | "type": "zip", 1398 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1399 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1400 | "shasum": "" 1401 | }, 1402 | "require": { 1403 | "php": ">=5.3.0" 1404 | }, 1405 | "type": "library", 1406 | "extra": { 1407 | "branch-alias": { 1408 | "dev-master": "1.0.x-dev" 1409 | } 1410 | }, 1411 | "autoload": { 1412 | "psr-4": { 1413 | "Psr\\Container\\": "src/" 1414 | } 1415 | }, 1416 | "notification-url": "https://packagist.org/downloads/", 1417 | "license": [ 1418 | "MIT" 1419 | ], 1420 | "authors": [ 1421 | { 1422 | "name": "PHP-FIG", 1423 | "homepage": "http://www.php-fig.org/" 1424 | } 1425 | ], 1426 | "description": "Common Container Interface (PHP FIG PSR-11)", 1427 | "homepage": "https://github.com/php-fig/container", 1428 | "keywords": [ 1429 | "PSR-11", 1430 | "container", 1431 | "container-interface", 1432 | "container-interop", 1433 | "psr" 1434 | ], 1435 | "time": "2017-02-14T16:28:37+00:00" 1436 | }, 1437 | { 1438 | "name": "psr/log", 1439 | "version": "1.1.3", 1440 | "source": { 1441 | "type": "git", 1442 | "url": "https://github.com/php-fig/log.git", 1443 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" 1444 | }, 1445 | "dist": { 1446 | "type": "zip", 1447 | "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", 1448 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", 1449 | "shasum": "" 1450 | }, 1451 | "require": { 1452 | "php": ">=5.3.0" 1453 | }, 1454 | "type": "library", 1455 | "extra": { 1456 | "branch-alias": { 1457 | "dev-master": "1.1.x-dev" 1458 | } 1459 | }, 1460 | "autoload": { 1461 | "psr-4": { 1462 | "Psr\\Log\\": "Psr/Log/" 1463 | } 1464 | }, 1465 | "notification-url": "https://packagist.org/downloads/", 1466 | "license": [ 1467 | "MIT" 1468 | ], 1469 | "authors": [ 1470 | { 1471 | "name": "PHP-FIG", 1472 | "homepage": "http://www.php-fig.org/" 1473 | } 1474 | ], 1475 | "description": "Common interface for logging libraries", 1476 | "homepage": "https://github.com/php-fig/log", 1477 | "keywords": [ 1478 | "log", 1479 | "psr", 1480 | "psr-3" 1481 | ], 1482 | "time": "2020-03-23T09:12:05+00:00" 1483 | }, 1484 | { 1485 | "name": "sebastian/code-unit-reverse-lookup", 1486 | "version": "1.0.1", 1487 | "source": { 1488 | "type": "git", 1489 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1490 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" 1491 | }, 1492 | "dist": { 1493 | "type": "zip", 1494 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1495 | "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", 1496 | "shasum": "" 1497 | }, 1498 | "require": { 1499 | "php": "^5.6 || ^7.0" 1500 | }, 1501 | "require-dev": { 1502 | "phpunit/phpunit": "^5.7 || ^6.0" 1503 | }, 1504 | "type": "library", 1505 | "extra": { 1506 | "branch-alias": { 1507 | "dev-master": "1.0.x-dev" 1508 | } 1509 | }, 1510 | "autoload": { 1511 | "classmap": [ 1512 | "src/" 1513 | ] 1514 | }, 1515 | "notification-url": "https://packagist.org/downloads/", 1516 | "license": [ 1517 | "BSD-3-Clause" 1518 | ], 1519 | "authors": [ 1520 | { 1521 | "name": "Sebastian Bergmann", 1522 | "email": "sebastian@phpunit.de" 1523 | } 1524 | ], 1525 | "description": "Looks up which function or method a line of code belongs to", 1526 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1527 | "time": "2017-03-04T06:30:41+00:00" 1528 | }, 1529 | { 1530 | "name": "sebastian/comparator", 1531 | "version": "3.0.2", 1532 | "source": { 1533 | "type": "git", 1534 | "url": "https://github.com/sebastianbergmann/comparator.git", 1535 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" 1536 | }, 1537 | "dist": { 1538 | "type": "zip", 1539 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1540 | "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", 1541 | "shasum": "" 1542 | }, 1543 | "require": { 1544 | "php": "^7.1", 1545 | "sebastian/diff": "^3.0", 1546 | "sebastian/exporter": "^3.1" 1547 | }, 1548 | "require-dev": { 1549 | "phpunit/phpunit": "^7.1" 1550 | }, 1551 | "type": "library", 1552 | "extra": { 1553 | "branch-alias": { 1554 | "dev-master": "3.0-dev" 1555 | } 1556 | }, 1557 | "autoload": { 1558 | "classmap": [ 1559 | "src/" 1560 | ] 1561 | }, 1562 | "notification-url": "https://packagist.org/downloads/", 1563 | "license": [ 1564 | "BSD-3-Clause" 1565 | ], 1566 | "authors": [ 1567 | { 1568 | "name": "Jeff Welch", 1569 | "email": "whatthejeff@gmail.com" 1570 | }, 1571 | { 1572 | "name": "Volker Dusch", 1573 | "email": "github@wallbash.com" 1574 | }, 1575 | { 1576 | "name": "Bernhard Schussek", 1577 | "email": "bschussek@2bepublished.at" 1578 | }, 1579 | { 1580 | "name": "Sebastian Bergmann", 1581 | "email": "sebastian@phpunit.de" 1582 | } 1583 | ], 1584 | "description": "Provides the functionality to compare PHP values for equality", 1585 | "homepage": "https://github.com/sebastianbergmann/comparator", 1586 | "keywords": [ 1587 | "comparator", 1588 | "compare", 1589 | "equality" 1590 | ], 1591 | "time": "2018-07-12T15:12:46+00:00" 1592 | }, 1593 | { 1594 | "name": "sebastian/diff", 1595 | "version": "3.0.2", 1596 | "source": { 1597 | "type": "git", 1598 | "url": "https://github.com/sebastianbergmann/diff.git", 1599 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" 1600 | }, 1601 | "dist": { 1602 | "type": "zip", 1603 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1604 | "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", 1605 | "shasum": "" 1606 | }, 1607 | "require": { 1608 | "php": "^7.1" 1609 | }, 1610 | "require-dev": { 1611 | "phpunit/phpunit": "^7.5 || ^8.0", 1612 | "symfony/process": "^2 || ^3.3 || ^4" 1613 | }, 1614 | "type": "library", 1615 | "extra": { 1616 | "branch-alias": { 1617 | "dev-master": "3.0-dev" 1618 | } 1619 | }, 1620 | "autoload": { 1621 | "classmap": [ 1622 | "src/" 1623 | ] 1624 | }, 1625 | "notification-url": "https://packagist.org/downloads/", 1626 | "license": [ 1627 | "BSD-3-Clause" 1628 | ], 1629 | "authors": [ 1630 | { 1631 | "name": "Kore Nordmann", 1632 | "email": "mail@kore-nordmann.de" 1633 | }, 1634 | { 1635 | "name": "Sebastian Bergmann", 1636 | "email": "sebastian@phpunit.de" 1637 | } 1638 | ], 1639 | "description": "Diff implementation", 1640 | "homepage": "https://github.com/sebastianbergmann/diff", 1641 | "keywords": [ 1642 | "diff", 1643 | "udiff", 1644 | "unidiff", 1645 | "unified diff" 1646 | ], 1647 | "time": "2019-02-04T06:01:07+00:00" 1648 | }, 1649 | { 1650 | "name": "sebastian/environment", 1651 | "version": "4.2.3", 1652 | "source": { 1653 | "type": "git", 1654 | "url": "https://github.com/sebastianbergmann/environment.git", 1655 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368" 1656 | }, 1657 | "dist": { 1658 | "type": "zip", 1659 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368", 1660 | "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368", 1661 | "shasum": "" 1662 | }, 1663 | "require": { 1664 | "php": "^7.1" 1665 | }, 1666 | "require-dev": { 1667 | "phpunit/phpunit": "^7.5" 1668 | }, 1669 | "suggest": { 1670 | "ext-posix": "*" 1671 | }, 1672 | "type": "library", 1673 | "extra": { 1674 | "branch-alias": { 1675 | "dev-master": "4.2-dev" 1676 | } 1677 | }, 1678 | "autoload": { 1679 | "classmap": [ 1680 | "src/" 1681 | ] 1682 | }, 1683 | "notification-url": "https://packagist.org/downloads/", 1684 | "license": [ 1685 | "BSD-3-Clause" 1686 | ], 1687 | "authors": [ 1688 | { 1689 | "name": "Sebastian Bergmann", 1690 | "email": "sebastian@phpunit.de" 1691 | } 1692 | ], 1693 | "description": "Provides functionality to handle HHVM/PHP environments", 1694 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1695 | "keywords": [ 1696 | "Xdebug", 1697 | "environment", 1698 | "hhvm" 1699 | ], 1700 | "time": "2019-11-20T08:46:58+00:00" 1701 | }, 1702 | { 1703 | "name": "sebastian/exporter", 1704 | "version": "3.1.2", 1705 | "source": { 1706 | "type": "git", 1707 | "url": "https://github.com/sebastianbergmann/exporter.git", 1708 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" 1709 | }, 1710 | "dist": { 1711 | "type": "zip", 1712 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", 1713 | "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", 1714 | "shasum": "" 1715 | }, 1716 | "require": { 1717 | "php": "^7.0", 1718 | "sebastian/recursion-context": "^3.0" 1719 | }, 1720 | "require-dev": { 1721 | "ext-mbstring": "*", 1722 | "phpunit/phpunit": "^6.0" 1723 | }, 1724 | "type": "library", 1725 | "extra": { 1726 | "branch-alias": { 1727 | "dev-master": "3.1.x-dev" 1728 | } 1729 | }, 1730 | "autoload": { 1731 | "classmap": [ 1732 | "src/" 1733 | ] 1734 | }, 1735 | "notification-url": "https://packagist.org/downloads/", 1736 | "license": [ 1737 | "BSD-3-Clause" 1738 | ], 1739 | "authors": [ 1740 | { 1741 | "name": "Sebastian Bergmann", 1742 | "email": "sebastian@phpunit.de" 1743 | }, 1744 | { 1745 | "name": "Jeff Welch", 1746 | "email": "whatthejeff@gmail.com" 1747 | }, 1748 | { 1749 | "name": "Volker Dusch", 1750 | "email": "github@wallbash.com" 1751 | }, 1752 | { 1753 | "name": "Adam Harvey", 1754 | "email": "aharvey@php.net" 1755 | }, 1756 | { 1757 | "name": "Bernhard Schussek", 1758 | "email": "bschussek@gmail.com" 1759 | } 1760 | ], 1761 | "description": "Provides the functionality to export PHP variables for visualization", 1762 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1763 | "keywords": [ 1764 | "export", 1765 | "exporter" 1766 | ], 1767 | "time": "2019-09-14T09:02:43+00:00" 1768 | }, 1769 | { 1770 | "name": "sebastian/global-state", 1771 | "version": "3.0.0", 1772 | "source": { 1773 | "type": "git", 1774 | "url": "https://github.com/sebastianbergmann/global-state.git", 1775 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" 1776 | }, 1777 | "dist": { 1778 | "type": "zip", 1779 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", 1780 | "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", 1781 | "shasum": "" 1782 | }, 1783 | "require": { 1784 | "php": "^7.2", 1785 | "sebastian/object-reflector": "^1.1.1", 1786 | "sebastian/recursion-context": "^3.0" 1787 | }, 1788 | "require-dev": { 1789 | "ext-dom": "*", 1790 | "phpunit/phpunit": "^8.0" 1791 | }, 1792 | "suggest": { 1793 | "ext-uopz": "*" 1794 | }, 1795 | "type": "library", 1796 | "extra": { 1797 | "branch-alias": { 1798 | "dev-master": "3.0-dev" 1799 | } 1800 | }, 1801 | "autoload": { 1802 | "classmap": [ 1803 | "src/" 1804 | ] 1805 | }, 1806 | "notification-url": "https://packagist.org/downloads/", 1807 | "license": [ 1808 | "BSD-3-Clause" 1809 | ], 1810 | "authors": [ 1811 | { 1812 | "name": "Sebastian Bergmann", 1813 | "email": "sebastian@phpunit.de" 1814 | } 1815 | ], 1816 | "description": "Snapshotting of global state", 1817 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1818 | "keywords": [ 1819 | "global state" 1820 | ], 1821 | "time": "2019-02-01T05:30:01+00:00" 1822 | }, 1823 | { 1824 | "name": "sebastian/object-enumerator", 1825 | "version": "3.0.3", 1826 | "source": { 1827 | "type": "git", 1828 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1829 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" 1830 | }, 1831 | "dist": { 1832 | "type": "zip", 1833 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1834 | "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", 1835 | "shasum": "" 1836 | }, 1837 | "require": { 1838 | "php": "^7.0", 1839 | "sebastian/object-reflector": "^1.1.1", 1840 | "sebastian/recursion-context": "^3.0" 1841 | }, 1842 | "require-dev": { 1843 | "phpunit/phpunit": "^6.0" 1844 | }, 1845 | "type": "library", 1846 | "extra": { 1847 | "branch-alias": { 1848 | "dev-master": "3.0.x-dev" 1849 | } 1850 | }, 1851 | "autoload": { 1852 | "classmap": [ 1853 | "src/" 1854 | ] 1855 | }, 1856 | "notification-url": "https://packagist.org/downloads/", 1857 | "license": [ 1858 | "BSD-3-Clause" 1859 | ], 1860 | "authors": [ 1861 | { 1862 | "name": "Sebastian Bergmann", 1863 | "email": "sebastian@phpunit.de" 1864 | } 1865 | ], 1866 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1867 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1868 | "time": "2017-08-03T12:35:26+00:00" 1869 | }, 1870 | { 1871 | "name": "sebastian/object-reflector", 1872 | "version": "1.1.1", 1873 | "source": { 1874 | "type": "git", 1875 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1876 | "reference": "773f97c67f28de00d397be301821b06708fca0be" 1877 | }, 1878 | "dist": { 1879 | "type": "zip", 1880 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", 1881 | "reference": "773f97c67f28de00d397be301821b06708fca0be", 1882 | "shasum": "" 1883 | }, 1884 | "require": { 1885 | "php": "^7.0" 1886 | }, 1887 | "require-dev": { 1888 | "phpunit/phpunit": "^6.0" 1889 | }, 1890 | "type": "library", 1891 | "extra": { 1892 | "branch-alias": { 1893 | "dev-master": "1.1-dev" 1894 | } 1895 | }, 1896 | "autoload": { 1897 | "classmap": [ 1898 | "src/" 1899 | ] 1900 | }, 1901 | "notification-url": "https://packagist.org/downloads/", 1902 | "license": [ 1903 | "BSD-3-Clause" 1904 | ], 1905 | "authors": [ 1906 | { 1907 | "name": "Sebastian Bergmann", 1908 | "email": "sebastian@phpunit.de" 1909 | } 1910 | ], 1911 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1912 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1913 | "time": "2017-03-29T09:07:27+00:00" 1914 | }, 1915 | { 1916 | "name": "sebastian/recursion-context", 1917 | "version": "3.0.0", 1918 | "source": { 1919 | "type": "git", 1920 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1921 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" 1922 | }, 1923 | "dist": { 1924 | "type": "zip", 1925 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1926 | "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", 1927 | "shasum": "" 1928 | }, 1929 | "require": { 1930 | "php": "^7.0" 1931 | }, 1932 | "require-dev": { 1933 | "phpunit/phpunit": "^6.0" 1934 | }, 1935 | "type": "library", 1936 | "extra": { 1937 | "branch-alias": { 1938 | "dev-master": "3.0.x-dev" 1939 | } 1940 | }, 1941 | "autoload": { 1942 | "classmap": [ 1943 | "src/" 1944 | ] 1945 | }, 1946 | "notification-url": "https://packagist.org/downloads/", 1947 | "license": [ 1948 | "BSD-3-Clause" 1949 | ], 1950 | "authors": [ 1951 | { 1952 | "name": "Jeff Welch", 1953 | "email": "whatthejeff@gmail.com" 1954 | }, 1955 | { 1956 | "name": "Sebastian Bergmann", 1957 | "email": "sebastian@phpunit.de" 1958 | }, 1959 | { 1960 | "name": "Adam Harvey", 1961 | "email": "aharvey@php.net" 1962 | } 1963 | ], 1964 | "description": "Provides functionality to recursively process PHP variables", 1965 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1966 | "time": "2017-03-03T06:23:57+00:00" 1967 | }, 1968 | { 1969 | "name": "sebastian/resource-operations", 1970 | "version": "2.0.1", 1971 | "source": { 1972 | "type": "git", 1973 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1974 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" 1975 | }, 1976 | "dist": { 1977 | "type": "zip", 1978 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1979 | "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", 1980 | "shasum": "" 1981 | }, 1982 | "require": { 1983 | "php": "^7.1" 1984 | }, 1985 | "type": "library", 1986 | "extra": { 1987 | "branch-alias": { 1988 | "dev-master": "2.0-dev" 1989 | } 1990 | }, 1991 | "autoload": { 1992 | "classmap": [ 1993 | "src/" 1994 | ] 1995 | }, 1996 | "notification-url": "https://packagist.org/downloads/", 1997 | "license": [ 1998 | "BSD-3-Clause" 1999 | ], 2000 | "authors": [ 2001 | { 2002 | "name": "Sebastian Bergmann", 2003 | "email": "sebastian@phpunit.de" 2004 | } 2005 | ], 2006 | "description": "Provides a list of PHP built-in functions that operate on resources", 2007 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2008 | "time": "2018-10-04T04:07:39+00:00" 2009 | }, 2010 | { 2011 | "name": "sebastian/type", 2012 | "version": "1.1.3", 2013 | "source": { 2014 | "type": "git", 2015 | "url": "https://github.com/sebastianbergmann/type.git", 2016 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3" 2017 | }, 2018 | "dist": { 2019 | "type": "zip", 2020 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3", 2021 | "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3", 2022 | "shasum": "" 2023 | }, 2024 | "require": { 2025 | "php": "^7.2" 2026 | }, 2027 | "require-dev": { 2028 | "phpunit/phpunit": "^8.2" 2029 | }, 2030 | "type": "library", 2031 | "extra": { 2032 | "branch-alias": { 2033 | "dev-master": "1.1-dev" 2034 | } 2035 | }, 2036 | "autoload": { 2037 | "classmap": [ 2038 | "src/" 2039 | ] 2040 | }, 2041 | "notification-url": "https://packagist.org/downloads/", 2042 | "license": [ 2043 | "BSD-3-Clause" 2044 | ], 2045 | "authors": [ 2046 | { 2047 | "name": "Sebastian Bergmann", 2048 | "email": "sebastian@phpunit.de", 2049 | "role": "lead" 2050 | } 2051 | ], 2052 | "description": "Collection of value objects that represent the types of the PHP type system", 2053 | "homepage": "https://github.com/sebastianbergmann/type", 2054 | "time": "2019-07-02T08:10:15+00:00" 2055 | }, 2056 | { 2057 | "name": "sebastian/version", 2058 | "version": "2.0.1", 2059 | "source": { 2060 | "type": "git", 2061 | "url": "https://github.com/sebastianbergmann/version.git", 2062 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 2063 | }, 2064 | "dist": { 2065 | "type": "zip", 2066 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 2067 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 2068 | "shasum": "" 2069 | }, 2070 | "require": { 2071 | "php": ">=5.6" 2072 | }, 2073 | "type": "library", 2074 | "extra": { 2075 | "branch-alias": { 2076 | "dev-master": "2.0.x-dev" 2077 | } 2078 | }, 2079 | "autoload": { 2080 | "classmap": [ 2081 | "src/" 2082 | ] 2083 | }, 2084 | "notification-url": "https://packagist.org/downloads/", 2085 | "license": [ 2086 | "BSD-3-Clause" 2087 | ], 2088 | "authors": [ 2089 | { 2090 | "name": "Sebastian Bergmann", 2091 | "email": "sebastian@phpunit.de", 2092 | "role": "lead" 2093 | } 2094 | ], 2095 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2096 | "homepage": "https://github.com/sebastianbergmann/version", 2097 | "time": "2016-10-03T07:35:21+00:00" 2098 | }, 2099 | { 2100 | "name": "symfony/console", 2101 | "version": "v4.4.11", 2102 | "source": { 2103 | "type": "git", 2104 | "url": "https://github.com/symfony/console.git", 2105 | "reference": "55d07021da933dd0d633ffdab6f45d5b230c7e02" 2106 | }, 2107 | "dist": { 2108 | "type": "zip", 2109 | "url": "https://api.github.com/repos/symfony/console/zipball/55d07021da933dd0d633ffdab6f45d5b230c7e02", 2110 | "reference": "55d07021da933dd0d633ffdab6f45d5b230c7e02", 2111 | "shasum": "" 2112 | }, 2113 | "require": { 2114 | "php": ">=7.1.3", 2115 | "symfony/polyfill-mbstring": "~1.0", 2116 | "symfony/polyfill-php73": "^1.8", 2117 | "symfony/polyfill-php80": "^1.15", 2118 | "symfony/service-contracts": "^1.1|^2" 2119 | }, 2120 | "conflict": { 2121 | "symfony/dependency-injection": "<3.4", 2122 | "symfony/event-dispatcher": "<4.3|>=5", 2123 | "symfony/lock": "<4.4", 2124 | "symfony/process": "<3.3" 2125 | }, 2126 | "provide": { 2127 | "psr/log-implementation": "1.0" 2128 | }, 2129 | "require-dev": { 2130 | "psr/log": "~1.0", 2131 | "symfony/config": "^3.4|^4.0|^5.0", 2132 | "symfony/dependency-injection": "^3.4|^4.0|^5.0", 2133 | "symfony/event-dispatcher": "^4.3", 2134 | "symfony/lock": "^4.4|^5.0", 2135 | "symfony/process": "^3.4|^4.0|^5.0", 2136 | "symfony/var-dumper": "^4.3|^5.0" 2137 | }, 2138 | "suggest": { 2139 | "psr/log": "For using the console logger", 2140 | "symfony/event-dispatcher": "", 2141 | "symfony/lock": "", 2142 | "symfony/process": "" 2143 | }, 2144 | "type": "library", 2145 | "extra": { 2146 | "branch-alias": { 2147 | "dev-master": "4.4-dev" 2148 | } 2149 | }, 2150 | "autoload": { 2151 | "psr-4": { 2152 | "Symfony\\Component\\Console\\": "" 2153 | }, 2154 | "exclude-from-classmap": [ 2155 | "/Tests/" 2156 | ] 2157 | }, 2158 | "notification-url": "https://packagist.org/downloads/", 2159 | "license": [ 2160 | "MIT" 2161 | ], 2162 | "authors": [ 2163 | { 2164 | "name": "Fabien Potencier", 2165 | "email": "fabien@symfony.com" 2166 | }, 2167 | { 2168 | "name": "Symfony Community", 2169 | "homepage": "https://symfony.com/contributors" 2170 | } 2171 | ], 2172 | "description": "Symfony Console Component", 2173 | "homepage": "https://symfony.com", 2174 | "funding": [ 2175 | { 2176 | "url": "https://symfony.com/sponsor", 2177 | "type": "custom" 2178 | }, 2179 | { 2180 | "url": "https://github.com/fabpot", 2181 | "type": "github" 2182 | }, 2183 | { 2184 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2185 | "type": "tidelift" 2186 | } 2187 | ], 2188 | "time": "2020-07-06T13:18:39+00:00" 2189 | }, 2190 | { 2191 | "name": "symfony/event-dispatcher", 2192 | "version": "v4.4.11", 2193 | "source": { 2194 | "type": "git", 2195 | "url": "https://github.com/symfony/event-dispatcher.git", 2196 | "reference": "6140fc7047dafc5abbe84ba16a34a86c0b0229b8" 2197 | }, 2198 | "dist": { 2199 | "type": "zip", 2200 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/6140fc7047dafc5abbe84ba16a34a86c0b0229b8", 2201 | "reference": "6140fc7047dafc5abbe84ba16a34a86c0b0229b8", 2202 | "shasum": "" 2203 | }, 2204 | "require": { 2205 | "php": ">=7.1.3", 2206 | "symfony/event-dispatcher-contracts": "^1.1" 2207 | }, 2208 | "conflict": { 2209 | "symfony/dependency-injection": "<3.4" 2210 | }, 2211 | "provide": { 2212 | "psr/event-dispatcher-implementation": "1.0", 2213 | "symfony/event-dispatcher-implementation": "1.1" 2214 | }, 2215 | "require-dev": { 2216 | "psr/log": "~1.0", 2217 | "symfony/config": "^3.4|^4.0|^5.0", 2218 | "symfony/dependency-injection": "^3.4|^4.0|^5.0", 2219 | "symfony/expression-language": "^3.4|^4.0|^5.0", 2220 | "symfony/http-foundation": "^3.4|^4.0|^5.0", 2221 | "symfony/service-contracts": "^1.1|^2", 2222 | "symfony/stopwatch": "^3.4|^4.0|^5.0" 2223 | }, 2224 | "suggest": { 2225 | "symfony/dependency-injection": "", 2226 | "symfony/http-kernel": "" 2227 | }, 2228 | "type": "library", 2229 | "extra": { 2230 | "branch-alias": { 2231 | "dev-master": "4.4-dev" 2232 | } 2233 | }, 2234 | "autoload": { 2235 | "psr-4": { 2236 | "Symfony\\Component\\EventDispatcher\\": "" 2237 | }, 2238 | "exclude-from-classmap": [ 2239 | "/Tests/" 2240 | ] 2241 | }, 2242 | "notification-url": "https://packagist.org/downloads/", 2243 | "license": [ 2244 | "MIT" 2245 | ], 2246 | "authors": [ 2247 | { 2248 | "name": "Fabien Potencier", 2249 | "email": "fabien@symfony.com" 2250 | }, 2251 | { 2252 | "name": "Symfony Community", 2253 | "homepage": "https://symfony.com/contributors" 2254 | } 2255 | ], 2256 | "description": "Symfony EventDispatcher Component", 2257 | "homepage": "https://symfony.com", 2258 | "funding": [ 2259 | { 2260 | "url": "https://symfony.com/sponsor", 2261 | "type": "custom" 2262 | }, 2263 | { 2264 | "url": "https://github.com/fabpot", 2265 | "type": "github" 2266 | }, 2267 | { 2268 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2269 | "type": "tidelift" 2270 | } 2271 | ], 2272 | "time": "2020-06-18T17:59:13+00:00" 2273 | }, 2274 | { 2275 | "name": "symfony/event-dispatcher-contracts", 2276 | "version": "v1.1.9", 2277 | "source": { 2278 | "type": "git", 2279 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 2280 | "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" 2281 | }, 2282 | "dist": { 2283 | "type": "zip", 2284 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", 2285 | "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", 2286 | "shasum": "" 2287 | }, 2288 | "require": { 2289 | "php": ">=7.1.3" 2290 | }, 2291 | "suggest": { 2292 | "psr/event-dispatcher": "", 2293 | "symfony/event-dispatcher-implementation": "" 2294 | }, 2295 | "type": "library", 2296 | "extra": { 2297 | "branch-alias": { 2298 | "dev-master": "1.1-dev" 2299 | }, 2300 | "thanks": { 2301 | "name": "symfony/contracts", 2302 | "url": "https://github.com/symfony/contracts" 2303 | } 2304 | }, 2305 | "autoload": { 2306 | "psr-4": { 2307 | "Symfony\\Contracts\\EventDispatcher\\": "" 2308 | } 2309 | }, 2310 | "notification-url": "https://packagist.org/downloads/", 2311 | "license": [ 2312 | "MIT" 2313 | ], 2314 | "authors": [ 2315 | { 2316 | "name": "Nicolas Grekas", 2317 | "email": "p@tchwork.com" 2318 | }, 2319 | { 2320 | "name": "Symfony Community", 2321 | "homepage": "https://symfony.com/contributors" 2322 | } 2323 | ], 2324 | "description": "Generic abstractions related to dispatching event", 2325 | "homepage": "https://symfony.com", 2326 | "keywords": [ 2327 | "abstractions", 2328 | "contracts", 2329 | "decoupling", 2330 | "interfaces", 2331 | "interoperability", 2332 | "standards" 2333 | ], 2334 | "funding": [ 2335 | { 2336 | "url": "https://symfony.com/sponsor", 2337 | "type": "custom" 2338 | }, 2339 | { 2340 | "url": "https://github.com/fabpot", 2341 | "type": "github" 2342 | }, 2343 | { 2344 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2345 | "type": "tidelift" 2346 | } 2347 | ], 2348 | "time": "2020-07-06T13:19:58+00:00" 2349 | }, 2350 | { 2351 | "name": "symfony/filesystem", 2352 | "version": "v4.4.11", 2353 | "source": { 2354 | "type": "git", 2355 | "url": "https://github.com/symfony/filesystem.git", 2356 | "reference": "b27f491309db5757816db672b256ea2e03677d30" 2357 | }, 2358 | "dist": { 2359 | "type": "zip", 2360 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/b27f491309db5757816db672b256ea2e03677d30", 2361 | "reference": "b27f491309db5757816db672b256ea2e03677d30", 2362 | "shasum": "" 2363 | }, 2364 | "require": { 2365 | "php": ">=7.1.3", 2366 | "symfony/polyfill-ctype": "~1.8" 2367 | }, 2368 | "type": "library", 2369 | "extra": { 2370 | "branch-alias": { 2371 | "dev-master": "4.4-dev" 2372 | } 2373 | }, 2374 | "autoload": { 2375 | "psr-4": { 2376 | "Symfony\\Component\\Filesystem\\": "" 2377 | }, 2378 | "exclude-from-classmap": [ 2379 | "/Tests/" 2380 | ] 2381 | }, 2382 | "notification-url": "https://packagist.org/downloads/", 2383 | "license": [ 2384 | "MIT" 2385 | ], 2386 | "authors": [ 2387 | { 2388 | "name": "Fabien Potencier", 2389 | "email": "fabien@symfony.com" 2390 | }, 2391 | { 2392 | "name": "Symfony Community", 2393 | "homepage": "https://symfony.com/contributors" 2394 | } 2395 | ], 2396 | "description": "Symfony Filesystem Component", 2397 | "homepage": "https://symfony.com", 2398 | "funding": [ 2399 | { 2400 | "url": "https://symfony.com/sponsor", 2401 | "type": "custom" 2402 | }, 2403 | { 2404 | "url": "https://github.com/fabpot", 2405 | "type": "github" 2406 | }, 2407 | { 2408 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2409 | "type": "tidelift" 2410 | } 2411 | ], 2412 | "time": "2020-05-30T18:50:54+00:00" 2413 | }, 2414 | { 2415 | "name": "symfony/finder", 2416 | "version": "v4.4.11", 2417 | "source": { 2418 | "type": "git", 2419 | "url": "https://github.com/symfony/finder.git", 2420 | "reference": "2727aa35fddfada1dd37599948528e9b152eb742" 2421 | }, 2422 | "dist": { 2423 | "type": "zip", 2424 | "url": "https://api.github.com/repos/symfony/finder/zipball/2727aa35fddfada1dd37599948528e9b152eb742", 2425 | "reference": "2727aa35fddfada1dd37599948528e9b152eb742", 2426 | "shasum": "" 2427 | }, 2428 | "require": { 2429 | "php": ">=7.1.3" 2430 | }, 2431 | "type": "library", 2432 | "extra": { 2433 | "branch-alias": { 2434 | "dev-master": "4.4-dev" 2435 | } 2436 | }, 2437 | "autoload": { 2438 | "psr-4": { 2439 | "Symfony\\Component\\Finder\\": "" 2440 | }, 2441 | "exclude-from-classmap": [ 2442 | "/Tests/" 2443 | ] 2444 | }, 2445 | "notification-url": "https://packagist.org/downloads/", 2446 | "license": [ 2447 | "MIT" 2448 | ], 2449 | "authors": [ 2450 | { 2451 | "name": "Fabien Potencier", 2452 | "email": "fabien@symfony.com" 2453 | }, 2454 | { 2455 | "name": "Symfony Community", 2456 | "homepage": "https://symfony.com/contributors" 2457 | } 2458 | ], 2459 | "description": "Symfony Finder Component", 2460 | "homepage": "https://symfony.com", 2461 | "funding": [ 2462 | { 2463 | "url": "https://symfony.com/sponsor", 2464 | "type": "custom" 2465 | }, 2466 | { 2467 | "url": "https://github.com/fabpot", 2468 | "type": "github" 2469 | }, 2470 | { 2471 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2472 | "type": "tidelift" 2473 | } 2474 | ], 2475 | "time": "2020-07-05T09:39:30+00:00" 2476 | }, 2477 | { 2478 | "name": "symfony/options-resolver", 2479 | "version": "v4.4.11", 2480 | "source": { 2481 | "type": "git", 2482 | "url": "https://github.com/symfony/options-resolver.git", 2483 | "reference": "376bd3a02e7946dbf90b01563361b47dde425025" 2484 | }, 2485 | "dist": { 2486 | "type": "zip", 2487 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/376bd3a02e7946dbf90b01563361b47dde425025", 2488 | "reference": "376bd3a02e7946dbf90b01563361b47dde425025", 2489 | "shasum": "" 2490 | }, 2491 | "require": { 2492 | "php": ">=7.1.3" 2493 | }, 2494 | "type": "library", 2495 | "extra": { 2496 | "branch-alias": { 2497 | "dev-master": "4.4-dev" 2498 | } 2499 | }, 2500 | "autoload": { 2501 | "psr-4": { 2502 | "Symfony\\Component\\OptionsResolver\\": "" 2503 | }, 2504 | "exclude-from-classmap": [ 2505 | "/Tests/" 2506 | ] 2507 | }, 2508 | "notification-url": "https://packagist.org/downloads/", 2509 | "license": [ 2510 | "MIT" 2511 | ], 2512 | "authors": [ 2513 | { 2514 | "name": "Fabien Potencier", 2515 | "email": "fabien@symfony.com" 2516 | }, 2517 | { 2518 | "name": "Symfony Community", 2519 | "homepage": "https://symfony.com/contributors" 2520 | } 2521 | ], 2522 | "description": "Symfony OptionsResolver Component", 2523 | "homepage": "https://symfony.com", 2524 | "keywords": [ 2525 | "config", 2526 | "configuration", 2527 | "options" 2528 | ], 2529 | "funding": [ 2530 | { 2531 | "url": "https://symfony.com/sponsor", 2532 | "type": "custom" 2533 | }, 2534 | { 2535 | "url": "https://github.com/fabpot", 2536 | "type": "github" 2537 | }, 2538 | { 2539 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2540 | "type": "tidelift" 2541 | } 2542 | ], 2543 | "time": "2020-07-10T09:12:14+00:00" 2544 | }, 2545 | { 2546 | "name": "symfony/polyfill-ctype", 2547 | "version": "v1.18.1", 2548 | "source": { 2549 | "type": "git", 2550 | "url": "https://github.com/symfony/polyfill-ctype.git", 2551 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" 2552 | }, 2553 | "dist": { 2554 | "type": "zip", 2555 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", 2556 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", 2557 | "shasum": "" 2558 | }, 2559 | "require": { 2560 | "php": ">=5.3.3" 2561 | }, 2562 | "suggest": { 2563 | "ext-ctype": "For best performance" 2564 | }, 2565 | "type": "library", 2566 | "extra": { 2567 | "branch-alias": { 2568 | "dev-master": "1.18-dev" 2569 | }, 2570 | "thanks": { 2571 | "name": "symfony/polyfill", 2572 | "url": "https://github.com/symfony/polyfill" 2573 | } 2574 | }, 2575 | "autoload": { 2576 | "psr-4": { 2577 | "Symfony\\Polyfill\\Ctype\\": "" 2578 | }, 2579 | "files": [ 2580 | "bootstrap.php" 2581 | ] 2582 | }, 2583 | "notification-url": "https://packagist.org/downloads/", 2584 | "license": [ 2585 | "MIT" 2586 | ], 2587 | "authors": [ 2588 | { 2589 | "name": "Gert de Pagter", 2590 | "email": "BackEndTea@gmail.com" 2591 | }, 2592 | { 2593 | "name": "Symfony Community", 2594 | "homepage": "https://symfony.com/contributors" 2595 | } 2596 | ], 2597 | "description": "Symfony polyfill for ctype functions", 2598 | "homepage": "https://symfony.com", 2599 | "keywords": [ 2600 | "compatibility", 2601 | "ctype", 2602 | "polyfill", 2603 | "portable" 2604 | ], 2605 | "funding": [ 2606 | { 2607 | "url": "https://symfony.com/sponsor", 2608 | "type": "custom" 2609 | }, 2610 | { 2611 | "url": "https://github.com/fabpot", 2612 | "type": "github" 2613 | }, 2614 | { 2615 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2616 | "type": "tidelift" 2617 | } 2618 | ], 2619 | "time": "2020-07-14T12:35:20+00:00" 2620 | }, 2621 | { 2622 | "name": "symfony/polyfill-mbstring", 2623 | "version": "v1.18.1", 2624 | "source": { 2625 | "type": "git", 2626 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2627 | "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" 2628 | }, 2629 | "dist": { 2630 | "type": "zip", 2631 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", 2632 | "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", 2633 | "shasum": "" 2634 | }, 2635 | "require": { 2636 | "php": ">=5.3.3" 2637 | }, 2638 | "suggest": { 2639 | "ext-mbstring": "For best performance" 2640 | }, 2641 | "type": "library", 2642 | "extra": { 2643 | "branch-alias": { 2644 | "dev-master": "1.18-dev" 2645 | }, 2646 | "thanks": { 2647 | "name": "symfony/polyfill", 2648 | "url": "https://github.com/symfony/polyfill" 2649 | } 2650 | }, 2651 | "autoload": { 2652 | "psr-4": { 2653 | "Symfony\\Polyfill\\Mbstring\\": "" 2654 | }, 2655 | "files": [ 2656 | "bootstrap.php" 2657 | ] 2658 | }, 2659 | "notification-url": "https://packagist.org/downloads/", 2660 | "license": [ 2661 | "MIT" 2662 | ], 2663 | "authors": [ 2664 | { 2665 | "name": "Nicolas Grekas", 2666 | "email": "p@tchwork.com" 2667 | }, 2668 | { 2669 | "name": "Symfony Community", 2670 | "homepage": "https://symfony.com/contributors" 2671 | } 2672 | ], 2673 | "description": "Symfony polyfill for the Mbstring extension", 2674 | "homepage": "https://symfony.com", 2675 | "keywords": [ 2676 | "compatibility", 2677 | "mbstring", 2678 | "polyfill", 2679 | "portable", 2680 | "shim" 2681 | ], 2682 | "funding": [ 2683 | { 2684 | "url": "https://symfony.com/sponsor", 2685 | "type": "custom" 2686 | }, 2687 | { 2688 | "url": "https://github.com/fabpot", 2689 | "type": "github" 2690 | }, 2691 | { 2692 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2693 | "type": "tidelift" 2694 | } 2695 | ], 2696 | "time": "2020-07-14T12:35:20+00:00" 2697 | }, 2698 | { 2699 | "name": "symfony/polyfill-php70", 2700 | "version": "v1.18.1", 2701 | "source": { 2702 | "type": "git", 2703 | "url": "https://github.com/symfony/polyfill-php70.git", 2704 | "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3" 2705 | }, 2706 | "dist": { 2707 | "type": "zip", 2708 | "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", 2709 | "reference": "0dd93f2c578bdc9c72697eaa5f1dd25644e618d3", 2710 | "shasum": "" 2711 | }, 2712 | "require": { 2713 | "paragonie/random_compat": "~1.0|~2.0|~9.99", 2714 | "php": ">=5.3.3" 2715 | }, 2716 | "type": "library", 2717 | "extra": { 2718 | "branch-alias": { 2719 | "dev-master": "1.18-dev" 2720 | }, 2721 | "thanks": { 2722 | "name": "symfony/polyfill", 2723 | "url": "https://github.com/symfony/polyfill" 2724 | } 2725 | }, 2726 | "autoload": { 2727 | "psr-4": { 2728 | "Symfony\\Polyfill\\Php70\\": "" 2729 | }, 2730 | "files": [ 2731 | "bootstrap.php" 2732 | ], 2733 | "classmap": [ 2734 | "Resources/stubs" 2735 | ] 2736 | }, 2737 | "notification-url": "https://packagist.org/downloads/", 2738 | "license": [ 2739 | "MIT" 2740 | ], 2741 | "authors": [ 2742 | { 2743 | "name": "Nicolas Grekas", 2744 | "email": "p@tchwork.com" 2745 | }, 2746 | { 2747 | "name": "Symfony Community", 2748 | "homepage": "https://symfony.com/contributors" 2749 | } 2750 | ], 2751 | "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions", 2752 | "homepage": "https://symfony.com", 2753 | "keywords": [ 2754 | "compatibility", 2755 | "polyfill", 2756 | "portable", 2757 | "shim" 2758 | ], 2759 | "funding": [ 2760 | { 2761 | "url": "https://symfony.com/sponsor", 2762 | "type": "custom" 2763 | }, 2764 | { 2765 | "url": "https://github.com/fabpot", 2766 | "type": "github" 2767 | }, 2768 | { 2769 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2770 | "type": "tidelift" 2771 | } 2772 | ], 2773 | "time": "2020-07-14T12:35:20+00:00" 2774 | }, 2775 | { 2776 | "name": "symfony/polyfill-php72", 2777 | "version": "v1.18.1", 2778 | "source": { 2779 | "type": "git", 2780 | "url": "https://github.com/symfony/polyfill-php72.git", 2781 | "reference": "639447d008615574653fb3bc60d1986d7172eaae" 2782 | }, 2783 | "dist": { 2784 | "type": "zip", 2785 | "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/639447d008615574653fb3bc60d1986d7172eaae", 2786 | "reference": "639447d008615574653fb3bc60d1986d7172eaae", 2787 | "shasum": "" 2788 | }, 2789 | "require": { 2790 | "php": ">=5.3.3" 2791 | }, 2792 | "type": "library", 2793 | "extra": { 2794 | "branch-alias": { 2795 | "dev-master": "1.18-dev" 2796 | }, 2797 | "thanks": { 2798 | "name": "symfony/polyfill", 2799 | "url": "https://github.com/symfony/polyfill" 2800 | } 2801 | }, 2802 | "autoload": { 2803 | "psr-4": { 2804 | "Symfony\\Polyfill\\Php72\\": "" 2805 | }, 2806 | "files": [ 2807 | "bootstrap.php" 2808 | ] 2809 | }, 2810 | "notification-url": "https://packagist.org/downloads/", 2811 | "license": [ 2812 | "MIT" 2813 | ], 2814 | "authors": [ 2815 | { 2816 | "name": "Nicolas Grekas", 2817 | "email": "p@tchwork.com" 2818 | }, 2819 | { 2820 | "name": "Symfony Community", 2821 | "homepage": "https://symfony.com/contributors" 2822 | } 2823 | ], 2824 | "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", 2825 | "homepage": "https://symfony.com", 2826 | "keywords": [ 2827 | "compatibility", 2828 | "polyfill", 2829 | "portable", 2830 | "shim" 2831 | ], 2832 | "funding": [ 2833 | { 2834 | "url": "https://symfony.com/sponsor", 2835 | "type": "custom" 2836 | }, 2837 | { 2838 | "url": "https://github.com/fabpot", 2839 | "type": "github" 2840 | }, 2841 | { 2842 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2843 | "type": "tidelift" 2844 | } 2845 | ], 2846 | "time": "2020-07-14T12:35:20+00:00" 2847 | }, 2848 | { 2849 | "name": "symfony/polyfill-php73", 2850 | "version": "v1.18.1", 2851 | "source": { 2852 | "type": "git", 2853 | "url": "https://github.com/symfony/polyfill-php73.git", 2854 | "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" 2855 | }, 2856 | "dist": { 2857 | "type": "zip", 2858 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", 2859 | "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", 2860 | "shasum": "" 2861 | }, 2862 | "require": { 2863 | "php": ">=5.3.3" 2864 | }, 2865 | "type": "library", 2866 | "extra": { 2867 | "branch-alias": { 2868 | "dev-master": "1.18-dev" 2869 | }, 2870 | "thanks": { 2871 | "name": "symfony/polyfill", 2872 | "url": "https://github.com/symfony/polyfill" 2873 | } 2874 | }, 2875 | "autoload": { 2876 | "psr-4": { 2877 | "Symfony\\Polyfill\\Php73\\": "" 2878 | }, 2879 | "files": [ 2880 | "bootstrap.php" 2881 | ], 2882 | "classmap": [ 2883 | "Resources/stubs" 2884 | ] 2885 | }, 2886 | "notification-url": "https://packagist.org/downloads/", 2887 | "license": [ 2888 | "MIT" 2889 | ], 2890 | "authors": [ 2891 | { 2892 | "name": "Nicolas Grekas", 2893 | "email": "p@tchwork.com" 2894 | }, 2895 | { 2896 | "name": "Symfony Community", 2897 | "homepage": "https://symfony.com/contributors" 2898 | } 2899 | ], 2900 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 2901 | "homepage": "https://symfony.com", 2902 | "keywords": [ 2903 | "compatibility", 2904 | "polyfill", 2905 | "portable", 2906 | "shim" 2907 | ], 2908 | "funding": [ 2909 | { 2910 | "url": "https://symfony.com/sponsor", 2911 | "type": "custom" 2912 | }, 2913 | { 2914 | "url": "https://github.com/fabpot", 2915 | "type": "github" 2916 | }, 2917 | { 2918 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2919 | "type": "tidelift" 2920 | } 2921 | ], 2922 | "time": "2020-07-14T12:35:20+00:00" 2923 | }, 2924 | { 2925 | "name": "symfony/polyfill-php80", 2926 | "version": "v1.18.1", 2927 | "source": { 2928 | "type": "git", 2929 | "url": "https://github.com/symfony/polyfill-php80.git", 2930 | "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" 2931 | }, 2932 | "dist": { 2933 | "type": "zip", 2934 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", 2935 | "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", 2936 | "shasum": "" 2937 | }, 2938 | "require": { 2939 | "php": ">=7.0.8" 2940 | }, 2941 | "type": "library", 2942 | "extra": { 2943 | "branch-alias": { 2944 | "dev-master": "1.18-dev" 2945 | }, 2946 | "thanks": { 2947 | "name": "symfony/polyfill", 2948 | "url": "https://github.com/symfony/polyfill" 2949 | } 2950 | }, 2951 | "autoload": { 2952 | "psr-4": { 2953 | "Symfony\\Polyfill\\Php80\\": "" 2954 | }, 2955 | "files": [ 2956 | "bootstrap.php" 2957 | ], 2958 | "classmap": [ 2959 | "Resources/stubs" 2960 | ] 2961 | }, 2962 | "notification-url": "https://packagist.org/downloads/", 2963 | "license": [ 2964 | "MIT" 2965 | ], 2966 | "authors": [ 2967 | { 2968 | "name": "Ion Bazan", 2969 | "email": "ion.bazan@gmail.com" 2970 | }, 2971 | { 2972 | "name": "Nicolas Grekas", 2973 | "email": "p@tchwork.com" 2974 | }, 2975 | { 2976 | "name": "Symfony Community", 2977 | "homepage": "https://symfony.com/contributors" 2978 | } 2979 | ], 2980 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2981 | "homepage": "https://symfony.com", 2982 | "keywords": [ 2983 | "compatibility", 2984 | "polyfill", 2985 | "portable", 2986 | "shim" 2987 | ], 2988 | "funding": [ 2989 | { 2990 | "url": "https://symfony.com/sponsor", 2991 | "type": "custom" 2992 | }, 2993 | { 2994 | "url": "https://github.com/fabpot", 2995 | "type": "github" 2996 | }, 2997 | { 2998 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2999 | "type": "tidelift" 3000 | } 3001 | ], 3002 | "time": "2020-07-14T12:35:20+00:00" 3003 | }, 3004 | { 3005 | "name": "symfony/process", 3006 | "version": "v4.4.11", 3007 | "source": { 3008 | "type": "git", 3009 | "url": "https://github.com/symfony/process.git", 3010 | "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479" 3011 | }, 3012 | "dist": { 3013 | "type": "zip", 3014 | "url": "https://api.github.com/repos/symfony/process/zipball/65e70bab62f3da7089a8d4591fb23fbacacb3479", 3015 | "reference": "65e70bab62f3da7089a8d4591fb23fbacacb3479", 3016 | "shasum": "" 3017 | }, 3018 | "require": { 3019 | "php": ">=7.1.3" 3020 | }, 3021 | "type": "library", 3022 | "extra": { 3023 | "branch-alias": { 3024 | "dev-master": "4.4-dev" 3025 | } 3026 | }, 3027 | "autoload": { 3028 | "psr-4": { 3029 | "Symfony\\Component\\Process\\": "" 3030 | }, 3031 | "exclude-from-classmap": [ 3032 | "/Tests/" 3033 | ] 3034 | }, 3035 | "notification-url": "https://packagist.org/downloads/", 3036 | "license": [ 3037 | "MIT" 3038 | ], 3039 | "authors": [ 3040 | { 3041 | "name": "Fabien Potencier", 3042 | "email": "fabien@symfony.com" 3043 | }, 3044 | { 3045 | "name": "Symfony Community", 3046 | "homepage": "https://symfony.com/contributors" 3047 | } 3048 | ], 3049 | "description": "Symfony Process Component", 3050 | "homepage": "https://symfony.com", 3051 | "funding": [ 3052 | { 3053 | "url": "https://symfony.com/sponsor", 3054 | "type": "custom" 3055 | }, 3056 | { 3057 | "url": "https://github.com/fabpot", 3058 | "type": "github" 3059 | }, 3060 | { 3061 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3062 | "type": "tidelift" 3063 | } 3064 | ], 3065 | "time": "2020-07-23T08:31:43+00:00" 3066 | }, 3067 | { 3068 | "name": "symfony/service-contracts", 3069 | "version": "v1.1.9", 3070 | "source": { 3071 | "type": "git", 3072 | "url": "https://github.com/symfony/service-contracts.git", 3073 | "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" 3074 | }, 3075 | "dist": { 3076 | "type": "zip", 3077 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", 3078 | "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", 3079 | "shasum": "" 3080 | }, 3081 | "require": { 3082 | "php": ">=7.1.3", 3083 | "psr/container": "^1.0" 3084 | }, 3085 | "suggest": { 3086 | "symfony/service-implementation": "" 3087 | }, 3088 | "type": "library", 3089 | "extra": { 3090 | "branch-alias": { 3091 | "dev-master": "1.1-dev" 3092 | }, 3093 | "thanks": { 3094 | "name": "symfony/contracts", 3095 | "url": "https://github.com/symfony/contracts" 3096 | } 3097 | }, 3098 | "autoload": { 3099 | "psr-4": { 3100 | "Symfony\\Contracts\\Service\\": "" 3101 | } 3102 | }, 3103 | "notification-url": "https://packagist.org/downloads/", 3104 | "license": [ 3105 | "MIT" 3106 | ], 3107 | "authors": [ 3108 | { 3109 | "name": "Nicolas Grekas", 3110 | "email": "p@tchwork.com" 3111 | }, 3112 | { 3113 | "name": "Symfony Community", 3114 | "homepage": "https://symfony.com/contributors" 3115 | } 3116 | ], 3117 | "description": "Generic abstractions related to writing services", 3118 | "homepage": "https://symfony.com", 3119 | "keywords": [ 3120 | "abstractions", 3121 | "contracts", 3122 | "decoupling", 3123 | "interfaces", 3124 | "interoperability", 3125 | "standards" 3126 | ], 3127 | "funding": [ 3128 | { 3129 | "url": "https://symfony.com/sponsor", 3130 | "type": "custom" 3131 | }, 3132 | { 3133 | "url": "https://github.com/fabpot", 3134 | "type": "github" 3135 | }, 3136 | { 3137 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3138 | "type": "tidelift" 3139 | } 3140 | ], 3141 | "time": "2020-07-06T13:19:58+00:00" 3142 | }, 3143 | { 3144 | "name": "symfony/stopwatch", 3145 | "version": "v4.4.11", 3146 | "source": { 3147 | "type": "git", 3148 | "url": "https://github.com/symfony/stopwatch.git", 3149 | "reference": "f51fb90df1154a7f75987198a9689e28f91e6a50" 3150 | }, 3151 | "dist": { 3152 | "type": "zip", 3153 | "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f51fb90df1154a7f75987198a9689e28f91e6a50", 3154 | "reference": "f51fb90df1154a7f75987198a9689e28f91e6a50", 3155 | "shasum": "" 3156 | }, 3157 | "require": { 3158 | "php": ">=7.1.3", 3159 | "symfony/service-contracts": "^1.0|^2" 3160 | }, 3161 | "type": "library", 3162 | "extra": { 3163 | "branch-alias": { 3164 | "dev-master": "4.4-dev" 3165 | } 3166 | }, 3167 | "autoload": { 3168 | "psr-4": { 3169 | "Symfony\\Component\\Stopwatch\\": "" 3170 | }, 3171 | "exclude-from-classmap": [ 3172 | "/Tests/" 3173 | ] 3174 | }, 3175 | "notification-url": "https://packagist.org/downloads/", 3176 | "license": [ 3177 | "MIT" 3178 | ], 3179 | "authors": [ 3180 | { 3181 | "name": "Fabien Potencier", 3182 | "email": "fabien@symfony.com" 3183 | }, 3184 | { 3185 | "name": "Symfony Community", 3186 | "homepage": "https://symfony.com/contributors" 3187 | } 3188 | ], 3189 | "description": "Symfony Stopwatch Component", 3190 | "homepage": "https://symfony.com", 3191 | "funding": [ 3192 | { 3193 | "url": "https://symfony.com/sponsor", 3194 | "type": "custom" 3195 | }, 3196 | { 3197 | "url": "https://github.com/fabpot", 3198 | "type": "github" 3199 | }, 3200 | { 3201 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3202 | "type": "tidelift" 3203 | } 3204 | ], 3205 | "time": "2020-05-20T08:37:50+00:00" 3206 | }, 3207 | { 3208 | "name": "theseer/tokenizer", 3209 | "version": "1.2.0", 3210 | "source": { 3211 | "type": "git", 3212 | "url": "https://github.com/theseer/tokenizer.git", 3213 | "reference": "75a63c33a8577608444246075ea0af0d052e452a" 3214 | }, 3215 | "dist": { 3216 | "type": "zip", 3217 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", 3218 | "reference": "75a63c33a8577608444246075ea0af0d052e452a", 3219 | "shasum": "" 3220 | }, 3221 | "require": { 3222 | "ext-dom": "*", 3223 | "ext-tokenizer": "*", 3224 | "ext-xmlwriter": "*", 3225 | "php": "^7.2 || ^8.0" 3226 | }, 3227 | "type": "library", 3228 | "autoload": { 3229 | "classmap": [ 3230 | "src/" 3231 | ] 3232 | }, 3233 | "notification-url": "https://packagist.org/downloads/", 3234 | "license": [ 3235 | "BSD-3-Clause" 3236 | ], 3237 | "authors": [ 3238 | { 3239 | "name": "Arne Blankerts", 3240 | "email": "arne@blankerts.de", 3241 | "role": "Developer" 3242 | } 3243 | ], 3244 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3245 | "funding": [ 3246 | { 3247 | "url": "https://github.com/theseer", 3248 | "type": "github" 3249 | } 3250 | ], 3251 | "time": "2020-07-12T23:59:07+00:00" 3252 | }, 3253 | { 3254 | "name": "webmozart/assert", 3255 | "version": "1.9.1", 3256 | "source": { 3257 | "type": "git", 3258 | "url": "https://github.com/webmozart/assert.git", 3259 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" 3260 | }, 3261 | "dist": { 3262 | "type": "zip", 3263 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", 3264 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", 3265 | "shasum": "" 3266 | }, 3267 | "require": { 3268 | "php": "^5.3.3 || ^7.0 || ^8.0", 3269 | "symfony/polyfill-ctype": "^1.8" 3270 | }, 3271 | "conflict": { 3272 | "phpstan/phpstan": "<0.12.20", 3273 | "vimeo/psalm": "<3.9.1" 3274 | }, 3275 | "require-dev": { 3276 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 3277 | }, 3278 | "type": "library", 3279 | "autoload": { 3280 | "psr-4": { 3281 | "Webmozart\\Assert\\": "src/" 3282 | } 3283 | }, 3284 | "notification-url": "https://packagist.org/downloads/", 3285 | "license": [ 3286 | "MIT" 3287 | ], 3288 | "authors": [ 3289 | { 3290 | "name": "Bernhard Schussek", 3291 | "email": "bschussek@gmail.com" 3292 | } 3293 | ], 3294 | "description": "Assertions to validate method input/output with nice error messages.", 3295 | "keywords": [ 3296 | "assert", 3297 | "check", 3298 | "validate" 3299 | ], 3300 | "time": "2020-07-08T17:02:28+00:00" 3301 | } 3302 | ], 3303 | "aliases": [], 3304 | "minimum-stability": "stable", 3305 | "stability-flags": [], 3306 | "prefer-stable": false, 3307 | "prefer-lowest": false, 3308 | "platform": { 3309 | "php": ">=7.2" 3310 | }, 3311 | "platform-dev": [], 3312 | "platform-overrides": { 3313 | "php": "7.2" 3314 | }, 3315 | "plugin-api-version": "1.1.0" 3316 | } 3317 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | test/suite 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | src 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/Generator.php: -------------------------------------------------------------------------------- 1 | setMaximumLength($maximumLength); 22 | $this->setMaximumDepth($maximumDepth); 23 | $this->setMaximumElements($maximumElements); 24 | } 25 | 26 | /** 27 | * Generate a string representation for an arbitrary value. 28 | * 29 | * @param mixed $value The value to represent. 30 | * @param int $currentDepth The current depth in the representation string. 31 | * 32 | * @return string A short human-readable string representation of the given value. 33 | */ 34 | public function generate($value, int $currentDepth = 0): string 35 | { 36 | if (is_array($value)) { 37 | return $this->renderArray($value, $currentDepth); 38 | } elseif (is_object($value)) { 39 | return $this->renderObject($value, $currentDepth); 40 | } elseif (is_resource($value)) { 41 | return $this->renderResource($value, $currentDepth); 42 | } elseif (is_string($value)) { 43 | return $this->renderString($value, $currentDepth); 44 | } elseif (is_float($value)) { 45 | return $this->renderFloat($value, $currentDepth); 46 | } else { 47 | return $this->renderOther($value, $currentDepth); 48 | } 49 | } 50 | 51 | /** 52 | * @return int The maximum number of characters to display when representing a string. 53 | */ 54 | public function maximumLength(): int 55 | { 56 | return $this->maximumLength; 57 | } 58 | 59 | /** 60 | * @param int $maximum The maximum number of characters to display when representing a string. 61 | */ 62 | public function setMaximumLength(int $maximum) 63 | { 64 | $this->maximumLength = $maximum; 65 | } 66 | 67 | /** 68 | * @return int The maximum depth to represent for nested types. 69 | */ 70 | public function maximumDepth(): int 71 | { 72 | return $this->maximumDepth; 73 | } 74 | 75 | /** 76 | * @param int $maximum The maximum depth to represent for nested types. 77 | */ 78 | public function setMaximumDepth(int $maximum) 79 | { 80 | $this->maximumDepth = $maximum; 81 | } 82 | 83 | /** 84 | * @return int The maximum number of elements to include in representations of container types. 85 | */ 86 | public function maximumElements(): int 87 | { 88 | return $this->maximumElements; 89 | } 90 | 91 | /** 92 | * @param int $maximum The maximum number of elements to include in representations of container types. 93 | */ 94 | public function setMaximumElements(int $maximum) 95 | { 96 | $this->maximumElements = $maximum; 97 | } 98 | 99 | /** 100 | * Render a list of values. 101 | * 102 | * @param iterable $value The iterable containing the elements. 103 | * @param int $currentDepth The current rendering depth. 104 | * @param string $separator The separator to use between elements. 105 | */ 106 | public function renderValueList(iterable $value, int $currentDepth = 0, string $separator = ', '): string 107 | { 108 | $elements = []; 109 | 110 | $counter = 0; 111 | foreach ($value as $element) { 112 | $elements[] = $this->generate($element, $currentDepth); 113 | } 114 | 115 | return implode($separator, $elements); 116 | } 117 | 118 | /** 119 | * Render a list of keys and values. 120 | * 121 | * @param iterable $value The iterable containing the elements. 122 | * @param int $currentDepth The current rendering depth. 123 | * @param string $separator The separator to use between elements. 124 | * @param string $keySeparator The separator to use between key and value. 125 | */ 126 | public function renderKeyValueList(iterable $value, int $currentDepth = 0, string $separator = ', ', string $keySeparator = ' => '): string 127 | { 128 | $elements = []; 129 | 130 | foreach ($value as $key => $element) { 131 | $elements[] = $this->generate($key, $currentDepth) . $keySeparator . $this->generate($element, $currentDepth); 132 | } 133 | 134 | return implode($separator, $elements); 135 | } 136 | 137 | /** 138 | * @param array $value 139 | * @param int $currentDepth 140 | * 141 | * @return string 142 | */ 143 | protected function renderArray(array $value, int $currentDepth = 0): string 144 | { 145 | $size = count($value); 146 | $vector = array_keys($value) === range(0, $size - 1); 147 | $more = ''; 148 | 149 | if (0 === $size) { 150 | return '[]'; 151 | } elseif ($this->maximumDepth() === $currentDepth) { 152 | return sprintf('[<%d>]', $size); 153 | } elseif ($this->maximumElements() < $size) { 154 | $value = array_slice($value, 0, $this->maximumElements()); 155 | $more = sprintf(', <+%d>', $size - $this->maximumElements()); 156 | } 157 | 158 | if ($vector) { 159 | $elements = $this->renderValueList($value, $currentDepth + 1); 160 | } else { 161 | $elements = $this->renderKeyValueList($value, $currentDepth + 1); 162 | } 163 | 164 | return '[' . $elements . $more . ']'; 165 | } 166 | 167 | /** 168 | * @param object $value 169 | * @param int $currentDepth 170 | * 171 | * @return string 172 | */ 173 | protected function renderObject(object $value, int $currentDepth = 0): string 174 | { 175 | if ($value instanceof RepresentableInterface) { 176 | return $value->stringRepresentation($this, $currentDepth); 177 | } 178 | 179 | $reflector = new ReflectionClass($value); 180 | if ($reflector->hasMethod('__toString')) { 181 | $string = ' ' . $this->renderString($value->__toString(), $currentDepth); 182 | } else { 183 | $string = ''; 184 | } 185 | 186 | return sprintf( 187 | '<%s%s @ %s>', 188 | get_class($value), 189 | $string, 190 | spl_object_hash($value) 191 | ); 192 | } 193 | 194 | /** 195 | * @param resource $value 196 | * @param int $currentDepth 197 | * 198 | * @return string 199 | */ 200 | protected function renderResource($value, int $currentDepth = 0): string 201 | { 202 | $type = get_resource_type($value); 203 | if ('stream' === $type) { 204 | $metaData = stream_get_meta_data($value); 205 | $info = ' ' . $metaData['mode']; 206 | } else { 207 | $info = ''; 208 | } 209 | 210 | return sprintf( 211 | '', 212 | $type, 213 | $value, 214 | $info 215 | ); 216 | } 217 | 218 | /** 219 | * @param string $value 220 | * @param int $currentDepth 221 | * 222 | * @return string 223 | */ 224 | protected function renderString(string $value, int $currentDepth = 0): string 225 | { 226 | $length = strlen($value); 227 | $open = '"'; 228 | $close = '"'; 229 | 230 | if ($length > $this->maximumLength()) { 231 | $close = '...'; 232 | $length = $this->maximumLength(); 233 | } 234 | 235 | $repr = ''; 236 | 237 | for ($index = 0; $index < $length; ++$index) { 238 | $ch = $value[$index]; 239 | 240 | if ($ch === "\n") { 241 | $ch = '\n'; 242 | } elseif ($ch === "\r") { 243 | $ch = '\r'; 244 | } elseif ($ch === "\t") { 245 | $ch = '\t'; 246 | } elseif ($ch === "\v") { 247 | $ch = '\v'; 248 | } elseif (version_compare(PHP_VERSION, '5.4.0', '>=') && $ch === "\e") { 249 | $ch = '\e'; 250 | } elseif ($ch === "\f") { 251 | $ch = '\f'; 252 | } elseif ($ch === '\\') { 253 | $ch = '\\\\'; 254 | } elseif ($ch === '$') { 255 | $ch = '\$'; 256 | } elseif ($ch === '"') { 257 | $ch = '\"'; 258 | } elseif (!ctype_print($ch)) { 259 | $ch = sprintf('\x%02x', ord($ch)); 260 | } 261 | 262 | $repr .= $ch; 263 | } 264 | 265 | return $open . $repr . $close; 266 | } 267 | 268 | /** 269 | * @param float $value 270 | * @param int $currentDepth 271 | * 272 | * @return string 273 | */ 274 | protected function renderFloat(float $value, int $currentDepth = 0): string 275 | { 276 | if (0.0 === fmod($value, 1.0)) { 277 | return $value . '.0'; 278 | } 279 | 280 | return strval($value); 281 | } 282 | 283 | /** 284 | * @param mixed $value 285 | * @param int $currentDepth 286 | * 287 | * @return string 288 | */ 289 | protected function renderOther($value, int $currentDepth = 0): string 290 | { 291 | return strtolower(var_export($value, true)); 292 | } 293 | 294 | private $maximumLength; 295 | private $maximumDepth; 296 | private $maximumElements; 297 | } 298 | -------------------------------------------------------------------------------- /src/Repr.php: -------------------------------------------------------------------------------- 1 | generate($value); 22 | } 23 | 24 | /** 25 | * Install a custom generator. 26 | * 27 | * @param Generator $generator 28 | */ 29 | public static function install(Generator $generator): void 30 | { 31 | self::$generator = $generator; 32 | } 33 | 34 | /** 35 | * Fetch the currently installed Generator instance. 36 | * 37 | * If no instance was previously installed, a default constructed instance of {@see Generator} is installed and returned. 38 | * 39 | * @return Generator 40 | */ 41 | public static function instance(): Generator 42 | { 43 | if (null === self::$generator) { 44 | self::install(new Generator()); 45 | } 46 | 47 | return self::$generator; 48 | } 49 | 50 | private static $generator; 51 | } 52 | -------------------------------------------------------------------------------- /src/RepresentableInterface.php: -------------------------------------------------------------------------------- 1 | _generator = new Generator(); 15 | } 16 | 17 | public function testNull() 18 | { 19 | $this->assertSame('null', $this->_generator->generate(null)); 20 | } 21 | 22 | public function testArrayEmpty() 23 | { 24 | $this->assertSame('[]', $this->_generator->generate([])); 25 | } 26 | 27 | public function testArrayVector() 28 | { 29 | $this->assertSame( 30 | '[1, 2, 3]', 31 | $this->_generator->generate( 32 | [1, 2, 3] 33 | ) 34 | ); 35 | } 36 | 37 | public function testArrayAssociative() 38 | { 39 | $this->assertSame( 40 | '["a" => 1, "b" => 2, "c" => 3]', 41 | $this->_generator->generate( 42 | ['a' => 1, 'b' => 2, 'c' => 3] 43 | ) 44 | ); 45 | } 46 | 47 | public function testArrayTrimmedVector() 48 | { 49 | $this->assertSame( 50 | '["foo", "bar", "spam", <+2>]', 51 | $this->_generator->generate( 52 | ['foo', 'bar', 'spam', 'doom', 'quux'] 53 | ) 54 | ); 55 | } 56 | 57 | public function testArrayTrimmedAssociative() 58 | { 59 | $this->assertSame( 60 | '["a" => 1, "b" => 2, "c" => 3, <+2>]', 61 | $this->_generator->generate( 62 | [ 63 | 'a' => 1, 64 | 'b' => 2, 65 | 'c' => 3, 66 | 'd' => 4, 67 | 'e' => 5, 68 | ] 69 | ) 70 | ); 71 | } 72 | 73 | public function testArrayNestedArraysAtMaximumDepth() 74 | { 75 | $input = [ 76 | [ 77 | [1, 2, 3], 78 | [4, 5, 6], 79 | [7, 8, 9], 80 | ], 81 | ]; 82 | 83 | $expected = '[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]'; 84 | $this->assertSame($expected, $this->_generator->generate($input)); 85 | } 86 | 87 | public function testArrayNestedArraysExceedingMaximumDepth() 88 | { 89 | $input = [ 90 | [ 91 | [ 92 | [1, 2, 3], 93 | [4, 5, 6], 94 | [7, 8, 9], 95 | ], 96 | ], 97 | ]; 98 | 99 | $expected = '[[[[<3>], [<3>], [<3>]]]]'; 100 | $this->assertSame($expected, $this->_generator->generate($input)); 101 | } 102 | 103 | public function testObject() 104 | { 105 | $object = new stdClass(); 106 | $this->assertSame('', $this->_generator->generate($object)); 107 | } 108 | 109 | public function testObjectWithToString() 110 | { 111 | $handle = Phony::mock(ReflectionClass::class); 112 | $handle->__toString->returns('foo'); 113 | $object = $handle->get(); 114 | 115 | $this->assertSame('<' . get_class($object) . ' "foo" @ ' . spl_object_hash($object) . '>', $this->_generator->generate($object)); 116 | } 117 | 118 | public function testRepresentableObject() 119 | { 120 | $handle = Phony::mock(RepresentableInterface::class); 121 | $handle->stringRepresentation->returns(''); 122 | $object = $handle->get(); 123 | 124 | $this->assertSame('', $this->_generator->generate($object)); 125 | 126 | $handle->stringRepresentation->calledWith($this->_generator, 0); 127 | } 128 | 129 | public function testStream() 130 | { 131 | $resource = fopen('php://memory', 'rb'); 132 | $this->assertSame('', $this->_generator->generate($resource)); 133 | } 134 | 135 | public function testResource() 136 | { 137 | $resource = stream_context_create(); 138 | $this->assertSame('', $this->_generator->generate($resource)); 139 | } 140 | 141 | public function testString() 142 | { 143 | $input = "foo\n\r\t\v\f\\\$\"\x00bar"; 144 | $expected = '"foo\n\r\t\v\f\\\\\$\"\x00bar"'; 145 | $this->assertSame($expected, $this->_generator->generate($input)); 146 | } 147 | 148 | public function testStringEscape() 149 | { 150 | if (version_compare(PHP_VERSION, '5.4.0', '<')) { 151 | $this->markTestSkipped('Requires PHP v5.4'); 152 | } 153 | $this->assertSame('"\e"', $this->_generator->generate("\e")); 154 | } 155 | 156 | public function testStringTrimmed() 157 | { 158 | $input = '01234567890123456789012345678901234567890123456789xxx'; 159 | $expected = '"01234567890123456789012345678901234567890123456789...'; 160 | $this->assertSame($expected, $this->_generator->generate($input)); 161 | } 162 | 163 | public function testInteger() 164 | { 165 | $this->assertSame('100', $this->_generator->generate(100)); 166 | } 167 | 168 | public function testFloat() 169 | { 170 | $this->assertSame('0.0', $this->_generator->generate(0.0)); 171 | $this->assertSame('0.05', $this->_generator->generate(0.05)); 172 | $this->assertSame('100.0', $this->_generator->generate(100.0)); 173 | $this->assertSame('100.25', $this->_generator->generate(100.25)); 174 | } 175 | 176 | public function testBoolean() 177 | { 178 | $this->assertSame('true', $this->_generator->generate(true)); 179 | $this->assertSame('false', $this->_generator->generate(false)); 180 | } 181 | } 182 | -------------------------------------------------------------------------------- /test/suite/ReprTest.php: -------------------------------------------------------------------------------- 1 | assertSame('"foo"', Repr::repr('foo')); 12 | } 13 | } 14 | --------------------------------------------------------------------------------