├── src ├── MemoHelper.php └── HasMemoization.php ├── phpunit.xml ├── LICENSE ├── composer.json ├── README.md └── composer.lock /src/MemoHelper.php: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests 10 | 11 | 12 | 13 | 14 | ./app 15 | ./src 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Zacharias Creutznacher 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 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laracraft-tech/memoize", 3 | "description": "Simple PHP trait to memoize function calls.", 4 | "type": "library", 5 | "authors": [ 6 | { 7 | "name": "Zacharias Creutznacher", 8 | "email": "zacharias.creutznacher@gmail.com" 9 | } 10 | ], 11 | "license": "MIT", 12 | "require": { 13 | "php": "^8.1", 14 | "spatie/once": "^3.1", 15 | "symfony/var-dumper": "^6.2" 16 | }, 17 | "require-dev": { 18 | "pestphp/pest": "^1.20", 19 | "laravel/pint": "^1.2" 20 | }, 21 | "autoload": { 22 | "psr-4": { 23 | "LaracraftTech\\Memoize\\": "src" 24 | } 25 | }, 26 | "autoload-dev": { 27 | "psr-4": { 28 | "LaracraftTech\\Memoize\\Tests\\": "tests" 29 | } 30 | }, 31 | "scripts": { 32 | "test": "vendor/bin/pest", 33 | "test-coverage": "vendor/bin/pest --coverage", 34 | "format": "vendor/bin/pint" 35 | }, 36 | "config": { 37 | "sort-packages": true, 38 | "allow-plugins": { 39 | "pestphp/pest-plugin": true, 40 | "phpstan/extension-installer": true 41 | } 42 | }, 43 | "minimum-stability": "dev", 44 | "prefer-stable": true 45 | } 46 | -------------------------------------------------------------------------------- /src/HasMemoization.php: -------------------------------------------------------------------------------- 1 | memoizationEnabled = true; 27 | } 28 | 29 | /** 30 | * @return void 31 | */ 32 | public function disableMemoization() 33 | { 34 | $this->memoizationEnabled = false; 35 | } 36 | 37 | public function isEnabledMemoization(): bool 38 | { 39 | if (isset($_ENV['MEMOIZATION_GLOBALLY_DISABLED'])) { 40 | return $_ENV['MEMOIZATION_GLOBALLY_DISABLED']; 41 | } 42 | 43 | return $this->memoizationEnabled; 44 | } 45 | 46 | /** 47 | * @return array|mixed 48 | * 49 | * @throws \ReflectionException 50 | */ 51 | public function memoize(callable $callback, array $customCombiArgs = []) 52 | { 53 | if (! $this->isEnabledMemoization()) { 54 | return $callback(); 55 | } 56 | 57 | $trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2); 58 | $prefix = $trace[1]['function'].'_'.$trace[0]['line']; 59 | 60 | // Since PHP 8.1 we can generate combination cache key by closure used variables, 61 | // if they are set and no combinationCacheKey was passed manually, we use them 62 | if (empty($customCombiArgs)) { 63 | $refFunc = new \ReflectionFunction($callback); 64 | $combiArgs = $refFunc->getClosureUsedVariables(); 65 | } else { 66 | $combiArgs = $customCombiArgs; 67 | } 68 | 69 | $hash = $this->getMemoCacheHash($combiArgs, $prefix); 70 | 71 | if (! array_key_exists($hash, $this->memoizationCache)) { 72 | $this->memoizationCache[$hash] = $callback(); 73 | } 74 | 75 | return $this->memoizationCache[$hash]; 76 | } 77 | 78 | private function getMemoCacheHash(array $arguments, string $prefix): string 79 | { 80 | $normalizedArguments = array_map(function ($argument) { 81 | return is_object($argument) ? spl_object_hash($argument) : $argument; 82 | }, $arguments); 83 | 84 | return md5($prefix.'_'.serialize($normalizedArguments)); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Memoize 2 | 3 | [![Latest Version on Packagist](https://img.shields.io/packagist/v/laracraft-tech/memoize.svg?style=flat-square)](https://packagist.org/packages/laracraft-tech/memoize) 4 | [![Tests](https://github.com/laracraft-tech/memoize/actions/workflows/run-tests.yml/badge.svg?branch=main)](https://github.com/laracraft-tech/memoize/actions/workflows/run-tests.yml) 5 | [![Check & fix styling](https://github.com/laracraft-tech/memoize/actions/workflows/fix-php-code-style-issues.yml/badge.svg?branch=main)](https://github.com/laracraft-tech/memoize/actions/workflows/fix-php-code-style-issues.yml) 6 | [![License](https://img.shields.io/packagist/l/laracraft-tech/memoize.svg?style=flat-square)](https://packagist.org/packages/laracraft-tech/memoize) 7 | 8 | 9 | ## Introduction 10 | 11 | This package provides you with a simple PHP trait, which adds high-performance [memoization](https://en.wikipedia.org/wiki/Memoization) to your classes! 12 | 13 | ## Installation 14 | 15 | ``` bash 16 | $ composer require laracraft-tech/memoize 17 | ``` 18 | 19 | 20 | ## Usage 21 | 22 | The `memoize` method accepts a `callable`. 23 | 24 | ```php 25 | use LaracraftTech\Memoize\HasMemoization; 26 | 27 | $myClass = new class() 28 | { 29 | use HasMemoization; 30 | 31 | public function getNumber(): int 32 | { 33 | return $this->memoize(function () { 34 | return rand(1, 10000); 35 | }); 36 | } 37 | }; 38 | ``` 39 | 40 | No matter how many times you run `$myClass->getNumber()` you'll always get the same number. 41 | 42 | The `memoize` method will only run **once per combination** of `use` variables the ***closure*** receives. 43 | 44 | ```php 45 | $myClass = new class() 46 | { 47 | use HasMemoization; 48 | 49 | public function getNumberForLetter($letter) 50 | { 51 | return $this->memoize(function () use ($letter) { 52 | return $letter . rand(1, 10000000); 53 | }); 54 | } 55 | } 56 | ``` 57 | 58 | So calling `$myClass->getNumberForLetter('A')` will always return the same result, but calling `$myClass->getNumberForLetter('B')` will return something else. 59 | 60 | Some memoization packages uses the arguments of the ***containing method*** for the **once per combination** idea. 61 | We think this feels a bit unintuitive and in certain circumstances will affect performance. So we use the `use` variables of the closure as the **once per combination** key. As a fallback, if you like/need to, we also let you fully self define your **once per combination** key in a second optional parameter of the closure. 62 | 63 | ```php 64 | use LaracraftTech\Memoize\HasMemoization; 65 | 66 | $myClass = new class() 67 | { 68 | use HasMemoization; 69 | 70 | public function processSomethingHeavy1($someModel) 71 | { 72 | // ... 73 | 74 | $relation = $this->memoize(function () use ($someModel) { 75 | return Foo::find($someModel->foo_relation_id); 76 | }, $someModel->foo_relation_id); // <--- custom once per combination key 77 | 78 | // ... 79 | } 80 | 81 | // you could also do something like this (maybe more convinient) 82 | public function processSomethingHeavy2($someModel) 83 | { 84 | // ... 85 | 86 | $foo_relation_id = $someModel->foo_relation_id; 87 | $relation = $this->memoize(function () use ($foo_relation_id) { 88 | return Foo::find($foo_relation_id); 89 | }); 90 | 91 | // ... 92 | } 93 | 94 | // this would work but will lose performance on each new $someModel even foo_relation_id would be the same 95 | public function processSomethingHeavy3($someModel) 96 | { 97 | // ... 98 | 99 | $relation = $this->memoize(function () use ($someModel) { 100 | return Foo::find($someModel->foo_relation_id); 101 | }); 102 | 103 | // ... 104 | } 105 | } 106 | ``` 107 | 108 | So when calling `$myClass->processSomethingHeavy1(SomeModel::find(1))` the variable `$relation` will always have the same value like in `$myClass->processSomethingHeavy1(SomeModel::find(2))` as long as they have the same `foo_relation_id`. In some other memoization packges you would lose performance here, cause the ***containing method*** parameter ($someModel) has changed... Note that `processSomethingHeavy3` would also lose performance, even though the `foo_relation_id` would be the same, cause here also the changed **$someModel** would be used as the combination key and that model would have at least a different id. 109 | 110 | ## Enable/Disable 111 | 112 | You can globally enable or disable the memoize cache by setting `MEMOIZATION_GLOBALLY_DISABLED` to `true` in your `.env` file. 113 | 114 | If you only want to disable to memoize cache for a specifiy class, do something like this: 115 | 116 | ```php 117 | use LaracraftTech\Memoize\HasMemoization; 118 | 119 | class MyClass 120 | { 121 | use HasMemoization; 122 | 123 | public function __construct() 124 | { 125 | $this->disableMemoization(); 126 | } 127 | } 128 | ``` 129 | 130 | ## Change log 131 | 132 | Please see the [changelog](changelog.md) for more information on what has changed recently. 133 | 134 | ## Testing 135 | 136 | ``` bash 137 | $ composer test 138 | ``` 139 | 140 | ## Contributing 141 | 142 | Please see [contributing.md](contributing.md) for details and a todolist. 143 | 144 | ## Security 145 | 146 | If you discover any security related issues, please email zacharias.creutznacher@gmail.com instead of using the issue tracker. 147 | 148 | ## Credits 149 | 150 | - [Zacharias Creutznacher][link-author] 151 | - [All Contributors][link-contributors] 152 | 153 | ## License 154 | 155 | MIT. Please see the [license file](license.md) for more information. 156 | 157 | [ico-version]: https://img.shields.io/packagist/v/laracraft-tech/laravel-dynamic-model.svg?style=flat-square 158 | [ico-downloads]: https://img.shields.io/packagist/dt/laracraft-tech/laravel-dynamic-model.svg?style=flat-square 159 | [ico-travis]: https://img.shields.io/travis/laracraft-tech/laravel-dynamic-model/master.svg?style=flat-square 160 | [ico-styleci]: https://styleci.io/repos/12345678/shield 161 | 162 | [link-packagist]: https://packagist.org/packages/laracraft-tech/laravel-dynamic-model 163 | [link-downloads]: https://packagist.org/packages/laracraft-tech/laravel-dynamic-model 164 | [link-travis]: https://travis-ci.org/laracraft-tech/laravel-dynamic-model 165 | [link-styleci]: https://styleci.io/repos/12345678 166 | [link-author]: https://github.com/laracraft-tech 167 | [link-contributors]: ../../contributors 168 | -------------------------------------------------------------------------------- /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": "e185ef622d83357924aeef6c81fbf170", 8 | "packages": [ 9 | { 10 | "name": "spatie/once", 11 | "version": "3.1.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/spatie/once.git", 15 | "reference": "aab3fc8694e7caec98b2d330c4a8420391c7559d" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/spatie/once/zipball/aab3fc8694e7caec98b2d330c4a8420391c7559d", 20 | "reference": "aab3fc8694e7caec98b2d330c4a8420391c7559d", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^8.0" 25 | }, 26 | "require-dev": { 27 | "pestphp/pest": "^1.21", 28 | "symfony/var-dumper": "^5.1" 29 | }, 30 | "type": "library", 31 | "autoload": { 32 | "files": [ 33 | "src/functions.php" 34 | ], 35 | "psr-4": { 36 | "Spatie\\Once\\": "src" 37 | } 38 | }, 39 | "notification-url": "https://packagist.org/downloads/", 40 | "license": [ 41 | "MIT" 42 | ], 43 | "authors": [ 44 | { 45 | "name": "Freek Van der Herten", 46 | "email": "freek@spatie.be", 47 | "homepage": "https://spatie.be", 48 | "role": "Developer" 49 | } 50 | ], 51 | "description": "A magic memoization function", 52 | "homepage": "https://github.com/spatie/once", 53 | "keywords": [ 54 | "cache", 55 | "callable", 56 | "memoization", 57 | "once", 58 | "spatie" 59 | ], 60 | "support": { 61 | "source": "https://github.com/spatie/once/tree/3.1.0" 62 | }, 63 | "funding": [ 64 | { 65 | "url": "https://spatie.be/open-source/support-us", 66 | "type": "custom" 67 | } 68 | ], 69 | "time": "2022-04-21T12:23:20+00:00" 70 | }, 71 | { 72 | "name": "symfony/polyfill-mbstring", 73 | "version": "v1.27.0", 74 | "source": { 75 | "type": "git", 76 | "url": "https://github.com/symfony/polyfill-mbstring.git", 77 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" 78 | }, 79 | "dist": { 80 | "type": "zip", 81 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 82 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 83 | "shasum": "" 84 | }, 85 | "require": { 86 | "php": ">=7.1" 87 | }, 88 | "provide": { 89 | "ext-mbstring": "*" 90 | }, 91 | "suggest": { 92 | "ext-mbstring": "For best performance" 93 | }, 94 | "type": "library", 95 | "extra": { 96 | "branch-alias": { 97 | "dev-main": "1.27-dev" 98 | }, 99 | "thanks": { 100 | "name": "symfony/polyfill", 101 | "url": "https://github.com/symfony/polyfill" 102 | } 103 | }, 104 | "autoload": { 105 | "files": [ 106 | "bootstrap.php" 107 | ], 108 | "psr-4": { 109 | "Symfony\\Polyfill\\Mbstring\\": "" 110 | } 111 | }, 112 | "notification-url": "https://packagist.org/downloads/", 113 | "license": [ 114 | "MIT" 115 | ], 116 | "authors": [ 117 | { 118 | "name": "Nicolas Grekas", 119 | "email": "p@tchwork.com" 120 | }, 121 | { 122 | "name": "Symfony Community", 123 | "homepage": "https://symfony.com/contributors" 124 | } 125 | ], 126 | "description": "Symfony polyfill for the Mbstring extension", 127 | "homepage": "https://symfony.com", 128 | "keywords": [ 129 | "compatibility", 130 | "mbstring", 131 | "polyfill", 132 | "portable", 133 | "shim" 134 | ], 135 | "support": { 136 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" 137 | }, 138 | "funding": [ 139 | { 140 | "url": "https://symfony.com/sponsor", 141 | "type": "custom" 142 | }, 143 | { 144 | "url": "https://github.com/fabpot", 145 | "type": "github" 146 | }, 147 | { 148 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 149 | "type": "tidelift" 150 | } 151 | ], 152 | "time": "2022-11-03T14:55:06+00:00" 153 | }, 154 | { 155 | "name": "symfony/var-dumper", 156 | "version": "v6.2.5", 157 | "source": { 158 | "type": "git", 159 | "url": "https://github.com/symfony/var-dumper.git", 160 | "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" 161 | }, 162 | "dist": { 163 | "type": "zip", 164 | "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", 165 | "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", 166 | "shasum": "" 167 | }, 168 | "require": { 169 | "php": ">=8.1", 170 | "symfony/polyfill-mbstring": "~1.0" 171 | }, 172 | "conflict": { 173 | "phpunit/phpunit": "<5.4.3", 174 | "symfony/console": "<5.4" 175 | }, 176 | "require-dev": { 177 | "ext-iconv": "*", 178 | "symfony/console": "^5.4|^6.0", 179 | "symfony/process": "^5.4|^6.0", 180 | "symfony/uid": "^5.4|^6.0", 181 | "twig/twig": "^2.13|^3.0.4" 182 | }, 183 | "suggest": { 184 | "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", 185 | "ext-intl": "To show region name in time zone dump", 186 | "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" 187 | }, 188 | "bin": [ 189 | "Resources/bin/var-dump-server" 190 | ], 191 | "type": "library", 192 | "autoload": { 193 | "files": [ 194 | "Resources/functions/dump.php" 195 | ], 196 | "psr-4": { 197 | "Symfony\\Component\\VarDumper\\": "" 198 | }, 199 | "exclude-from-classmap": [ 200 | "/Tests/" 201 | ] 202 | }, 203 | "notification-url": "https://packagist.org/downloads/", 204 | "license": [ 205 | "MIT" 206 | ], 207 | "authors": [ 208 | { 209 | "name": "Nicolas Grekas", 210 | "email": "p@tchwork.com" 211 | }, 212 | { 213 | "name": "Symfony Community", 214 | "homepage": "https://symfony.com/contributors" 215 | } 216 | ], 217 | "description": "Provides mechanisms for walking through any arbitrary PHP variable", 218 | "homepage": "https://symfony.com", 219 | "keywords": [ 220 | "debug", 221 | "dump" 222 | ], 223 | "support": { 224 | "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" 225 | }, 226 | "funding": [ 227 | { 228 | "url": "https://symfony.com/sponsor", 229 | "type": "custom" 230 | }, 231 | { 232 | "url": "https://github.com/fabpot", 233 | "type": "github" 234 | }, 235 | { 236 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 237 | "type": "tidelift" 238 | } 239 | ], 240 | "time": "2023-01-20T17:45:48+00:00" 241 | } 242 | ], 243 | "packages-dev": [ 244 | { 245 | "name": "doctrine/instantiator", 246 | "version": "2.0.0", 247 | "source": { 248 | "type": "git", 249 | "url": "https://github.com/doctrine/instantiator.git", 250 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" 251 | }, 252 | "dist": { 253 | "type": "zip", 254 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 255 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 256 | "shasum": "" 257 | }, 258 | "require": { 259 | "php": "^8.1" 260 | }, 261 | "require-dev": { 262 | "doctrine/coding-standard": "^11", 263 | "ext-pdo": "*", 264 | "ext-phar": "*", 265 | "phpbench/phpbench": "^1.2", 266 | "phpstan/phpstan": "^1.9.4", 267 | "phpstan/phpstan-phpunit": "^1.3", 268 | "phpunit/phpunit": "^9.5.27", 269 | "vimeo/psalm": "^5.4" 270 | }, 271 | "type": "library", 272 | "autoload": { 273 | "psr-4": { 274 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 275 | } 276 | }, 277 | "notification-url": "https://packagist.org/downloads/", 278 | "license": [ 279 | "MIT" 280 | ], 281 | "authors": [ 282 | { 283 | "name": "Marco Pivetta", 284 | "email": "ocramius@gmail.com", 285 | "homepage": "https://ocramius.github.io/" 286 | } 287 | ], 288 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 289 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 290 | "keywords": [ 291 | "constructor", 292 | "instantiate" 293 | ], 294 | "support": { 295 | "issues": "https://github.com/doctrine/instantiator/issues", 296 | "source": "https://github.com/doctrine/instantiator/tree/2.0.0" 297 | }, 298 | "funding": [ 299 | { 300 | "url": "https://www.doctrine-project.org/sponsorship.html", 301 | "type": "custom" 302 | }, 303 | { 304 | "url": "https://www.patreon.com/phpdoctrine", 305 | "type": "patreon" 306 | }, 307 | { 308 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 309 | "type": "tidelift" 310 | } 311 | ], 312 | "time": "2022-12-30T00:23:10+00:00" 313 | }, 314 | { 315 | "name": "filp/whoops", 316 | "version": "2.14.6", 317 | "source": { 318 | "type": "git", 319 | "url": "https://github.com/filp/whoops.git", 320 | "reference": "f7948baaa0330277c729714910336383286305da" 321 | }, 322 | "dist": { 323 | "type": "zip", 324 | "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", 325 | "reference": "f7948baaa0330277c729714910336383286305da", 326 | "shasum": "" 327 | }, 328 | "require": { 329 | "php": "^5.5.9 || ^7.0 || ^8.0", 330 | "psr/log": "^1.0.1 || ^2.0 || ^3.0" 331 | }, 332 | "require-dev": { 333 | "mockery/mockery": "^0.9 || ^1.0", 334 | "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", 335 | "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" 336 | }, 337 | "suggest": { 338 | "symfony/var-dumper": "Pretty print complex values better with var-dumper available", 339 | "whoops/soap": "Formats errors as SOAP responses" 340 | }, 341 | "type": "library", 342 | "extra": { 343 | "branch-alias": { 344 | "dev-master": "2.7-dev" 345 | } 346 | }, 347 | "autoload": { 348 | "psr-4": { 349 | "Whoops\\": "src/Whoops/" 350 | } 351 | }, 352 | "notification-url": "https://packagist.org/downloads/", 353 | "license": [ 354 | "MIT" 355 | ], 356 | "authors": [ 357 | { 358 | "name": "Filipe Dobreira", 359 | "homepage": "https://github.com/filp", 360 | "role": "Developer" 361 | } 362 | ], 363 | "description": "php error handling for cool kids", 364 | "homepage": "https://filp.github.io/whoops/", 365 | "keywords": [ 366 | "error", 367 | "exception", 368 | "handling", 369 | "library", 370 | "throwable", 371 | "whoops" 372 | ], 373 | "support": { 374 | "issues": "https://github.com/filp/whoops/issues", 375 | "source": "https://github.com/filp/whoops/tree/2.14.6" 376 | }, 377 | "funding": [ 378 | { 379 | "url": "https://github.com/denis-sokolov", 380 | "type": "github" 381 | } 382 | ], 383 | "time": "2022-11-02T16:23:29+00:00" 384 | }, 385 | { 386 | "name": "laravel/pint", 387 | "version": "v1.5.0", 388 | "source": { 389 | "type": "git", 390 | "url": "https://github.com/laravel/pint.git", 391 | "reference": "e0a8cef58b74662f27355be9cdea0e726bbac362" 392 | }, 393 | "dist": { 394 | "type": "zip", 395 | "url": "https://api.github.com/repos/laravel/pint/zipball/e0a8cef58b74662f27355be9cdea0e726bbac362", 396 | "reference": "e0a8cef58b74662f27355be9cdea0e726bbac362", 397 | "shasum": "" 398 | }, 399 | "require": { 400 | "ext-json": "*", 401 | "ext-mbstring": "*", 402 | "ext-tokenizer": "*", 403 | "ext-xml": "*", 404 | "php": "^8.0" 405 | }, 406 | "require-dev": { 407 | "friendsofphp/php-cs-fixer": "^3.14.4", 408 | "illuminate/view": "^9.51.0", 409 | "laravel-zero/framework": "^9.2.0", 410 | "mockery/mockery": "^1.5.1", 411 | "nunomaduro/larastan": "^2.4.0", 412 | "nunomaduro/termwind": "^1.15.1", 413 | "pestphp/pest": "^1.22.4" 414 | }, 415 | "bin": [ 416 | "builds/pint" 417 | ], 418 | "type": "project", 419 | "autoload": { 420 | "psr-4": { 421 | "App\\": "app/", 422 | "Database\\Seeders\\": "database/seeders/", 423 | "Database\\Factories\\": "database/factories/" 424 | } 425 | }, 426 | "notification-url": "https://packagist.org/downloads/", 427 | "license": [ 428 | "MIT" 429 | ], 430 | "authors": [ 431 | { 432 | "name": "Nuno Maduro", 433 | "email": "enunomaduro@gmail.com" 434 | } 435 | ], 436 | "description": "An opinionated code formatter for PHP.", 437 | "homepage": "https://laravel.com", 438 | "keywords": [ 439 | "format", 440 | "formatter", 441 | "lint", 442 | "linter", 443 | "php" 444 | ], 445 | "support": { 446 | "issues": "https://github.com/laravel/pint/issues", 447 | "source": "https://github.com/laravel/pint" 448 | }, 449 | "time": "2023-02-14T16:31:02+00:00" 450 | }, 451 | { 452 | "name": "myclabs/deep-copy", 453 | "version": "1.11.0", 454 | "source": { 455 | "type": "git", 456 | "url": "https://github.com/myclabs/DeepCopy.git", 457 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" 458 | }, 459 | "dist": { 460 | "type": "zip", 461 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", 462 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", 463 | "shasum": "" 464 | }, 465 | "require": { 466 | "php": "^7.1 || ^8.0" 467 | }, 468 | "conflict": { 469 | "doctrine/collections": "<1.6.8", 470 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 471 | }, 472 | "require-dev": { 473 | "doctrine/collections": "^1.6.8", 474 | "doctrine/common": "^2.13.3 || ^3.2.2", 475 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 476 | }, 477 | "type": "library", 478 | "autoload": { 479 | "files": [ 480 | "src/DeepCopy/deep_copy.php" 481 | ], 482 | "psr-4": { 483 | "DeepCopy\\": "src/DeepCopy/" 484 | } 485 | }, 486 | "notification-url": "https://packagist.org/downloads/", 487 | "license": [ 488 | "MIT" 489 | ], 490 | "description": "Create deep copies (clones) of your objects", 491 | "keywords": [ 492 | "clone", 493 | "copy", 494 | "duplicate", 495 | "object", 496 | "object graph" 497 | ], 498 | "support": { 499 | "issues": "https://github.com/myclabs/DeepCopy/issues", 500 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" 501 | }, 502 | "funding": [ 503 | { 504 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 505 | "type": "tidelift" 506 | } 507 | ], 508 | "time": "2022-03-03T13:19:32+00:00" 509 | }, 510 | { 511 | "name": "nikic/php-parser", 512 | "version": "v4.15.3", 513 | "source": { 514 | "type": "git", 515 | "url": "https://github.com/nikic/PHP-Parser.git", 516 | "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" 517 | }, 518 | "dist": { 519 | "type": "zip", 520 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", 521 | "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", 522 | "shasum": "" 523 | }, 524 | "require": { 525 | "ext-tokenizer": "*", 526 | "php": ">=7.0" 527 | }, 528 | "require-dev": { 529 | "ircmaxell/php-yacc": "^0.0.7", 530 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 531 | }, 532 | "bin": [ 533 | "bin/php-parse" 534 | ], 535 | "type": "library", 536 | "extra": { 537 | "branch-alias": { 538 | "dev-master": "4.9-dev" 539 | } 540 | }, 541 | "autoload": { 542 | "psr-4": { 543 | "PhpParser\\": "lib/PhpParser" 544 | } 545 | }, 546 | "notification-url": "https://packagist.org/downloads/", 547 | "license": [ 548 | "BSD-3-Clause" 549 | ], 550 | "authors": [ 551 | { 552 | "name": "Nikita Popov" 553 | } 554 | ], 555 | "description": "A PHP parser written in PHP", 556 | "keywords": [ 557 | "parser", 558 | "php" 559 | ], 560 | "support": { 561 | "issues": "https://github.com/nikic/PHP-Parser/issues", 562 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" 563 | }, 564 | "time": "2023-01-16T22:05:37+00:00" 565 | }, 566 | { 567 | "name": "nunomaduro/collision", 568 | "version": "v6.4.0", 569 | "source": { 570 | "type": "git", 571 | "url": "https://github.com/nunomaduro/collision.git", 572 | "reference": "f05978827b9343cba381ca05b8c7deee346b6015" 573 | }, 574 | "dist": { 575 | "type": "zip", 576 | "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015", 577 | "reference": "f05978827b9343cba381ca05b8c7deee346b6015", 578 | "shasum": "" 579 | }, 580 | "require": { 581 | "filp/whoops": "^2.14.5", 582 | "php": "^8.0.0", 583 | "symfony/console": "^6.0.2" 584 | }, 585 | "require-dev": { 586 | "brianium/paratest": "^6.4.1", 587 | "laravel/framework": "^9.26.1", 588 | "laravel/pint": "^1.1.1", 589 | "nunomaduro/larastan": "^1.0.3", 590 | "nunomaduro/mock-final-classes": "^1.1.0", 591 | "orchestra/testbench": "^7.7", 592 | "phpunit/phpunit": "^9.5.23", 593 | "spatie/ignition": "^1.4.1" 594 | }, 595 | "type": "library", 596 | "extra": { 597 | "branch-alias": { 598 | "dev-develop": "6.x-dev" 599 | }, 600 | "laravel": { 601 | "providers": [ 602 | "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" 603 | ] 604 | } 605 | }, 606 | "autoload": { 607 | "psr-4": { 608 | "NunoMaduro\\Collision\\": "src/" 609 | } 610 | }, 611 | "notification-url": "https://packagist.org/downloads/", 612 | "license": [ 613 | "MIT" 614 | ], 615 | "authors": [ 616 | { 617 | "name": "Nuno Maduro", 618 | "email": "enunomaduro@gmail.com" 619 | } 620 | ], 621 | "description": "Cli error handling for console/command-line PHP applications.", 622 | "keywords": [ 623 | "artisan", 624 | "cli", 625 | "command-line", 626 | "console", 627 | "error", 628 | "handling", 629 | "laravel", 630 | "laravel-zero", 631 | "php", 632 | "symfony" 633 | ], 634 | "support": { 635 | "issues": "https://github.com/nunomaduro/collision/issues", 636 | "source": "https://github.com/nunomaduro/collision" 637 | }, 638 | "funding": [ 639 | { 640 | "url": "https://www.paypal.com/paypalme/enunomaduro", 641 | "type": "custom" 642 | }, 643 | { 644 | "url": "https://github.com/nunomaduro", 645 | "type": "github" 646 | }, 647 | { 648 | "url": "https://www.patreon.com/nunomaduro", 649 | "type": "patreon" 650 | } 651 | ], 652 | "time": "2023-01-03T12:54:54+00:00" 653 | }, 654 | { 655 | "name": "pestphp/pest", 656 | "version": "v1.22.4", 657 | "source": { 658 | "type": "git", 659 | "url": "https://github.com/pestphp/pest.git", 660 | "reference": "ee4ff5a9094ce04ddda6bc499dd9d81e1d8863d4" 661 | }, 662 | "dist": { 663 | "type": "zip", 664 | "url": "https://api.github.com/repos/pestphp/pest/zipball/ee4ff5a9094ce04ddda6bc499dd9d81e1d8863d4", 665 | "reference": "ee4ff5a9094ce04ddda6bc499dd9d81e1d8863d4", 666 | "shasum": "" 667 | }, 668 | "require": { 669 | "nunomaduro/collision": "^5.11.0|^6.3.0", 670 | "pestphp/pest-plugin": "^1.1.0", 671 | "php": "^7.3 || ^8.0", 672 | "phpunit/phpunit": "^9.6.0" 673 | }, 674 | "require-dev": { 675 | "illuminate/console": "^8.83.27", 676 | "illuminate/support": "^8.83.27", 677 | "laravel/dusk": "^6.25.2", 678 | "pestphp/pest-dev-tools": "^1.0.0", 679 | "pestphp/pest-plugin-parallel": "^1.2.1" 680 | }, 681 | "bin": [ 682 | "bin/pest" 683 | ], 684 | "type": "library", 685 | "extra": { 686 | "branch-alias": { 687 | "dev-1.x": "1.x-dev" 688 | }, 689 | "pest": { 690 | "plugins": [ 691 | "Pest\\Plugins\\Coverage", 692 | "Pest\\Plugins\\Init", 693 | "Pest\\Plugins\\Version", 694 | "Pest\\Plugins\\Environment" 695 | ] 696 | }, 697 | "laravel": { 698 | "providers": [ 699 | "Pest\\Laravel\\PestServiceProvider" 700 | ] 701 | } 702 | }, 703 | "autoload": { 704 | "files": [ 705 | "src/Functions.php", 706 | "src/Pest.php" 707 | ], 708 | "psr-4": { 709 | "Pest\\": "src/" 710 | } 711 | }, 712 | "notification-url": "https://packagist.org/downloads/", 713 | "license": [ 714 | "MIT" 715 | ], 716 | "authors": [ 717 | { 718 | "name": "Nuno Maduro", 719 | "email": "enunomaduro@gmail.com" 720 | } 721 | ], 722 | "description": "An elegant PHP Testing Framework.", 723 | "keywords": [ 724 | "framework", 725 | "pest", 726 | "php", 727 | "test", 728 | "testing", 729 | "unit" 730 | ], 731 | "support": { 732 | "issues": "https://github.com/pestphp/pest/issues", 733 | "source": "https://github.com/pestphp/pest/tree/v1.22.4" 734 | }, 735 | "funding": [ 736 | { 737 | "url": "https://www.paypal.com/paypalme/enunomaduro", 738 | "type": "custom" 739 | }, 740 | { 741 | "url": "https://github.com/lukeraymonddowning", 742 | "type": "github" 743 | }, 744 | { 745 | "url": "https://github.com/nunomaduro", 746 | "type": "github" 747 | }, 748 | { 749 | "url": "https://github.com/olivernybroe", 750 | "type": "github" 751 | }, 752 | { 753 | "url": "https://github.com/owenvoke", 754 | "type": "github" 755 | }, 756 | { 757 | "url": "https://www.patreon.com/nunomaduro", 758 | "type": "patreon" 759 | } 760 | ], 761 | "time": "2023-02-03T13:03:07+00:00" 762 | }, 763 | { 764 | "name": "pestphp/pest-plugin", 765 | "version": "v1.1.0", 766 | "source": { 767 | "type": "git", 768 | "url": "https://github.com/pestphp/pest-plugin.git", 769 | "reference": "606c5f79c6a339b49838ffbee0151ca519efe378" 770 | }, 771 | "dist": { 772 | "type": "zip", 773 | "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/606c5f79c6a339b49838ffbee0151ca519efe378", 774 | "reference": "606c5f79c6a339b49838ffbee0151ca519efe378", 775 | "shasum": "" 776 | }, 777 | "require": { 778 | "composer-plugin-api": "^1.1.0 || ^2.0.0", 779 | "php": "^7.3 || ^8.0" 780 | }, 781 | "conflict": { 782 | "pestphp/pest": "<1.0" 783 | }, 784 | "require-dev": { 785 | "composer/composer": "^2.4.2", 786 | "pestphp/pest": "^1.22.1", 787 | "pestphp/pest-dev-tools": "^1.0.0" 788 | }, 789 | "type": "composer-plugin", 790 | "extra": { 791 | "branch-alias": { 792 | "dev-master": "1.x-dev" 793 | }, 794 | "class": "Pest\\Plugin\\Manager" 795 | }, 796 | "autoload": { 797 | "psr-4": { 798 | "Pest\\Plugin\\": "src/" 799 | } 800 | }, 801 | "notification-url": "https://packagist.org/downloads/", 802 | "license": [ 803 | "MIT" 804 | ], 805 | "description": "The Pest plugin manager", 806 | "keywords": [ 807 | "framework", 808 | "manager", 809 | "pest", 810 | "php", 811 | "plugin", 812 | "test", 813 | "testing", 814 | "unit" 815 | ], 816 | "support": { 817 | "source": "https://github.com/pestphp/pest-plugin/tree/v1.1.0" 818 | }, 819 | "funding": [ 820 | { 821 | "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", 822 | "type": "custom" 823 | }, 824 | { 825 | "url": "https://github.com/nunomaduro", 826 | "type": "github" 827 | }, 828 | { 829 | "url": "https://www.patreon.com/nunomaduro", 830 | "type": "patreon" 831 | } 832 | ], 833 | "time": "2022-09-18T13:18:17+00:00" 834 | }, 835 | { 836 | "name": "phar-io/manifest", 837 | "version": "2.0.3", 838 | "source": { 839 | "type": "git", 840 | "url": "https://github.com/phar-io/manifest.git", 841 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 842 | }, 843 | "dist": { 844 | "type": "zip", 845 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 846 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 847 | "shasum": "" 848 | }, 849 | "require": { 850 | "ext-dom": "*", 851 | "ext-phar": "*", 852 | "ext-xmlwriter": "*", 853 | "phar-io/version": "^3.0.1", 854 | "php": "^7.2 || ^8.0" 855 | }, 856 | "type": "library", 857 | "extra": { 858 | "branch-alias": { 859 | "dev-master": "2.0.x-dev" 860 | } 861 | }, 862 | "autoload": { 863 | "classmap": [ 864 | "src/" 865 | ] 866 | }, 867 | "notification-url": "https://packagist.org/downloads/", 868 | "license": [ 869 | "BSD-3-Clause" 870 | ], 871 | "authors": [ 872 | { 873 | "name": "Arne Blankerts", 874 | "email": "arne@blankerts.de", 875 | "role": "Developer" 876 | }, 877 | { 878 | "name": "Sebastian Heuer", 879 | "email": "sebastian@phpeople.de", 880 | "role": "Developer" 881 | }, 882 | { 883 | "name": "Sebastian Bergmann", 884 | "email": "sebastian@phpunit.de", 885 | "role": "Developer" 886 | } 887 | ], 888 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 889 | "support": { 890 | "issues": "https://github.com/phar-io/manifest/issues", 891 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 892 | }, 893 | "time": "2021-07-20T11:28:43+00:00" 894 | }, 895 | { 896 | "name": "phar-io/version", 897 | "version": "3.2.1", 898 | "source": { 899 | "type": "git", 900 | "url": "https://github.com/phar-io/version.git", 901 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 902 | }, 903 | "dist": { 904 | "type": "zip", 905 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 906 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 907 | "shasum": "" 908 | }, 909 | "require": { 910 | "php": "^7.2 || ^8.0" 911 | }, 912 | "type": "library", 913 | "autoload": { 914 | "classmap": [ 915 | "src/" 916 | ] 917 | }, 918 | "notification-url": "https://packagist.org/downloads/", 919 | "license": [ 920 | "BSD-3-Clause" 921 | ], 922 | "authors": [ 923 | { 924 | "name": "Arne Blankerts", 925 | "email": "arne@blankerts.de", 926 | "role": "Developer" 927 | }, 928 | { 929 | "name": "Sebastian Heuer", 930 | "email": "sebastian@phpeople.de", 931 | "role": "Developer" 932 | }, 933 | { 934 | "name": "Sebastian Bergmann", 935 | "email": "sebastian@phpunit.de", 936 | "role": "Developer" 937 | } 938 | ], 939 | "description": "Library for handling version information and constraints", 940 | "support": { 941 | "issues": "https://github.com/phar-io/version/issues", 942 | "source": "https://github.com/phar-io/version/tree/3.2.1" 943 | }, 944 | "time": "2022-02-21T01:04:05+00:00" 945 | }, 946 | { 947 | "name": "phpunit/php-code-coverage", 948 | "version": "9.2.24", 949 | "source": { 950 | "type": "git", 951 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 952 | "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" 953 | }, 954 | "dist": { 955 | "type": "zip", 956 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", 957 | "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", 958 | "shasum": "" 959 | }, 960 | "require": { 961 | "ext-dom": "*", 962 | "ext-libxml": "*", 963 | "ext-xmlwriter": "*", 964 | "nikic/php-parser": "^4.14", 965 | "php": ">=7.3", 966 | "phpunit/php-file-iterator": "^3.0.3", 967 | "phpunit/php-text-template": "^2.0.2", 968 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 969 | "sebastian/complexity": "^2.0", 970 | "sebastian/environment": "^5.1.2", 971 | "sebastian/lines-of-code": "^1.0.3", 972 | "sebastian/version": "^3.0.1", 973 | "theseer/tokenizer": "^1.2.0" 974 | }, 975 | "require-dev": { 976 | "phpunit/phpunit": "^9.3" 977 | }, 978 | "suggest": { 979 | "ext-pcov": "*", 980 | "ext-xdebug": "*" 981 | }, 982 | "type": "library", 983 | "extra": { 984 | "branch-alias": { 985 | "dev-master": "9.2-dev" 986 | } 987 | }, 988 | "autoload": { 989 | "classmap": [ 990 | "src/" 991 | ] 992 | }, 993 | "notification-url": "https://packagist.org/downloads/", 994 | "license": [ 995 | "BSD-3-Clause" 996 | ], 997 | "authors": [ 998 | { 999 | "name": "Sebastian Bergmann", 1000 | "email": "sebastian@phpunit.de", 1001 | "role": "lead" 1002 | } 1003 | ], 1004 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1005 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1006 | "keywords": [ 1007 | "coverage", 1008 | "testing", 1009 | "xunit" 1010 | ], 1011 | "support": { 1012 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1013 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" 1014 | }, 1015 | "funding": [ 1016 | { 1017 | "url": "https://github.com/sebastianbergmann", 1018 | "type": "github" 1019 | } 1020 | ], 1021 | "time": "2023-01-26T08:26:55+00:00" 1022 | }, 1023 | { 1024 | "name": "phpunit/php-file-iterator", 1025 | "version": "3.0.6", 1026 | "source": { 1027 | "type": "git", 1028 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1029 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 1030 | }, 1031 | "dist": { 1032 | "type": "zip", 1033 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 1034 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 1035 | "shasum": "" 1036 | }, 1037 | "require": { 1038 | "php": ">=7.3" 1039 | }, 1040 | "require-dev": { 1041 | "phpunit/phpunit": "^9.3" 1042 | }, 1043 | "type": "library", 1044 | "extra": { 1045 | "branch-alias": { 1046 | "dev-master": "3.0-dev" 1047 | } 1048 | }, 1049 | "autoload": { 1050 | "classmap": [ 1051 | "src/" 1052 | ] 1053 | }, 1054 | "notification-url": "https://packagist.org/downloads/", 1055 | "license": [ 1056 | "BSD-3-Clause" 1057 | ], 1058 | "authors": [ 1059 | { 1060 | "name": "Sebastian Bergmann", 1061 | "email": "sebastian@phpunit.de", 1062 | "role": "lead" 1063 | } 1064 | ], 1065 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1066 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1067 | "keywords": [ 1068 | "filesystem", 1069 | "iterator" 1070 | ], 1071 | "support": { 1072 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1073 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 1074 | }, 1075 | "funding": [ 1076 | { 1077 | "url": "https://github.com/sebastianbergmann", 1078 | "type": "github" 1079 | } 1080 | ], 1081 | "time": "2021-12-02T12:48:52+00:00" 1082 | }, 1083 | { 1084 | "name": "phpunit/php-invoker", 1085 | "version": "3.1.1", 1086 | "source": { 1087 | "type": "git", 1088 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1089 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 1090 | }, 1091 | "dist": { 1092 | "type": "zip", 1093 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1094 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1095 | "shasum": "" 1096 | }, 1097 | "require": { 1098 | "php": ">=7.3" 1099 | }, 1100 | "require-dev": { 1101 | "ext-pcntl": "*", 1102 | "phpunit/phpunit": "^9.3" 1103 | }, 1104 | "suggest": { 1105 | "ext-pcntl": "*" 1106 | }, 1107 | "type": "library", 1108 | "extra": { 1109 | "branch-alias": { 1110 | "dev-master": "3.1-dev" 1111 | } 1112 | }, 1113 | "autoload": { 1114 | "classmap": [ 1115 | "src/" 1116 | ] 1117 | }, 1118 | "notification-url": "https://packagist.org/downloads/", 1119 | "license": [ 1120 | "BSD-3-Clause" 1121 | ], 1122 | "authors": [ 1123 | { 1124 | "name": "Sebastian Bergmann", 1125 | "email": "sebastian@phpunit.de", 1126 | "role": "lead" 1127 | } 1128 | ], 1129 | "description": "Invoke callables with a timeout", 1130 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1131 | "keywords": [ 1132 | "process" 1133 | ], 1134 | "support": { 1135 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 1136 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 1137 | }, 1138 | "funding": [ 1139 | { 1140 | "url": "https://github.com/sebastianbergmann", 1141 | "type": "github" 1142 | } 1143 | ], 1144 | "time": "2020-09-28T05:58:55+00:00" 1145 | }, 1146 | { 1147 | "name": "phpunit/php-text-template", 1148 | "version": "2.0.4", 1149 | "source": { 1150 | "type": "git", 1151 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1152 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 1153 | }, 1154 | "dist": { 1155 | "type": "zip", 1156 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1157 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1158 | "shasum": "" 1159 | }, 1160 | "require": { 1161 | "php": ">=7.3" 1162 | }, 1163 | "require-dev": { 1164 | "phpunit/phpunit": "^9.3" 1165 | }, 1166 | "type": "library", 1167 | "extra": { 1168 | "branch-alias": { 1169 | "dev-master": "2.0-dev" 1170 | } 1171 | }, 1172 | "autoload": { 1173 | "classmap": [ 1174 | "src/" 1175 | ] 1176 | }, 1177 | "notification-url": "https://packagist.org/downloads/", 1178 | "license": [ 1179 | "BSD-3-Clause" 1180 | ], 1181 | "authors": [ 1182 | { 1183 | "name": "Sebastian Bergmann", 1184 | "email": "sebastian@phpunit.de", 1185 | "role": "lead" 1186 | } 1187 | ], 1188 | "description": "Simple template engine.", 1189 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1190 | "keywords": [ 1191 | "template" 1192 | ], 1193 | "support": { 1194 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1195 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 1196 | }, 1197 | "funding": [ 1198 | { 1199 | "url": "https://github.com/sebastianbergmann", 1200 | "type": "github" 1201 | } 1202 | ], 1203 | "time": "2020-10-26T05:33:50+00:00" 1204 | }, 1205 | { 1206 | "name": "phpunit/php-timer", 1207 | "version": "5.0.3", 1208 | "source": { 1209 | "type": "git", 1210 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1211 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 1212 | }, 1213 | "dist": { 1214 | "type": "zip", 1215 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 1216 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 1217 | "shasum": "" 1218 | }, 1219 | "require": { 1220 | "php": ">=7.3" 1221 | }, 1222 | "require-dev": { 1223 | "phpunit/phpunit": "^9.3" 1224 | }, 1225 | "type": "library", 1226 | "extra": { 1227 | "branch-alias": { 1228 | "dev-master": "5.0-dev" 1229 | } 1230 | }, 1231 | "autoload": { 1232 | "classmap": [ 1233 | "src/" 1234 | ] 1235 | }, 1236 | "notification-url": "https://packagist.org/downloads/", 1237 | "license": [ 1238 | "BSD-3-Clause" 1239 | ], 1240 | "authors": [ 1241 | { 1242 | "name": "Sebastian Bergmann", 1243 | "email": "sebastian@phpunit.de", 1244 | "role": "lead" 1245 | } 1246 | ], 1247 | "description": "Utility class for timing", 1248 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1249 | "keywords": [ 1250 | "timer" 1251 | ], 1252 | "support": { 1253 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 1254 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 1255 | }, 1256 | "funding": [ 1257 | { 1258 | "url": "https://github.com/sebastianbergmann", 1259 | "type": "github" 1260 | } 1261 | ], 1262 | "time": "2020-10-26T13:16:10+00:00" 1263 | }, 1264 | { 1265 | "name": "phpunit/phpunit", 1266 | "version": "9.6.3", 1267 | "source": { 1268 | "type": "git", 1269 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1270 | "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" 1271 | }, 1272 | "dist": { 1273 | "type": "zip", 1274 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", 1275 | "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", 1276 | "shasum": "" 1277 | }, 1278 | "require": { 1279 | "doctrine/instantiator": "^1.3.1 || ^2", 1280 | "ext-dom": "*", 1281 | "ext-json": "*", 1282 | "ext-libxml": "*", 1283 | "ext-mbstring": "*", 1284 | "ext-xml": "*", 1285 | "ext-xmlwriter": "*", 1286 | "myclabs/deep-copy": "^1.10.1", 1287 | "phar-io/manifest": "^2.0.3", 1288 | "phar-io/version": "^3.0.2", 1289 | "php": ">=7.3", 1290 | "phpunit/php-code-coverage": "^9.2.13", 1291 | "phpunit/php-file-iterator": "^3.0.5", 1292 | "phpunit/php-invoker": "^3.1.1", 1293 | "phpunit/php-text-template": "^2.0.3", 1294 | "phpunit/php-timer": "^5.0.2", 1295 | "sebastian/cli-parser": "^1.0.1", 1296 | "sebastian/code-unit": "^1.0.6", 1297 | "sebastian/comparator": "^4.0.8", 1298 | "sebastian/diff": "^4.0.3", 1299 | "sebastian/environment": "^5.1.3", 1300 | "sebastian/exporter": "^4.0.5", 1301 | "sebastian/global-state": "^5.0.1", 1302 | "sebastian/object-enumerator": "^4.0.3", 1303 | "sebastian/resource-operations": "^3.0.3", 1304 | "sebastian/type": "^3.2", 1305 | "sebastian/version": "^3.0.2" 1306 | }, 1307 | "suggest": { 1308 | "ext-soap": "*", 1309 | "ext-xdebug": "*" 1310 | }, 1311 | "bin": [ 1312 | "phpunit" 1313 | ], 1314 | "type": "library", 1315 | "extra": { 1316 | "branch-alias": { 1317 | "dev-master": "9.6-dev" 1318 | } 1319 | }, 1320 | "autoload": { 1321 | "files": [ 1322 | "src/Framework/Assert/Functions.php" 1323 | ], 1324 | "classmap": [ 1325 | "src/" 1326 | ] 1327 | }, 1328 | "notification-url": "https://packagist.org/downloads/", 1329 | "license": [ 1330 | "BSD-3-Clause" 1331 | ], 1332 | "authors": [ 1333 | { 1334 | "name": "Sebastian Bergmann", 1335 | "email": "sebastian@phpunit.de", 1336 | "role": "lead" 1337 | } 1338 | ], 1339 | "description": "The PHP Unit Testing framework.", 1340 | "homepage": "https://phpunit.de/", 1341 | "keywords": [ 1342 | "phpunit", 1343 | "testing", 1344 | "xunit" 1345 | ], 1346 | "support": { 1347 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 1348 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" 1349 | }, 1350 | "funding": [ 1351 | { 1352 | "url": "https://phpunit.de/sponsors.html", 1353 | "type": "custom" 1354 | }, 1355 | { 1356 | "url": "https://github.com/sebastianbergmann", 1357 | "type": "github" 1358 | }, 1359 | { 1360 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 1361 | "type": "tidelift" 1362 | } 1363 | ], 1364 | "time": "2023-02-04T13:37:15+00:00" 1365 | }, 1366 | { 1367 | "name": "psr/container", 1368 | "version": "2.0.2", 1369 | "source": { 1370 | "type": "git", 1371 | "url": "https://github.com/php-fig/container.git", 1372 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 1373 | }, 1374 | "dist": { 1375 | "type": "zip", 1376 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1377 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1378 | "shasum": "" 1379 | }, 1380 | "require": { 1381 | "php": ">=7.4.0" 1382 | }, 1383 | "type": "library", 1384 | "extra": { 1385 | "branch-alias": { 1386 | "dev-master": "2.0.x-dev" 1387 | } 1388 | }, 1389 | "autoload": { 1390 | "psr-4": { 1391 | "Psr\\Container\\": "src/" 1392 | } 1393 | }, 1394 | "notification-url": "https://packagist.org/downloads/", 1395 | "license": [ 1396 | "MIT" 1397 | ], 1398 | "authors": [ 1399 | { 1400 | "name": "PHP-FIG", 1401 | "homepage": "https://www.php-fig.org/" 1402 | } 1403 | ], 1404 | "description": "Common Container Interface (PHP FIG PSR-11)", 1405 | "homepage": "https://github.com/php-fig/container", 1406 | "keywords": [ 1407 | "PSR-11", 1408 | "container", 1409 | "container-interface", 1410 | "container-interop", 1411 | "psr" 1412 | ], 1413 | "support": { 1414 | "issues": "https://github.com/php-fig/container/issues", 1415 | "source": "https://github.com/php-fig/container/tree/2.0.2" 1416 | }, 1417 | "time": "2021-11-05T16:47:00+00:00" 1418 | }, 1419 | { 1420 | "name": "psr/log", 1421 | "version": "3.0.0", 1422 | "source": { 1423 | "type": "git", 1424 | "url": "https://github.com/php-fig/log.git", 1425 | "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" 1426 | }, 1427 | "dist": { 1428 | "type": "zip", 1429 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", 1430 | "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", 1431 | "shasum": "" 1432 | }, 1433 | "require": { 1434 | "php": ">=8.0.0" 1435 | }, 1436 | "type": "library", 1437 | "extra": { 1438 | "branch-alias": { 1439 | "dev-master": "3.x-dev" 1440 | } 1441 | }, 1442 | "autoload": { 1443 | "psr-4": { 1444 | "Psr\\Log\\": "src" 1445 | } 1446 | }, 1447 | "notification-url": "https://packagist.org/downloads/", 1448 | "license": [ 1449 | "MIT" 1450 | ], 1451 | "authors": [ 1452 | { 1453 | "name": "PHP-FIG", 1454 | "homepage": "https://www.php-fig.org/" 1455 | } 1456 | ], 1457 | "description": "Common interface for logging libraries", 1458 | "homepage": "https://github.com/php-fig/log", 1459 | "keywords": [ 1460 | "log", 1461 | "psr", 1462 | "psr-3" 1463 | ], 1464 | "support": { 1465 | "source": "https://github.com/php-fig/log/tree/3.0.0" 1466 | }, 1467 | "time": "2021-07-14T16:46:02+00:00" 1468 | }, 1469 | { 1470 | "name": "sebastian/cli-parser", 1471 | "version": "1.0.1", 1472 | "source": { 1473 | "type": "git", 1474 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 1475 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 1476 | }, 1477 | "dist": { 1478 | "type": "zip", 1479 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1480 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 1481 | "shasum": "" 1482 | }, 1483 | "require": { 1484 | "php": ">=7.3" 1485 | }, 1486 | "require-dev": { 1487 | "phpunit/phpunit": "^9.3" 1488 | }, 1489 | "type": "library", 1490 | "extra": { 1491 | "branch-alias": { 1492 | "dev-master": "1.0-dev" 1493 | } 1494 | }, 1495 | "autoload": { 1496 | "classmap": [ 1497 | "src/" 1498 | ] 1499 | }, 1500 | "notification-url": "https://packagist.org/downloads/", 1501 | "license": [ 1502 | "BSD-3-Clause" 1503 | ], 1504 | "authors": [ 1505 | { 1506 | "name": "Sebastian Bergmann", 1507 | "email": "sebastian@phpunit.de", 1508 | "role": "lead" 1509 | } 1510 | ], 1511 | "description": "Library for parsing CLI options", 1512 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 1513 | "support": { 1514 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 1515 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 1516 | }, 1517 | "funding": [ 1518 | { 1519 | "url": "https://github.com/sebastianbergmann", 1520 | "type": "github" 1521 | } 1522 | ], 1523 | "time": "2020-09-28T06:08:49+00:00" 1524 | }, 1525 | { 1526 | "name": "sebastian/code-unit", 1527 | "version": "1.0.8", 1528 | "source": { 1529 | "type": "git", 1530 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1531 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 1532 | }, 1533 | "dist": { 1534 | "type": "zip", 1535 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 1536 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 1537 | "shasum": "" 1538 | }, 1539 | "require": { 1540 | "php": ">=7.3" 1541 | }, 1542 | "require-dev": { 1543 | "phpunit/phpunit": "^9.3" 1544 | }, 1545 | "type": "library", 1546 | "extra": { 1547 | "branch-alias": { 1548 | "dev-master": "1.0-dev" 1549 | } 1550 | }, 1551 | "autoload": { 1552 | "classmap": [ 1553 | "src/" 1554 | ] 1555 | }, 1556 | "notification-url": "https://packagist.org/downloads/", 1557 | "license": [ 1558 | "BSD-3-Clause" 1559 | ], 1560 | "authors": [ 1561 | { 1562 | "name": "Sebastian Bergmann", 1563 | "email": "sebastian@phpunit.de", 1564 | "role": "lead" 1565 | } 1566 | ], 1567 | "description": "Collection of value objects that represent the PHP code units", 1568 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1569 | "support": { 1570 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 1571 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 1572 | }, 1573 | "funding": [ 1574 | { 1575 | "url": "https://github.com/sebastianbergmann", 1576 | "type": "github" 1577 | } 1578 | ], 1579 | "time": "2020-10-26T13:08:54+00:00" 1580 | }, 1581 | { 1582 | "name": "sebastian/code-unit-reverse-lookup", 1583 | "version": "2.0.3", 1584 | "source": { 1585 | "type": "git", 1586 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1587 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 1588 | }, 1589 | "dist": { 1590 | "type": "zip", 1591 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1592 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 1593 | "shasum": "" 1594 | }, 1595 | "require": { 1596 | "php": ">=7.3" 1597 | }, 1598 | "require-dev": { 1599 | "phpunit/phpunit": "^9.3" 1600 | }, 1601 | "type": "library", 1602 | "extra": { 1603 | "branch-alias": { 1604 | "dev-master": "2.0-dev" 1605 | } 1606 | }, 1607 | "autoload": { 1608 | "classmap": [ 1609 | "src/" 1610 | ] 1611 | }, 1612 | "notification-url": "https://packagist.org/downloads/", 1613 | "license": [ 1614 | "BSD-3-Clause" 1615 | ], 1616 | "authors": [ 1617 | { 1618 | "name": "Sebastian Bergmann", 1619 | "email": "sebastian@phpunit.de" 1620 | } 1621 | ], 1622 | "description": "Looks up which function or method a line of code belongs to", 1623 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1624 | "support": { 1625 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 1626 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 1627 | }, 1628 | "funding": [ 1629 | { 1630 | "url": "https://github.com/sebastianbergmann", 1631 | "type": "github" 1632 | } 1633 | ], 1634 | "time": "2020-09-28T05:30:19+00:00" 1635 | }, 1636 | { 1637 | "name": "sebastian/comparator", 1638 | "version": "4.0.8", 1639 | "source": { 1640 | "type": "git", 1641 | "url": "https://github.com/sebastianbergmann/comparator.git", 1642 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a" 1643 | }, 1644 | "dist": { 1645 | "type": "zip", 1646 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", 1647 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a", 1648 | "shasum": "" 1649 | }, 1650 | "require": { 1651 | "php": ">=7.3", 1652 | "sebastian/diff": "^4.0", 1653 | "sebastian/exporter": "^4.0" 1654 | }, 1655 | "require-dev": { 1656 | "phpunit/phpunit": "^9.3" 1657 | }, 1658 | "type": "library", 1659 | "extra": { 1660 | "branch-alias": { 1661 | "dev-master": "4.0-dev" 1662 | } 1663 | }, 1664 | "autoload": { 1665 | "classmap": [ 1666 | "src/" 1667 | ] 1668 | }, 1669 | "notification-url": "https://packagist.org/downloads/", 1670 | "license": [ 1671 | "BSD-3-Clause" 1672 | ], 1673 | "authors": [ 1674 | { 1675 | "name": "Sebastian Bergmann", 1676 | "email": "sebastian@phpunit.de" 1677 | }, 1678 | { 1679 | "name": "Jeff Welch", 1680 | "email": "whatthejeff@gmail.com" 1681 | }, 1682 | { 1683 | "name": "Volker Dusch", 1684 | "email": "github@wallbash.com" 1685 | }, 1686 | { 1687 | "name": "Bernhard Schussek", 1688 | "email": "bschussek@2bepublished.at" 1689 | } 1690 | ], 1691 | "description": "Provides the functionality to compare PHP values for equality", 1692 | "homepage": "https://github.com/sebastianbergmann/comparator", 1693 | "keywords": [ 1694 | "comparator", 1695 | "compare", 1696 | "equality" 1697 | ], 1698 | "support": { 1699 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 1700 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" 1701 | }, 1702 | "funding": [ 1703 | { 1704 | "url": "https://github.com/sebastianbergmann", 1705 | "type": "github" 1706 | } 1707 | ], 1708 | "time": "2022-09-14T12:41:17+00:00" 1709 | }, 1710 | { 1711 | "name": "sebastian/complexity", 1712 | "version": "2.0.2", 1713 | "source": { 1714 | "type": "git", 1715 | "url": "https://github.com/sebastianbergmann/complexity.git", 1716 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 1717 | }, 1718 | "dist": { 1719 | "type": "zip", 1720 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 1721 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 1722 | "shasum": "" 1723 | }, 1724 | "require": { 1725 | "nikic/php-parser": "^4.7", 1726 | "php": ">=7.3" 1727 | }, 1728 | "require-dev": { 1729 | "phpunit/phpunit": "^9.3" 1730 | }, 1731 | "type": "library", 1732 | "extra": { 1733 | "branch-alias": { 1734 | "dev-master": "2.0-dev" 1735 | } 1736 | }, 1737 | "autoload": { 1738 | "classmap": [ 1739 | "src/" 1740 | ] 1741 | }, 1742 | "notification-url": "https://packagist.org/downloads/", 1743 | "license": [ 1744 | "BSD-3-Clause" 1745 | ], 1746 | "authors": [ 1747 | { 1748 | "name": "Sebastian Bergmann", 1749 | "email": "sebastian@phpunit.de", 1750 | "role": "lead" 1751 | } 1752 | ], 1753 | "description": "Library for calculating the complexity of PHP code units", 1754 | "homepage": "https://github.com/sebastianbergmann/complexity", 1755 | "support": { 1756 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1757 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 1758 | }, 1759 | "funding": [ 1760 | { 1761 | "url": "https://github.com/sebastianbergmann", 1762 | "type": "github" 1763 | } 1764 | ], 1765 | "time": "2020-10-26T15:52:27+00:00" 1766 | }, 1767 | { 1768 | "name": "sebastian/diff", 1769 | "version": "4.0.4", 1770 | "source": { 1771 | "type": "git", 1772 | "url": "https://github.com/sebastianbergmann/diff.git", 1773 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 1774 | }, 1775 | "dist": { 1776 | "type": "zip", 1777 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1778 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 1779 | "shasum": "" 1780 | }, 1781 | "require": { 1782 | "php": ">=7.3" 1783 | }, 1784 | "require-dev": { 1785 | "phpunit/phpunit": "^9.3", 1786 | "symfony/process": "^4.2 || ^5" 1787 | }, 1788 | "type": "library", 1789 | "extra": { 1790 | "branch-alias": { 1791 | "dev-master": "4.0-dev" 1792 | } 1793 | }, 1794 | "autoload": { 1795 | "classmap": [ 1796 | "src/" 1797 | ] 1798 | }, 1799 | "notification-url": "https://packagist.org/downloads/", 1800 | "license": [ 1801 | "BSD-3-Clause" 1802 | ], 1803 | "authors": [ 1804 | { 1805 | "name": "Sebastian Bergmann", 1806 | "email": "sebastian@phpunit.de" 1807 | }, 1808 | { 1809 | "name": "Kore Nordmann", 1810 | "email": "mail@kore-nordmann.de" 1811 | } 1812 | ], 1813 | "description": "Diff implementation", 1814 | "homepage": "https://github.com/sebastianbergmann/diff", 1815 | "keywords": [ 1816 | "diff", 1817 | "udiff", 1818 | "unidiff", 1819 | "unified diff" 1820 | ], 1821 | "support": { 1822 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1823 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 1824 | }, 1825 | "funding": [ 1826 | { 1827 | "url": "https://github.com/sebastianbergmann", 1828 | "type": "github" 1829 | } 1830 | ], 1831 | "time": "2020-10-26T13:10:38+00:00" 1832 | }, 1833 | { 1834 | "name": "sebastian/environment", 1835 | "version": "5.1.5", 1836 | "source": { 1837 | "type": "git", 1838 | "url": "https://github.com/sebastianbergmann/environment.git", 1839 | "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" 1840 | }, 1841 | "dist": { 1842 | "type": "zip", 1843 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", 1844 | "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", 1845 | "shasum": "" 1846 | }, 1847 | "require": { 1848 | "php": ">=7.3" 1849 | }, 1850 | "require-dev": { 1851 | "phpunit/phpunit": "^9.3" 1852 | }, 1853 | "suggest": { 1854 | "ext-posix": "*" 1855 | }, 1856 | "type": "library", 1857 | "extra": { 1858 | "branch-alias": { 1859 | "dev-master": "5.1-dev" 1860 | } 1861 | }, 1862 | "autoload": { 1863 | "classmap": [ 1864 | "src/" 1865 | ] 1866 | }, 1867 | "notification-url": "https://packagist.org/downloads/", 1868 | "license": [ 1869 | "BSD-3-Clause" 1870 | ], 1871 | "authors": [ 1872 | { 1873 | "name": "Sebastian Bergmann", 1874 | "email": "sebastian@phpunit.de" 1875 | } 1876 | ], 1877 | "description": "Provides functionality to handle HHVM/PHP environments", 1878 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1879 | "keywords": [ 1880 | "Xdebug", 1881 | "environment", 1882 | "hhvm" 1883 | ], 1884 | "support": { 1885 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1886 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" 1887 | }, 1888 | "funding": [ 1889 | { 1890 | "url": "https://github.com/sebastianbergmann", 1891 | "type": "github" 1892 | } 1893 | ], 1894 | "time": "2023-02-03T06:03:51+00:00" 1895 | }, 1896 | { 1897 | "name": "sebastian/exporter", 1898 | "version": "4.0.5", 1899 | "source": { 1900 | "type": "git", 1901 | "url": "https://github.com/sebastianbergmann/exporter.git", 1902 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" 1903 | }, 1904 | "dist": { 1905 | "type": "zip", 1906 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 1907 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 1908 | "shasum": "" 1909 | }, 1910 | "require": { 1911 | "php": ">=7.3", 1912 | "sebastian/recursion-context": "^4.0" 1913 | }, 1914 | "require-dev": { 1915 | "ext-mbstring": "*", 1916 | "phpunit/phpunit": "^9.3" 1917 | }, 1918 | "type": "library", 1919 | "extra": { 1920 | "branch-alias": { 1921 | "dev-master": "4.0-dev" 1922 | } 1923 | }, 1924 | "autoload": { 1925 | "classmap": [ 1926 | "src/" 1927 | ] 1928 | }, 1929 | "notification-url": "https://packagist.org/downloads/", 1930 | "license": [ 1931 | "BSD-3-Clause" 1932 | ], 1933 | "authors": [ 1934 | { 1935 | "name": "Sebastian Bergmann", 1936 | "email": "sebastian@phpunit.de" 1937 | }, 1938 | { 1939 | "name": "Jeff Welch", 1940 | "email": "whatthejeff@gmail.com" 1941 | }, 1942 | { 1943 | "name": "Volker Dusch", 1944 | "email": "github@wallbash.com" 1945 | }, 1946 | { 1947 | "name": "Adam Harvey", 1948 | "email": "aharvey@php.net" 1949 | }, 1950 | { 1951 | "name": "Bernhard Schussek", 1952 | "email": "bschussek@gmail.com" 1953 | } 1954 | ], 1955 | "description": "Provides the functionality to export PHP variables for visualization", 1956 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1957 | "keywords": [ 1958 | "export", 1959 | "exporter" 1960 | ], 1961 | "support": { 1962 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1963 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" 1964 | }, 1965 | "funding": [ 1966 | { 1967 | "url": "https://github.com/sebastianbergmann", 1968 | "type": "github" 1969 | } 1970 | ], 1971 | "time": "2022-09-14T06:03:37+00:00" 1972 | }, 1973 | { 1974 | "name": "sebastian/global-state", 1975 | "version": "5.0.5", 1976 | "source": { 1977 | "type": "git", 1978 | "url": "https://github.com/sebastianbergmann/global-state.git", 1979 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 1980 | }, 1981 | "dist": { 1982 | "type": "zip", 1983 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1984 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 1985 | "shasum": "" 1986 | }, 1987 | "require": { 1988 | "php": ">=7.3", 1989 | "sebastian/object-reflector": "^2.0", 1990 | "sebastian/recursion-context": "^4.0" 1991 | }, 1992 | "require-dev": { 1993 | "ext-dom": "*", 1994 | "phpunit/phpunit": "^9.3" 1995 | }, 1996 | "suggest": { 1997 | "ext-uopz": "*" 1998 | }, 1999 | "type": "library", 2000 | "extra": { 2001 | "branch-alias": { 2002 | "dev-master": "5.0-dev" 2003 | } 2004 | }, 2005 | "autoload": { 2006 | "classmap": [ 2007 | "src/" 2008 | ] 2009 | }, 2010 | "notification-url": "https://packagist.org/downloads/", 2011 | "license": [ 2012 | "BSD-3-Clause" 2013 | ], 2014 | "authors": [ 2015 | { 2016 | "name": "Sebastian Bergmann", 2017 | "email": "sebastian@phpunit.de" 2018 | } 2019 | ], 2020 | "description": "Snapshotting of global state", 2021 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2022 | "keywords": [ 2023 | "global state" 2024 | ], 2025 | "support": { 2026 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 2027 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 2028 | }, 2029 | "funding": [ 2030 | { 2031 | "url": "https://github.com/sebastianbergmann", 2032 | "type": "github" 2033 | } 2034 | ], 2035 | "time": "2022-02-14T08:28:10+00:00" 2036 | }, 2037 | { 2038 | "name": "sebastian/lines-of-code", 2039 | "version": "1.0.3", 2040 | "source": { 2041 | "type": "git", 2042 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 2043 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 2044 | }, 2045 | "dist": { 2046 | "type": "zip", 2047 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 2048 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 2049 | "shasum": "" 2050 | }, 2051 | "require": { 2052 | "nikic/php-parser": "^4.6", 2053 | "php": ">=7.3" 2054 | }, 2055 | "require-dev": { 2056 | "phpunit/phpunit": "^9.3" 2057 | }, 2058 | "type": "library", 2059 | "extra": { 2060 | "branch-alias": { 2061 | "dev-master": "1.0-dev" 2062 | } 2063 | }, 2064 | "autoload": { 2065 | "classmap": [ 2066 | "src/" 2067 | ] 2068 | }, 2069 | "notification-url": "https://packagist.org/downloads/", 2070 | "license": [ 2071 | "BSD-3-Clause" 2072 | ], 2073 | "authors": [ 2074 | { 2075 | "name": "Sebastian Bergmann", 2076 | "email": "sebastian@phpunit.de", 2077 | "role": "lead" 2078 | } 2079 | ], 2080 | "description": "Library for counting the lines of code in PHP source code", 2081 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 2082 | "support": { 2083 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 2084 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 2085 | }, 2086 | "funding": [ 2087 | { 2088 | "url": "https://github.com/sebastianbergmann", 2089 | "type": "github" 2090 | } 2091 | ], 2092 | "time": "2020-11-28T06:42:11+00:00" 2093 | }, 2094 | { 2095 | "name": "sebastian/object-enumerator", 2096 | "version": "4.0.4", 2097 | "source": { 2098 | "type": "git", 2099 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2100 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 2101 | }, 2102 | "dist": { 2103 | "type": "zip", 2104 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 2105 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 2106 | "shasum": "" 2107 | }, 2108 | "require": { 2109 | "php": ">=7.3", 2110 | "sebastian/object-reflector": "^2.0", 2111 | "sebastian/recursion-context": "^4.0" 2112 | }, 2113 | "require-dev": { 2114 | "phpunit/phpunit": "^9.3" 2115 | }, 2116 | "type": "library", 2117 | "extra": { 2118 | "branch-alias": { 2119 | "dev-master": "4.0-dev" 2120 | } 2121 | }, 2122 | "autoload": { 2123 | "classmap": [ 2124 | "src/" 2125 | ] 2126 | }, 2127 | "notification-url": "https://packagist.org/downloads/", 2128 | "license": [ 2129 | "BSD-3-Clause" 2130 | ], 2131 | "authors": [ 2132 | { 2133 | "name": "Sebastian Bergmann", 2134 | "email": "sebastian@phpunit.de" 2135 | } 2136 | ], 2137 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2138 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2139 | "support": { 2140 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2141 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 2142 | }, 2143 | "funding": [ 2144 | { 2145 | "url": "https://github.com/sebastianbergmann", 2146 | "type": "github" 2147 | } 2148 | ], 2149 | "time": "2020-10-26T13:12:34+00:00" 2150 | }, 2151 | { 2152 | "name": "sebastian/object-reflector", 2153 | "version": "2.0.4", 2154 | "source": { 2155 | "type": "git", 2156 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2157 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 2158 | }, 2159 | "dist": { 2160 | "type": "zip", 2161 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2162 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2163 | "shasum": "" 2164 | }, 2165 | "require": { 2166 | "php": ">=7.3" 2167 | }, 2168 | "require-dev": { 2169 | "phpunit/phpunit": "^9.3" 2170 | }, 2171 | "type": "library", 2172 | "extra": { 2173 | "branch-alias": { 2174 | "dev-master": "2.0-dev" 2175 | } 2176 | }, 2177 | "autoload": { 2178 | "classmap": [ 2179 | "src/" 2180 | ] 2181 | }, 2182 | "notification-url": "https://packagist.org/downloads/", 2183 | "license": [ 2184 | "BSD-3-Clause" 2185 | ], 2186 | "authors": [ 2187 | { 2188 | "name": "Sebastian Bergmann", 2189 | "email": "sebastian@phpunit.de" 2190 | } 2191 | ], 2192 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2193 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2194 | "support": { 2195 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2196 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 2197 | }, 2198 | "funding": [ 2199 | { 2200 | "url": "https://github.com/sebastianbergmann", 2201 | "type": "github" 2202 | } 2203 | ], 2204 | "time": "2020-10-26T13:14:26+00:00" 2205 | }, 2206 | { 2207 | "name": "sebastian/recursion-context", 2208 | "version": "4.0.5", 2209 | "source": { 2210 | "type": "git", 2211 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2212 | "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" 2213 | }, 2214 | "dist": { 2215 | "type": "zip", 2216 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", 2217 | "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", 2218 | "shasum": "" 2219 | }, 2220 | "require": { 2221 | "php": ">=7.3" 2222 | }, 2223 | "require-dev": { 2224 | "phpunit/phpunit": "^9.3" 2225 | }, 2226 | "type": "library", 2227 | "extra": { 2228 | "branch-alias": { 2229 | "dev-master": "4.0-dev" 2230 | } 2231 | }, 2232 | "autoload": { 2233 | "classmap": [ 2234 | "src/" 2235 | ] 2236 | }, 2237 | "notification-url": "https://packagist.org/downloads/", 2238 | "license": [ 2239 | "BSD-3-Clause" 2240 | ], 2241 | "authors": [ 2242 | { 2243 | "name": "Sebastian Bergmann", 2244 | "email": "sebastian@phpunit.de" 2245 | }, 2246 | { 2247 | "name": "Jeff Welch", 2248 | "email": "whatthejeff@gmail.com" 2249 | }, 2250 | { 2251 | "name": "Adam Harvey", 2252 | "email": "aharvey@php.net" 2253 | } 2254 | ], 2255 | "description": "Provides functionality to recursively process PHP variables", 2256 | "homepage": "https://github.com/sebastianbergmann/recursion-context", 2257 | "support": { 2258 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2259 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" 2260 | }, 2261 | "funding": [ 2262 | { 2263 | "url": "https://github.com/sebastianbergmann", 2264 | "type": "github" 2265 | } 2266 | ], 2267 | "time": "2023-02-03T06:07:39+00:00" 2268 | }, 2269 | { 2270 | "name": "sebastian/resource-operations", 2271 | "version": "3.0.3", 2272 | "source": { 2273 | "type": "git", 2274 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2275 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 2276 | }, 2277 | "dist": { 2278 | "type": "zip", 2279 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2280 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2281 | "shasum": "" 2282 | }, 2283 | "require": { 2284 | "php": ">=7.3" 2285 | }, 2286 | "require-dev": { 2287 | "phpunit/phpunit": "^9.0" 2288 | }, 2289 | "type": "library", 2290 | "extra": { 2291 | "branch-alias": { 2292 | "dev-master": "3.0-dev" 2293 | } 2294 | }, 2295 | "autoload": { 2296 | "classmap": [ 2297 | "src/" 2298 | ] 2299 | }, 2300 | "notification-url": "https://packagist.org/downloads/", 2301 | "license": [ 2302 | "BSD-3-Clause" 2303 | ], 2304 | "authors": [ 2305 | { 2306 | "name": "Sebastian Bergmann", 2307 | "email": "sebastian@phpunit.de" 2308 | } 2309 | ], 2310 | "description": "Provides a list of PHP built-in functions that operate on resources", 2311 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2312 | "support": { 2313 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 2314 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 2315 | }, 2316 | "funding": [ 2317 | { 2318 | "url": "https://github.com/sebastianbergmann", 2319 | "type": "github" 2320 | } 2321 | ], 2322 | "time": "2020-09-28T06:45:17+00:00" 2323 | }, 2324 | { 2325 | "name": "sebastian/type", 2326 | "version": "3.2.1", 2327 | "source": { 2328 | "type": "git", 2329 | "url": "https://github.com/sebastianbergmann/type.git", 2330 | "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" 2331 | }, 2332 | "dist": { 2333 | "type": "zip", 2334 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", 2335 | "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", 2336 | "shasum": "" 2337 | }, 2338 | "require": { 2339 | "php": ">=7.3" 2340 | }, 2341 | "require-dev": { 2342 | "phpunit/phpunit": "^9.5" 2343 | }, 2344 | "type": "library", 2345 | "extra": { 2346 | "branch-alias": { 2347 | "dev-master": "3.2-dev" 2348 | } 2349 | }, 2350 | "autoload": { 2351 | "classmap": [ 2352 | "src/" 2353 | ] 2354 | }, 2355 | "notification-url": "https://packagist.org/downloads/", 2356 | "license": [ 2357 | "BSD-3-Clause" 2358 | ], 2359 | "authors": [ 2360 | { 2361 | "name": "Sebastian Bergmann", 2362 | "email": "sebastian@phpunit.de", 2363 | "role": "lead" 2364 | } 2365 | ], 2366 | "description": "Collection of value objects that represent the types of the PHP type system", 2367 | "homepage": "https://github.com/sebastianbergmann/type", 2368 | "support": { 2369 | "issues": "https://github.com/sebastianbergmann/type/issues", 2370 | "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" 2371 | }, 2372 | "funding": [ 2373 | { 2374 | "url": "https://github.com/sebastianbergmann", 2375 | "type": "github" 2376 | } 2377 | ], 2378 | "time": "2023-02-03T06:13:03+00:00" 2379 | }, 2380 | { 2381 | "name": "sebastian/version", 2382 | "version": "3.0.2", 2383 | "source": { 2384 | "type": "git", 2385 | "url": "https://github.com/sebastianbergmann/version.git", 2386 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 2387 | }, 2388 | "dist": { 2389 | "type": "zip", 2390 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 2391 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 2392 | "shasum": "" 2393 | }, 2394 | "require": { 2395 | "php": ">=7.3" 2396 | }, 2397 | "type": "library", 2398 | "extra": { 2399 | "branch-alias": { 2400 | "dev-master": "3.0-dev" 2401 | } 2402 | }, 2403 | "autoload": { 2404 | "classmap": [ 2405 | "src/" 2406 | ] 2407 | }, 2408 | "notification-url": "https://packagist.org/downloads/", 2409 | "license": [ 2410 | "BSD-3-Clause" 2411 | ], 2412 | "authors": [ 2413 | { 2414 | "name": "Sebastian Bergmann", 2415 | "email": "sebastian@phpunit.de", 2416 | "role": "lead" 2417 | } 2418 | ], 2419 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2420 | "homepage": "https://github.com/sebastianbergmann/version", 2421 | "support": { 2422 | "issues": "https://github.com/sebastianbergmann/version/issues", 2423 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 2424 | }, 2425 | "funding": [ 2426 | { 2427 | "url": "https://github.com/sebastianbergmann", 2428 | "type": "github" 2429 | } 2430 | ], 2431 | "time": "2020-09-28T06:39:44+00:00" 2432 | }, 2433 | { 2434 | "name": "symfony/console", 2435 | "version": "v6.2.5", 2436 | "source": { 2437 | "type": "git", 2438 | "url": "https://github.com/symfony/console.git", 2439 | "reference": "3e294254f2191762c1d137aed4b94e966965e985" 2440 | }, 2441 | "dist": { 2442 | "type": "zip", 2443 | "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", 2444 | "reference": "3e294254f2191762c1d137aed4b94e966965e985", 2445 | "shasum": "" 2446 | }, 2447 | "require": { 2448 | "php": ">=8.1", 2449 | "symfony/deprecation-contracts": "^2.1|^3", 2450 | "symfony/polyfill-mbstring": "~1.0", 2451 | "symfony/service-contracts": "^1.1|^2|^3", 2452 | "symfony/string": "^5.4|^6.0" 2453 | }, 2454 | "conflict": { 2455 | "symfony/dependency-injection": "<5.4", 2456 | "symfony/dotenv": "<5.4", 2457 | "symfony/event-dispatcher": "<5.4", 2458 | "symfony/lock": "<5.4", 2459 | "symfony/process": "<5.4" 2460 | }, 2461 | "provide": { 2462 | "psr/log-implementation": "1.0|2.0|3.0" 2463 | }, 2464 | "require-dev": { 2465 | "psr/log": "^1|^2|^3", 2466 | "symfony/config": "^5.4|^6.0", 2467 | "symfony/dependency-injection": "^5.4|^6.0", 2468 | "symfony/event-dispatcher": "^5.4|^6.0", 2469 | "symfony/lock": "^5.4|^6.0", 2470 | "symfony/process": "^5.4|^6.0", 2471 | "symfony/var-dumper": "^5.4|^6.0" 2472 | }, 2473 | "suggest": { 2474 | "psr/log": "For using the console logger", 2475 | "symfony/event-dispatcher": "", 2476 | "symfony/lock": "", 2477 | "symfony/process": "" 2478 | }, 2479 | "type": "library", 2480 | "autoload": { 2481 | "psr-4": { 2482 | "Symfony\\Component\\Console\\": "" 2483 | }, 2484 | "exclude-from-classmap": [ 2485 | "/Tests/" 2486 | ] 2487 | }, 2488 | "notification-url": "https://packagist.org/downloads/", 2489 | "license": [ 2490 | "MIT" 2491 | ], 2492 | "authors": [ 2493 | { 2494 | "name": "Fabien Potencier", 2495 | "email": "fabien@symfony.com" 2496 | }, 2497 | { 2498 | "name": "Symfony Community", 2499 | "homepage": "https://symfony.com/contributors" 2500 | } 2501 | ], 2502 | "description": "Eases the creation of beautiful and testable command line interfaces", 2503 | "homepage": "https://symfony.com", 2504 | "keywords": [ 2505 | "cli", 2506 | "command line", 2507 | "console", 2508 | "terminal" 2509 | ], 2510 | "support": { 2511 | "source": "https://github.com/symfony/console/tree/v6.2.5" 2512 | }, 2513 | "funding": [ 2514 | { 2515 | "url": "https://symfony.com/sponsor", 2516 | "type": "custom" 2517 | }, 2518 | { 2519 | "url": "https://github.com/fabpot", 2520 | "type": "github" 2521 | }, 2522 | { 2523 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2524 | "type": "tidelift" 2525 | } 2526 | ], 2527 | "time": "2023-01-01T08:38:09+00:00" 2528 | }, 2529 | { 2530 | "name": "symfony/deprecation-contracts", 2531 | "version": "v3.2.0", 2532 | "source": { 2533 | "type": "git", 2534 | "url": "https://github.com/symfony/deprecation-contracts.git", 2535 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" 2536 | }, 2537 | "dist": { 2538 | "type": "zip", 2539 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", 2540 | "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", 2541 | "shasum": "" 2542 | }, 2543 | "require": { 2544 | "php": ">=8.1" 2545 | }, 2546 | "type": "library", 2547 | "extra": { 2548 | "branch-alias": { 2549 | "dev-main": "3.3-dev" 2550 | }, 2551 | "thanks": { 2552 | "name": "symfony/contracts", 2553 | "url": "https://github.com/symfony/contracts" 2554 | } 2555 | }, 2556 | "autoload": { 2557 | "files": [ 2558 | "function.php" 2559 | ] 2560 | }, 2561 | "notification-url": "https://packagist.org/downloads/", 2562 | "license": [ 2563 | "MIT" 2564 | ], 2565 | "authors": [ 2566 | { 2567 | "name": "Nicolas Grekas", 2568 | "email": "p@tchwork.com" 2569 | }, 2570 | { 2571 | "name": "Symfony Community", 2572 | "homepage": "https://symfony.com/contributors" 2573 | } 2574 | ], 2575 | "description": "A generic function and convention to trigger deprecation notices", 2576 | "homepage": "https://symfony.com", 2577 | "support": { 2578 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" 2579 | }, 2580 | "funding": [ 2581 | { 2582 | "url": "https://symfony.com/sponsor", 2583 | "type": "custom" 2584 | }, 2585 | { 2586 | "url": "https://github.com/fabpot", 2587 | "type": "github" 2588 | }, 2589 | { 2590 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2591 | "type": "tidelift" 2592 | } 2593 | ], 2594 | "time": "2022-11-25T10:21:52+00:00" 2595 | }, 2596 | { 2597 | "name": "symfony/polyfill-ctype", 2598 | "version": "v1.27.0", 2599 | "source": { 2600 | "type": "git", 2601 | "url": "https://github.com/symfony/polyfill-ctype.git", 2602 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" 2603 | }, 2604 | "dist": { 2605 | "type": "zip", 2606 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", 2607 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", 2608 | "shasum": "" 2609 | }, 2610 | "require": { 2611 | "php": ">=7.1" 2612 | }, 2613 | "provide": { 2614 | "ext-ctype": "*" 2615 | }, 2616 | "suggest": { 2617 | "ext-ctype": "For best performance" 2618 | }, 2619 | "type": "library", 2620 | "extra": { 2621 | "branch-alias": { 2622 | "dev-main": "1.27-dev" 2623 | }, 2624 | "thanks": { 2625 | "name": "symfony/polyfill", 2626 | "url": "https://github.com/symfony/polyfill" 2627 | } 2628 | }, 2629 | "autoload": { 2630 | "files": [ 2631 | "bootstrap.php" 2632 | ], 2633 | "psr-4": { 2634 | "Symfony\\Polyfill\\Ctype\\": "" 2635 | } 2636 | }, 2637 | "notification-url": "https://packagist.org/downloads/", 2638 | "license": [ 2639 | "MIT" 2640 | ], 2641 | "authors": [ 2642 | { 2643 | "name": "Gert de Pagter", 2644 | "email": "BackEndTea@gmail.com" 2645 | }, 2646 | { 2647 | "name": "Symfony Community", 2648 | "homepage": "https://symfony.com/contributors" 2649 | } 2650 | ], 2651 | "description": "Symfony polyfill for ctype functions", 2652 | "homepage": "https://symfony.com", 2653 | "keywords": [ 2654 | "compatibility", 2655 | "ctype", 2656 | "polyfill", 2657 | "portable" 2658 | ], 2659 | "support": { 2660 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" 2661 | }, 2662 | "funding": [ 2663 | { 2664 | "url": "https://symfony.com/sponsor", 2665 | "type": "custom" 2666 | }, 2667 | { 2668 | "url": "https://github.com/fabpot", 2669 | "type": "github" 2670 | }, 2671 | { 2672 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2673 | "type": "tidelift" 2674 | } 2675 | ], 2676 | "time": "2022-11-03T14:55:06+00:00" 2677 | }, 2678 | { 2679 | "name": "symfony/polyfill-intl-grapheme", 2680 | "version": "v1.27.0", 2681 | "source": { 2682 | "type": "git", 2683 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 2684 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354" 2685 | }, 2686 | "dist": { 2687 | "type": "zip", 2688 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", 2689 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354", 2690 | "shasum": "" 2691 | }, 2692 | "require": { 2693 | "php": ">=7.1" 2694 | }, 2695 | "suggest": { 2696 | "ext-intl": "For best performance" 2697 | }, 2698 | "type": "library", 2699 | "extra": { 2700 | "branch-alias": { 2701 | "dev-main": "1.27-dev" 2702 | }, 2703 | "thanks": { 2704 | "name": "symfony/polyfill", 2705 | "url": "https://github.com/symfony/polyfill" 2706 | } 2707 | }, 2708 | "autoload": { 2709 | "files": [ 2710 | "bootstrap.php" 2711 | ], 2712 | "psr-4": { 2713 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 2714 | } 2715 | }, 2716 | "notification-url": "https://packagist.org/downloads/", 2717 | "license": [ 2718 | "MIT" 2719 | ], 2720 | "authors": [ 2721 | { 2722 | "name": "Nicolas Grekas", 2723 | "email": "p@tchwork.com" 2724 | }, 2725 | { 2726 | "name": "Symfony Community", 2727 | "homepage": "https://symfony.com/contributors" 2728 | } 2729 | ], 2730 | "description": "Symfony polyfill for intl's grapheme_* functions", 2731 | "homepage": "https://symfony.com", 2732 | "keywords": [ 2733 | "compatibility", 2734 | "grapheme", 2735 | "intl", 2736 | "polyfill", 2737 | "portable", 2738 | "shim" 2739 | ], 2740 | "support": { 2741 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" 2742 | }, 2743 | "funding": [ 2744 | { 2745 | "url": "https://symfony.com/sponsor", 2746 | "type": "custom" 2747 | }, 2748 | { 2749 | "url": "https://github.com/fabpot", 2750 | "type": "github" 2751 | }, 2752 | { 2753 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2754 | "type": "tidelift" 2755 | } 2756 | ], 2757 | "time": "2022-11-03T14:55:06+00:00" 2758 | }, 2759 | { 2760 | "name": "symfony/polyfill-intl-normalizer", 2761 | "version": "v1.27.0", 2762 | "source": { 2763 | "type": "git", 2764 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 2765 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" 2766 | }, 2767 | "dist": { 2768 | "type": "zip", 2769 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", 2770 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", 2771 | "shasum": "" 2772 | }, 2773 | "require": { 2774 | "php": ">=7.1" 2775 | }, 2776 | "suggest": { 2777 | "ext-intl": "For best performance" 2778 | }, 2779 | "type": "library", 2780 | "extra": { 2781 | "branch-alias": { 2782 | "dev-main": "1.27-dev" 2783 | }, 2784 | "thanks": { 2785 | "name": "symfony/polyfill", 2786 | "url": "https://github.com/symfony/polyfill" 2787 | } 2788 | }, 2789 | "autoload": { 2790 | "files": [ 2791 | "bootstrap.php" 2792 | ], 2793 | "psr-4": { 2794 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 2795 | }, 2796 | "classmap": [ 2797 | "Resources/stubs" 2798 | ] 2799 | }, 2800 | "notification-url": "https://packagist.org/downloads/", 2801 | "license": [ 2802 | "MIT" 2803 | ], 2804 | "authors": [ 2805 | { 2806 | "name": "Nicolas Grekas", 2807 | "email": "p@tchwork.com" 2808 | }, 2809 | { 2810 | "name": "Symfony Community", 2811 | "homepage": "https://symfony.com/contributors" 2812 | } 2813 | ], 2814 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 2815 | "homepage": "https://symfony.com", 2816 | "keywords": [ 2817 | "compatibility", 2818 | "intl", 2819 | "normalizer", 2820 | "polyfill", 2821 | "portable", 2822 | "shim" 2823 | ], 2824 | "support": { 2825 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" 2826 | }, 2827 | "funding": [ 2828 | { 2829 | "url": "https://symfony.com/sponsor", 2830 | "type": "custom" 2831 | }, 2832 | { 2833 | "url": "https://github.com/fabpot", 2834 | "type": "github" 2835 | }, 2836 | { 2837 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2838 | "type": "tidelift" 2839 | } 2840 | ], 2841 | "time": "2022-11-03T14:55:06+00:00" 2842 | }, 2843 | { 2844 | "name": "symfony/service-contracts", 2845 | "version": "v3.2.0", 2846 | "source": { 2847 | "type": "git", 2848 | "url": "https://github.com/symfony/service-contracts.git", 2849 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" 2850 | }, 2851 | "dist": { 2852 | "type": "zip", 2853 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", 2854 | "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", 2855 | "shasum": "" 2856 | }, 2857 | "require": { 2858 | "php": ">=8.1", 2859 | "psr/container": "^2.0" 2860 | }, 2861 | "conflict": { 2862 | "ext-psr": "<1.1|>=2" 2863 | }, 2864 | "suggest": { 2865 | "symfony/service-implementation": "" 2866 | }, 2867 | "type": "library", 2868 | "extra": { 2869 | "branch-alias": { 2870 | "dev-main": "3.3-dev" 2871 | }, 2872 | "thanks": { 2873 | "name": "symfony/contracts", 2874 | "url": "https://github.com/symfony/contracts" 2875 | } 2876 | }, 2877 | "autoload": { 2878 | "psr-4": { 2879 | "Symfony\\Contracts\\Service\\": "" 2880 | }, 2881 | "exclude-from-classmap": [ 2882 | "/Test/" 2883 | ] 2884 | }, 2885 | "notification-url": "https://packagist.org/downloads/", 2886 | "license": [ 2887 | "MIT" 2888 | ], 2889 | "authors": [ 2890 | { 2891 | "name": "Nicolas Grekas", 2892 | "email": "p@tchwork.com" 2893 | }, 2894 | { 2895 | "name": "Symfony Community", 2896 | "homepage": "https://symfony.com/contributors" 2897 | } 2898 | ], 2899 | "description": "Generic abstractions related to writing services", 2900 | "homepage": "https://symfony.com", 2901 | "keywords": [ 2902 | "abstractions", 2903 | "contracts", 2904 | "decoupling", 2905 | "interfaces", 2906 | "interoperability", 2907 | "standards" 2908 | ], 2909 | "support": { 2910 | "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" 2911 | }, 2912 | "funding": [ 2913 | { 2914 | "url": "https://symfony.com/sponsor", 2915 | "type": "custom" 2916 | }, 2917 | { 2918 | "url": "https://github.com/fabpot", 2919 | "type": "github" 2920 | }, 2921 | { 2922 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2923 | "type": "tidelift" 2924 | } 2925 | ], 2926 | "time": "2022-11-25T10:21:52+00:00" 2927 | }, 2928 | { 2929 | "name": "symfony/string", 2930 | "version": "v6.2.5", 2931 | "source": { 2932 | "type": "git", 2933 | "url": "https://github.com/symfony/string.git", 2934 | "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" 2935 | }, 2936 | "dist": { 2937 | "type": "zip", 2938 | "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", 2939 | "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", 2940 | "shasum": "" 2941 | }, 2942 | "require": { 2943 | "php": ">=8.1", 2944 | "symfony/polyfill-ctype": "~1.8", 2945 | "symfony/polyfill-intl-grapheme": "~1.0", 2946 | "symfony/polyfill-intl-normalizer": "~1.0", 2947 | "symfony/polyfill-mbstring": "~1.0" 2948 | }, 2949 | "conflict": { 2950 | "symfony/translation-contracts": "<2.0" 2951 | }, 2952 | "require-dev": { 2953 | "symfony/error-handler": "^5.4|^6.0", 2954 | "symfony/http-client": "^5.4|^6.0", 2955 | "symfony/intl": "^6.2", 2956 | "symfony/translation-contracts": "^2.0|^3.0", 2957 | "symfony/var-exporter": "^5.4|^6.0" 2958 | }, 2959 | "type": "library", 2960 | "autoload": { 2961 | "files": [ 2962 | "Resources/functions.php" 2963 | ], 2964 | "psr-4": { 2965 | "Symfony\\Component\\String\\": "" 2966 | }, 2967 | "exclude-from-classmap": [ 2968 | "/Tests/" 2969 | ] 2970 | }, 2971 | "notification-url": "https://packagist.org/downloads/", 2972 | "license": [ 2973 | "MIT" 2974 | ], 2975 | "authors": [ 2976 | { 2977 | "name": "Nicolas Grekas", 2978 | "email": "p@tchwork.com" 2979 | }, 2980 | { 2981 | "name": "Symfony Community", 2982 | "homepage": "https://symfony.com/contributors" 2983 | } 2984 | ], 2985 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 2986 | "homepage": "https://symfony.com", 2987 | "keywords": [ 2988 | "grapheme", 2989 | "i18n", 2990 | "string", 2991 | "unicode", 2992 | "utf-8", 2993 | "utf8" 2994 | ], 2995 | "support": { 2996 | "source": "https://github.com/symfony/string/tree/v6.2.5" 2997 | }, 2998 | "funding": [ 2999 | { 3000 | "url": "https://symfony.com/sponsor", 3001 | "type": "custom" 3002 | }, 3003 | { 3004 | "url": "https://github.com/fabpot", 3005 | "type": "github" 3006 | }, 3007 | { 3008 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3009 | "type": "tidelift" 3010 | } 3011 | ], 3012 | "time": "2023-01-01T08:38:09+00:00" 3013 | }, 3014 | { 3015 | "name": "theseer/tokenizer", 3016 | "version": "1.2.1", 3017 | "source": { 3018 | "type": "git", 3019 | "url": "https://github.com/theseer/tokenizer.git", 3020 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 3021 | }, 3022 | "dist": { 3023 | "type": "zip", 3024 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 3025 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 3026 | "shasum": "" 3027 | }, 3028 | "require": { 3029 | "ext-dom": "*", 3030 | "ext-tokenizer": "*", 3031 | "ext-xmlwriter": "*", 3032 | "php": "^7.2 || ^8.0" 3033 | }, 3034 | "type": "library", 3035 | "autoload": { 3036 | "classmap": [ 3037 | "src/" 3038 | ] 3039 | }, 3040 | "notification-url": "https://packagist.org/downloads/", 3041 | "license": [ 3042 | "BSD-3-Clause" 3043 | ], 3044 | "authors": [ 3045 | { 3046 | "name": "Arne Blankerts", 3047 | "email": "arne@blankerts.de", 3048 | "role": "Developer" 3049 | } 3050 | ], 3051 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3052 | "support": { 3053 | "issues": "https://github.com/theseer/tokenizer/issues", 3054 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 3055 | }, 3056 | "funding": [ 3057 | { 3058 | "url": "https://github.com/theseer", 3059 | "type": "github" 3060 | } 3061 | ], 3062 | "time": "2021-07-28T10:34:58+00:00" 3063 | } 3064 | ], 3065 | "aliases": [], 3066 | "minimum-stability": "dev", 3067 | "stability-flags": [], 3068 | "prefer-stable": true, 3069 | "prefer-lowest": false, 3070 | "platform": { 3071 | "php": "^8.1" 3072 | }, 3073 | "platform-dev": [], 3074 | "plugin-api-version": "2.2.0" 3075 | } 3076 | --------------------------------------------------------------------------------