├── .github └── workflows │ ├── continuous-integration.yml │ └── release-on-milestone-closed.yml ├── .laminas-ci.json ├── LICENSE ├── README.md ├── bin ├── roave-no-leaks └── roave-no-leaks.php ├── composer.json ├── composer.lock ├── renovate.json └── src ├── CollectTestExecutionMemoryFootprints.php ├── EmptyBaselineMemoryUsageTest.php ├── MeasuredBaselineTestMemoryLeak.php └── MeasuredTestRunMemoryLeak.php /.github/workflows/continuous-integration.yml: -------------------------------------------------------------------------------- 1 | # See https://github.com/laminas/laminas-continuous-integration-action 2 | # Generates a job matrix based on current dependencies and supported version 3 | # ranges, then runs all those jobs 4 | name: "Continuous Integration" 5 | 6 | on: 7 | pull_request: 8 | push: 9 | 10 | jobs: 11 | matrix: 12 | name: Generate job matrix 13 | runs-on: ubuntu-latest 14 | outputs: 15 | matrix: ${{ steps.matrix.outputs.matrix }} 16 | steps: 17 | - name: Gather CI configuration 18 | id: matrix 19 | uses: laminas/laminas-ci-matrix-action@38e146b542b4952fea583408acff8dcddf20b427 # 1.27.0 20 | 21 | qa: 22 | name: QA Checks 23 | needs: [ matrix ] 24 | runs-on: ${{ matrix.operatingSystem }} 25 | strategy: 26 | fail-fast: false 27 | matrix: ${{ fromJSON(needs.matrix.outputs.matrix) }} 28 | steps: 29 | - name: ${{ matrix.name }} 30 | uses: laminas/laminas-continuous-integration-action@f474cab0f489b50c3b31d6ae04f0a5fc189c796d # 1.40.0 31 | env: 32 | "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} 33 | "INFECTION_DASHBOARD_API_KEY": ${{ secrets.INFECTION_DASHBOARD_API_KEY }} 34 | "STRYKER_DASHBOARD_API_KEY": ${{ secrets.STRYKER_DASHBOARD_API_KEY }} 35 | with: 36 | job: ${{ matrix.job }} 37 | -------------------------------------------------------------------------------- /.github/workflows/release-on-milestone-closed.yml: -------------------------------------------------------------------------------- 1 | # https://help.github.com/en/categories/automating-your-workflow-with-github-actions 2 | 3 | name: "Automatic Releases" 4 | 5 | on: 6 | milestone: 7 | types: 8 | - "closed" 9 | 10 | jobs: 11 | release: 12 | name: "GIT tag, release & create merge-up PR" 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: "Checkout" 17 | uses: "actions/checkout@v4" 18 | 19 | - name: "Release" 20 | uses: "laminas/automatic-releases@v1" 21 | with: 22 | command-name: "laminas:automatic-releases:release" 23 | env: 24 | "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} 25 | "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} 26 | "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} 27 | "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} 28 | 29 | - name: "Create Merge-Up Pull Request" 30 | uses: "laminas/automatic-releases@v1" 31 | with: 32 | command-name: "laminas:automatic-releases:create-merge-up-pull-request" 33 | env: 34 | "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} 35 | "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} 36 | "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} 37 | "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} 38 | 39 | - name: "Create and/or Switch to new Release Branch" 40 | uses: "laminas/automatic-releases@v1" 41 | with: 42 | command-name: "laminas:automatic-releases:switch-default-branch-to-next-minor" 43 | env: 44 | "GITHUB_TOKEN": ${{ secrets.ORGANIZATION_ADMIN_TOKEN }} 45 | "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} 46 | "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} 47 | "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} 48 | 49 | - name: "Bump Changelog Version On Originating Release Branch" 50 | uses: "laminas/automatic-releases@v1" 51 | with: 52 | command-name: "laminas:automatic-releases:bump-changelog" 53 | env: 54 | "GITHUB_TOKEN": ${{ secrets.GITHUB_TOKEN }} 55 | "SIGNING_SECRET_KEY": ${{ secrets.SIGNING_SECRET_KEY }} 56 | "GIT_AUTHOR_NAME": ${{ secrets.GIT_AUTHOR_NAME }} 57 | "GIT_AUTHOR_EMAIL": ${{ secrets.GIT_AUTHOR_EMAIL }} 58 | -------------------------------------------------------------------------------- /.laminas-ci.json: -------------------------------------------------------------------------------- 1 | { 2 | "exclude": [ 3 | { 4 | "name": "Infection [8.1, locked]" 5 | } 6 | ] 7 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Roave, LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # roave/no-leaks 2 | 3 | [![Latest Stable Version](https://poser.pugx.org/roave/no-leaks/v/stable.png)](https://packagist.org/packages/roave/no-leaks) 4 | 5 | ![roave/no-leaks](./logo/no-leaks.png) 6 | 7 | This library is a [PHPUnit](https://github.com/sebastianbergmann/phpunit) plugin 8 | that detects memory leaks in tested code or tests. 9 | It utilizes `memory_get_usage()` to make sure the code being executed properly cleans up after itself. 10 | 11 | ## Installation 12 | 13 | ```sh 14 | composer require --dev roave/no-leaks 15 | ``` 16 | 17 | ## Usage 18 | 19 | ```sh 20 | vendor/bin/roave-no-leaks 21 | ``` 22 | 23 | If any memory leaks are detected, you should see an output like 24 | following: 25 | 26 | ```text 27 | Exception: The following test produced memory leaks: 28 | * My\Leaky\Test::testSomething 29 | * My\Leaky\Test::testSomethingElse 30 | ``` 31 | 32 | ## Configuration and Parameters 33 | 34 | [`vendor/bin/roave-no-leaks`](./bin/roave-no-leaks) supports all 35 | configuration parameters and console parameters of PHPUnit. 36 | 37 | ## Known Issues 38 | 39 | Please be aware that this is not a full substitute for PHPUnit: 40 | 41 | * the output format is to be improved 42 | * memory leak detection for scalar types and arrays is not reliable 43 | * can fail depending on xdebug/phpdbg/php-sapi changes 44 | 45 | ## Professional Support 46 | 47 | If you need help with setting up this library in your project, 48 | you can contact us at team@roave.com for consulting/support. 49 | -------------------------------------------------------------------------------- /bin/roave-no-leaks: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | collector = new CollectTestExecutionMemoryFootprints(); 26 | } 27 | 28 | protected function handleArguments(array $argv) : void 29 | { 30 | parent::handleArguments($argv); 31 | 32 | $this->arguments['listeners'] = array_merge( 33 | $this->arguments['listeners'] ?? [], 34 | [$this->collector] 35 | ); 36 | } 37 | 38 | protected function createRunner() : TestRunner 39 | { 40 | $runner = parent::createRunner(); 41 | 42 | $runner->addExtension($this->collector); 43 | 44 | return $runner; 45 | } 46 | })->run(array_merge($_SERVER['argv'], ['--repeat=3']), true); 47 | })(); 48 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "roave/no-leaks", 3 | "license": "MIT", 4 | "autoload": { 5 | "psr-4": { 6 | "Roave\\NoLeaks\\PHPUnit\\": "src" 7 | } 8 | }, 9 | "autoload-dev": { 10 | "psr-4": { 11 | "RoaveE2ETest\\NoLeaks\\PHPUnit\\": "test/e2e", 12 | "RoaveUnitTest\\NoLeaks\\PHPUnit\\": "test/unit" 13 | } 14 | }, 15 | "require": { 16 | "php": "~8.1.0 || ~8.2.0", 17 | "ext-json": "*", 18 | "phpunit/phpunit": "^9.6.20" 19 | }, 20 | "config": { 21 | "allow-plugins": { 22 | "dealerdirect/phpcodesniffer-composer-installer": true, 23 | "infection/extension-installer": false 24 | }, 25 | "platform": { 26 | "php": "8.1.99" 27 | }, 28 | "sort-packages": true 29 | }, 30 | "bin": [ 31 | "bin/roave-no-leaks" 32 | ], 33 | "require-dev": { 34 | "doctrine/coding-standard": "^12.0.0", 35 | "roave/infection-static-analysis-plugin": "^1.35.0", 36 | "psalm/plugin-phpunit": "^0.19.0", 37 | "squizlabs/php_codesniffer": "^3.10.2", 38 | "vimeo/psalm": "^5.25.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /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": "41c69df94b1f71a25bac6106daff175a", 8 | "packages": [ 9 | { 10 | "name": "doctrine/instantiator", 11 | "version": "2.0.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/doctrine/instantiator.git", 15 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 20 | "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "^8.1" 25 | }, 26 | "require-dev": { 27 | "doctrine/coding-standard": "^11", 28 | "ext-pdo": "*", 29 | "ext-phar": "*", 30 | "phpbench/phpbench": "^1.2", 31 | "phpstan/phpstan": "^1.9.4", 32 | "phpstan/phpstan-phpunit": "^1.3", 33 | "phpunit/phpunit": "^9.5.27", 34 | "vimeo/psalm": "^5.4" 35 | }, 36 | "type": "library", 37 | "autoload": { 38 | "psr-4": { 39 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Marco Pivetta", 49 | "email": "ocramius@gmail.com", 50 | "homepage": "https://ocramius.github.io/" 51 | } 52 | ], 53 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 54 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 55 | "keywords": [ 56 | "constructor", 57 | "instantiate" 58 | ], 59 | "support": { 60 | "issues": "https://github.com/doctrine/instantiator/issues", 61 | "source": "https://github.com/doctrine/instantiator/tree/2.0.0" 62 | }, 63 | "funding": [ 64 | { 65 | "url": "https://www.doctrine-project.org/sponsorship.html", 66 | "type": "custom" 67 | }, 68 | { 69 | "url": "https://www.patreon.com/phpdoctrine", 70 | "type": "patreon" 71 | }, 72 | { 73 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 74 | "type": "tidelift" 75 | } 76 | ], 77 | "time": "2022-12-30T00:23:10+00:00" 78 | }, 79 | { 80 | "name": "myclabs/deep-copy", 81 | "version": "1.12.0", 82 | "source": { 83 | "type": "git", 84 | "url": "https://github.com/myclabs/DeepCopy.git", 85 | "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" 86 | }, 87 | "dist": { 88 | "type": "zip", 89 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", 90 | "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", 91 | "shasum": "" 92 | }, 93 | "require": { 94 | "php": "^7.1 || ^8.0" 95 | }, 96 | "conflict": { 97 | "doctrine/collections": "<1.6.8", 98 | "doctrine/common": "<2.13.3 || >=3 <3.2.2" 99 | }, 100 | "require-dev": { 101 | "doctrine/collections": "^1.6.8", 102 | "doctrine/common": "^2.13.3 || ^3.2.2", 103 | "phpspec/prophecy": "^1.10", 104 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 105 | }, 106 | "type": "library", 107 | "autoload": { 108 | "files": [ 109 | "src/DeepCopy/deep_copy.php" 110 | ], 111 | "psr-4": { 112 | "DeepCopy\\": "src/DeepCopy/" 113 | } 114 | }, 115 | "notification-url": "https://packagist.org/downloads/", 116 | "license": [ 117 | "MIT" 118 | ], 119 | "description": "Create deep copies (clones) of your objects", 120 | "keywords": [ 121 | "clone", 122 | "copy", 123 | "duplicate", 124 | "object", 125 | "object graph" 126 | ], 127 | "support": { 128 | "issues": "https://github.com/myclabs/DeepCopy/issues", 129 | "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" 130 | }, 131 | "funding": [ 132 | { 133 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 134 | "type": "tidelift" 135 | } 136 | ], 137 | "time": "2024-06-12T14:39:25+00:00" 138 | }, 139 | { 140 | "name": "nikic/php-parser", 141 | "version": "v4.19.1", 142 | "source": { 143 | "type": "git", 144 | "url": "https://github.com/nikic/PHP-Parser.git", 145 | "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b" 146 | }, 147 | "dist": { 148 | "type": "zip", 149 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b", 150 | "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b", 151 | "shasum": "" 152 | }, 153 | "require": { 154 | "ext-tokenizer": "*", 155 | "php": ">=7.1" 156 | }, 157 | "require-dev": { 158 | "ircmaxell/php-yacc": "^0.0.7", 159 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 160 | }, 161 | "bin": [ 162 | "bin/php-parse" 163 | ], 164 | "type": "library", 165 | "extra": { 166 | "branch-alias": { 167 | "dev-master": "4.9-dev" 168 | } 169 | }, 170 | "autoload": { 171 | "psr-4": { 172 | "PhpParser\\": "lib/PhpParser" 173 | } 174 | }, 175 | "notification-url": "https://packagist.org/downloads/", 176 | "license": [ 177 | "BSD-3-Clause" 178 | ], 179 | "authors": [ 180 | { 181 | "name": "Nikita Popov" 182 | } 183 | ], 184 | "description": "A PHP parser written in PHP", 185 | "keywords": [ 186 | "parser", 187 | "php" 188 | ], 189 | "support": { 190 | "issues": "https://github.com/nikic/PHP-Parser/issues", 191 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1" 192 | }, 193 | "time": "2024-03-17T08:10:35+00:00" 194 | }, 195 | { 196 | "name": "phar-io/manifest", 197 | "version": "2.0.4", 198 | "source": { 199 | "type": "git", 200 | "url": "https://github.com/phar-io/manifest.git", 201 | "reference": "54750ef60c58e43759730615a392c31c80e23176" 202 | }, 203 | "dist": { 204 | "type": "zip", 205 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", 206 | "reference": "54750ef60c58e43759730615a392c31c80e23176", 207 | "shasum": "" 208 | }, 209 | "require": { 210 | "ext-dom": "*", 211 | "ext-libxml": "*", 212 | "ext-phar": "*", 213 | "ext-xmlwriter": "*", 214 | "phar-io/version": "^3.0.1", 215 | "php": "^7.2 || ^8.0" 216 | }, 217 | "type": "library", 218 | "extra": { 219 | "branch-alias": { 220 | "dev-master": "2.0.x-dev" 221 | } 222 | }, 223 | "autoload": { 224 | "classmap": [ 225 | "src/" 226 | ] 227 | }, 228 | "notification-url": "https://packagist.org/downloads/", 229 | "license": [ 230 | "BSD-3-Clause" 231 | ], 232 | "authors": [ 233 | { 234 | "name": "Arne Blankerts", 235 | "email": "arne@blankerts.de", 236 | "role": "Developer" 237 | }, 238 | { 239 | "name": "Sebastian Heuer", 240 | "email": "sebastian@phpeople.de", 241 | "role": "Developer" 242 | }, 243 | { 244 | "name": "Sebastian Bergmann", 245 | "email": "sebastian@phpunit.de", 246 | "role": "Developer" 247 | } 248 | ], 249 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 250 | "support": { 251 | "issues": "https://github.com/phar-io/manifest/issues", 252 | "source": "https://github.com/phar-io/manifest/tree/2.0.4" 253 | }, 254 | "funding": [ 255 | { 256 | "url": "https://github.com/theseer", 257 | "type": "github" 258 | } 259 | ], 260 | "time": "2024-03-03T12:33:53+00:00" 261 | }, 262 | { 263 | "name": "phar-io/version", 264 | "version": "3.2.1", 265 | "source": { 266 | "type": "git", 267 | "url": "https://github.com/phar-io/version.git", 268 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 269 | }, 270 | "dist": { 271 | "type": "zip", 272 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 273 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 274 | "shasum": "" 275 | }, 276 | "require": { 277 | "php": "^7.2 || ^8.0" 278 | }, 279 | "type": "library", 280 | "autoload": { 281 | "classmap": [ 282 | "src/" 283 | ] 284 | }, 285 | "notification-url": "https://packagist.org/downloads/", 286 | "license": [ 287 | "BSD-3-Clause" 288 | ], 289 | "authors": [ 290 | { 291 | "name": "Arne Blankerts", 292 | "email": "arne@blankerts.de", 293 | "role": "Developer" 294 | }, 295 | { 296 | "name": "Sebastian Heuer", 297 | "email": "sebastian@phpeople.de", 298 | "role": "Developer" 299 | }, 300 | { 301 | "name": "Sebastian Bergmann", 302 | "email": "sebastian@phpunit.de", 303 | "role": "Developer" 304 | } 305 | ], 306 | "description": "Library for handling version information and constraints", 307 | "support": { 308 | "issues": "https://github.com/phar-io/version/issues", 309 | "source": "https://github.com/phar-io/version/tree/3.2.1" 310 | }, 311 | "time": "2022-02-21T01:04:05+00:00" 312 | }, 313 | { 314 | "name": "phpunit/php-code-coverage", 315 | "version": "9.2.32", 316 | "source": { 317 | "type": "git", 318 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 319 | "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" 320 | }, 321 | "dist": { 322 | "type": "zip", 323 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", 324 | "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", 325 | "shasum": "" 326 | }, 327 | "require": { 328 | "ext-dom": "*", 329 | "ext-libxml": "*", 330 | "ext-xmlwriter": "*", 331 | "nikic/php-parser": "^4.19.1 || ^5.1.0", 332 | "php": ">=7.3", 333 | "phpunit/php-file-iterator": "^3.0.6", 334 | "phpunit/php-text-template": "^2.0.4", 335 | "sebastian/code-unit-reverse-lookup": "^2.0.3", 336 | "sebastian/complexity": "^2.0.3", 337 | "sebastian/environment": "^5.1.5", 338 | "sebastian/lines-of-code": "^1.0.4", 339 | "sebastian/version": "^3.0.2", 340 | "theseer/tokenizer": "^1.2.3" 341 | }, 342 | "require-dev": { 343 | "phpunit/phpunit": "^9.6" 344 | }, 345 | "suggest": { 346 | "ext-pcov": "PHP extension that provides line coverage", 347 | "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" 348 | }, 349 | "type": "library", 350 | "extra": { 351 | "branch-alias": { 352 | "dev-main": "9.2.x-dev" 353 | } 354 | }, 355 | "autoload": { 356 | "classmap": [ 357 | "src/" 358 | ] 359 | }, 360 | "notification-url": "https://packagist.org/downloads/", 361 | "license": [ 362 | "BSD-3-Clause" 363 | ], 364 | "authors": [ 365 | { 366 | "name": "Sebastian Bergmann", 367 | "email": "sebastian@phpunit.de", 368 | "role": "lead" 369 | } 370 | ], 371 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 372 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 373 | "keywords": [ 374 | "coverage", 375 | "testing", 376 | "xunit" 377 | ], 378 | "support": { 379 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 380 | "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", 381 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" 382 | }, 383 | "funding": [ 384 | { 385 | "url": "https://github.com/sebastianbergmann", 386 | "type": "github" 387 | } 388 | ], 389 | "time": "2024-08-22T04:23:01+00:00" 390 | }, 391 | { 392 | "name": "phpunit/php-file-iterator", 393 | "version": "3.0.6", 394 | "source": { 395 | "type": "git", 396 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 397 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 398 | }, 399 | "dist": { 400 | "type": "zip", 401 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 402 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 403 | "shasum": "" 404 | }, 405 | "require": { 406 | "php": ">=7.3" 407 | }, 408 | "require-dev": { 409 | "phpunit/phpunit": "^9.3" 410 | }, 411 | "type": "library", 412 | "extra": { 413 | "branch-alias": { 414 | "dev-master": "3.0-dev" 415 | } 416 | }, 417 | "autoload": { 418 | "classmap": [ 419 | "src/" 420 | ] 421 | }, 422 | "notification-url": "https://packagist.org/downloads/", 423 | "license": [ 424 | "BSD-3-Clause" 425 | ], 426 | "authors": [ 427 | { 428 | "name": "Sebastian Bergmann", 429 | "email": "sebastian@phpunit.de", 430 | "role": "lead" 431 | } 432 | ], 433 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 434 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 435 | "keywords": [ 436 | "filesystem", 437 | "iterator" 438 | ], 439 | "support": { 440 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 441 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 442 | }, 443 | "funding": [ 444 | { 445 | "url": "https://github.com/sebastianbergmann", 446 | "type": "github" 447 | } 448 | ], 449 | "time": "2021-12-02T12:48:52+00:00" 450 | }, 451 | { 452 | "name": "phpunit/php-invoker", 453 | "version": "3.1.1", 454 | "source": { 455 | "type": "git", 456 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 457 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 458 | }, 459 | "dist": { 460 | "type": "zip", 461 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 462 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 463 | "shasum": "" 464 | }, 465 | "require": { 466 | "php": ">=7.3" 467 | }, 468 | "require-dev": { 469 | "ext-pcntl": "*", 470 | "phpunit/phpunit": "^9.3" 471 | }, 472 | "suggest": { 473 | "ext-pcntl": "*" 474 | }, 475 | "type": "library", 476 | "extra": { 477 | "branch-alias": { 478 | "dev-master": "3.1-dev" 479 | } 480 | }, 481 | "autoload": { 482 | "classmap": [ 483 | "src/" 484 | ] 485 | }, 486 | "notification-url": "https://packagist.org/downloads/", 487 | "license": [ 488 | "BSD-3-Clause" 489 | ], 490 | "authors": [ 491 | { 492 | "name": "Sebastian Bergmann", 493 | "email": "sebastian@phpunit.de", 494 | "role": "lead" 495 | } 496 | ], 497 | "description": "Invoke callables with a timeout", 498 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 499 | "keywords": [ 500 | "process" 501 | ], 502 | "support": { 503 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 504 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 505 | }, 506 | "funding": [ 507 | { 508 | "url": "https://github.com/sebastianbergmann", 509 | "type": "github" 510 | } 511 | ], 512 | "time": "2020-09-28T05:58:55+00:00" 513 | }, 514 | { 515 | "name": "phpunit/php-text-template", 516 | "version": "2.0.4", 517 | "source": { 518 | "type": "git", 519 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 520 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 521 | }, 522 | "dist": { 523 | "type": "zip", 524 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 525 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 526 | "shasum": "" 527 | }, 528 | "require": { 529 | "php": ">=7.3" 530 | }, 531 | "require-dev": { 532 | "phpunit/phpunit": "^9.3" 533 | }, 534 | "type": "library", 535 | "extra": { 536 | "branch-alias": { 537 | "dev-master": "2.0-dev" 538 | } 539 | }, 540 | "autoload": { 541 | "classmap": [ 542 | "src/" 543 | ] 544 | }, 545 | "notification-url": "https://packagist.org/downloads/", 546 | "license": [ 547 | "BSD-3-Clause" 548 | ], 549 | "authors": [ 550 | { 551 | "name": "Sebastian Bergmann", 552 | "email": "sebastian@phpunit.de", 553 | "role": "lead" 554 | } 555 | ], 556 | "description": "Simple template engine.", 557 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 558 | "keywords": [ 559 | "template" 560 | ], 561 | "support": { 562 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 563 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 564 | }, 565 | "funding": [ 566 | { 567 | "url": "https://github.com/sebastianbergmann", 568 | "type": "github" 569 | } 570 | ], 571 | "time": "2020-10-26T05:33:50+00:00" 572 | }, 573 | { 574 | "name": "phpunit/php-timer", 575 | "version": "5.0.3", 576 | "source": { 577 | "type": "git", 578 | "url": "https://github.com/sebastianbergmann/php-timer.git", 579 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 580 | }, 581 | "dist": { 582 | "type": "zip", 583 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 584 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 585 | "shasum": "" 586 | }, 587 | "require": { 588 | "php": ">=7.3" 589 | }, 590 | "require-dev": { 591 | "phpunit/phpunit": "^9.3" 592 | }, 593 | "type": "library", 594 | "extra": { 595 | "branch-alias": { 596 | "dev-master": "5.0-dev" 597 | } 598 | }, 599 | "autoload": { 600 | "classmap": [ 601 | "src/" 602 | ] 603 | }, 604 | "notification-url": "https://packagist.org/downloads/", 605 | "license": [ 606 | "BSD-3-Clause" 607 | ], 608 | "authors": [ 609 | { 610 | "name": "Sebastian Bergmann", 611 | "email": "sebastian@phpunit.de", 612 | "role": "lead" 613 | } 614 | ], 615 | "description": "Utility class for timing", 616 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 617 | "keywords": [ 618 | "timer" 619 | ], 620 | "support": { 621 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 622 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 623 | }, 624 | "funding": [ 625 | { 626 | "url": "https://github.com/sebastianbergmann", 627 | "type": "github" 628 | } 629 | ], 630 | "time": "2020-10-26T13:16:10+00:00" 631 | }, 632 | { 633 | "name": "phpunit/phpunit", 634 | "version": "9.6.20", 635 | "source": { 636 | "type": "git", 637 | "url": "https://github.com/sebastianbergmann/phpunit.git", 638 | "reference": "49d7820565836236411f5dc002d16dd689cde42f" 639 | }, 640 | "dist": { 641 | "type": "zip", 642 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/49d7820565836236411f5dc002d16dd689cde42f", 643 | "reference": "49d7820565836236411f5dc002d16dd689cde42f", 644 | "shasum": "" 645 | }, 646 | "require": { 647 | "doctrine/instantiator": "^1.5.0 || ^2", 648 | "ext-dom": "*", 649 | "ext-json": "*", 650 | "ext-libxml": "*", 651 | "ext-mbstring": "*", 652 | "ext-xml": "*", 653 | "ext-xmlwriter": "*", 654 | "myclabs/deep-copy": "^1.12.0", 655 | "phar-io/manifest": "^2.0.4", 656 | "phar-io/version": "^3.2.1", 657 | "php": ">=7.3", 658 | "phpunit/php-code-coverage": "^9.2.31", 659 | "phpunit/php-file-iterator": "^3.0.6", 660 | "phpunit/php-invoker": "^3.1.1", 661 | "phpunit/php-text-template": "^2.0.4", 662 | "phpunit/php-timer": "^5.0.3", 663 | "sebastian/cli-parser": "^1.0.2", 664 | "sebastian/code-unit": "^1.0.8", 665 | "sebastian/comparator": "^4.0.8", 666 | "sebastian/diff": "^4.0.6", 667 | "sebastian/environment": "^5.1.5", 668 | "sebastian/exporter": "^4.0.6", 669 | "sebastian/global-state": "^5.0.7", 670 | "sebastian/object-enumerator": "^4.0.4", 671 | "sebastian/resource-operations": "^3.0.4", 672 | "sebastian/type": "^3.2.1", 673 | "sebastian/version": "^3.0.2" 674 | }, 675 | "suggest": { 676 | "ext-soap": "To be able to generate mocks based on WSDL files", 677 | "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" 678 | }, 679 | "bin": [ 680 | "phpunit" 681 | ], 682 | "type": "library", 683 | "extra": { 684 | "branch-alias": { 685 | "dev-master": "9.6-dev" 686 | } 687 | }, 688 | "autoload": { 689 | "files": [ 690 | "src/Framework/Assert/Functions.php" 691 | ], 692 | "classmap": [ 693 | "src/" 694 | ] 695 | }, 696 | "notification-url": "https://packagist.org/downloads/", 697 | "license": [ 698 | "BSD-3-Clause" 699 | ], 700 | "authors": [ 701 | { 702 | "name": "Sebastian Bergmann", 703 | "email": "sebastian@phpunit.de", 704 | "role": "lead" 705 | } 706 | ], 707 | "description": "The PHP Unit Testing framework.", 708 | "homepage": "https://phpunit.de/", 709 | "keywords": [ 710 | "phpunit", 711 | "testing", 712 | "xunit" 713 | ], 714 | "support": { 715 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 716 | "security": "https://github.com/sebastianbergmann/phpunit/security/policy", 717 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.20" 718 | }, 719 | "funding": [ 720 | { 721 | "url": "https://phpunit.de/sponsors.html", 722 | "type": "custom" 723 | }, 724 | { 725 | "url": "https://github.com/sebastianbergmann", 726 | "type": "github" 727 | }, 728 | { 729 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 730 | "type": "tidelift" 731 | } 732 | ], 733 | "time": "2024-07-10T11:45:39+00:00" 734 | }, 735 | { 736 | "name": "sebastian/cli-parser", 737 | "version": "1.0.2", 738 | "source": { 739 | "type": "git", 740 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 741 | "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" 742 | }, 743 | "dist": { 744 | "type": "zip", 745 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", 746 | "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", 747 | "shasum": "" 748 | }, 749 | "require": { 750 | "php": ">=7.3" 751 | }, 752 | "require-dev": { 753 | "phpunit/phpunit": "^9.3" 754 | }, 755 | "type": "library", 756 | "extra": { 757 | "branch-alias": { 758 | "dev-master": "1.0-dev" 759 | } 760 | }, 761 | "autoload": { 762 | "classmap": [ 763 | "src/" 764 | ] 765 | }, 766 | "notification-url": "https://packagist.org/downloads/", 767 | "license": [ 768 | "BSD-3-Clause" 769 | ], 770 | "authors": [ 771 | { 772 | "name": "Sebastian Bergmann", 773 | "email": "sebastian@phpunit.de", 774 | "role": "lead" 775 | } 776 | ], 777 | "description": "Library for parsing CLI options", 778 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 779 | "support": { 780 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 781 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" 782 | }, 783 | "funding": [ 784 | { 785 | "url": "https://github.com/sebastianbergmann", 786 | "type": "github" 787 | } 788 | ], 789 | "time": "2024-03-02T06:27:43+00:00" 790 | }, 791 | { 792 | "name": "sebastian/code-unit", 793 | "version": "1.0.8", 794 | "source": { 795 | "type": "git", 796 | "url": "https://github.com/sebastianbergmann/code-unit.git", 797 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 798 | }, 799 | "dist": { 800 | "type": "zip", 801 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 802 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 803 | "shasum": "" 804 | }, 805 | "require": { 806 | "php": ">=7.3" 807 | }, 808 | "require-dev": { 809 | "phpunit/phpunit": "^9.3" 810 | }, 811 | "type": "library", 812 | "extra": { 813 | "branch-alias": { 814 | "dev-master": "1.0-dev" 815 | } 816 | }, 817 | "autoload": { 818 | "classmap": [ 819 | "src/" 820 | ] 821 | }, 822 | "notification-url": "https://packagist.org/downloads/", 823 | "license": [ 824 | "BSD-3-Clause" 825 | ], 826 | "authors": [ 827 | { 828 | "name": "Sebastian Bergmann", 829 | "email": "sebastian@phpunit.de", 830 | "role": "lead" 831 | } 832 | ], 833 | "description": "Collection of value objects that represent the PHP code units", 834 | "homepage": "https://github.com/sebastianbergmann/code-unit", 835 | "support": { 836 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 837 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 838 | }, 839 | "funding": [ 840 | { 841 | "url": "https://github.com/sebastianbergmann", 842 | "type": "github" 843 | } 844 | ], 845 | "time": "2020-10-26T13:08:54+00:00" 846 | }, 847 | { 848 | "name": "sebastian/code-unit-reverse-lookup", 849 | "version": "2.0.3", 850 | "source": { 851 | "type": "git", 852 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 853 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 854 | }, 855 | "dist": { 856 | "type": "zip", 857 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 858 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 859 | "shasum": "" 860 | }, 861 | "require": { 862 | "php": ">=7.3" 863 | }, 864 | "require-dev": { 865 | "phpunit/phpunit": "^9.3" 866 | }, 867 | "type": "library", 868 | "extra": { 869 | "branch-alias": { 870 | "dev-master": "2.0-dev" 871 | } 872 | }, 873 | "autoload": { 874 | "classmap": [ 875 | "src/" 876 | ] 877 | }, 878 | "notification-url": "https://packagist.org/downloads/", 879 | "license": [ 880 | "BSD-3-Clause" 881 | ], 882 | "authors": [ 883 | { 884 | "name": "Sebastian Bergmann", 885 | "email": "sebastian@phpunit.de" 886 | } 887 | ], 888 | "description": "Looks up which function or method a line of code belongs to", 889 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 890 | "support": { 891 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 892 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 893 | }, 894 | "funding": [ 895 | { 896 | "url": "https://github.com/sebastianbergmann", 897 | "type": "github" 898 | } 899 | ], 900 | "time": "2020-09-28T05:30:19+00:00" 901 | }, 902 | { 903 | "name": "sebastian/comparator", 904 | "version": "4.0.8", 905 | "source": { 906 | "type": "git", 907 | "url": "https://github.com/sebastianbergmann/comparator.git", 908 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a" 909 | }, 910 | "dist": { 911 | "type": "zip", 912 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", 913 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a", 914 | "shasum": "" 915 | }, 916 | "require": { 917 | "php": ">=7.3", 918 | "sebastian/diff": "^4.0", 919 | "sebastian/exporter": "^4.0" 920 | }, 921 | "require-dev": { 922 | "phpunit/phpunit": "^9.3" 923 | }, 924 | "type": "library", 925 | "extra": { 926 | "branch-alias": { 927 | "dev-master": "4.0-dev" 928 | } 929 | }, 930 | "autoload": { 931 | "classmap": [ 932 | "src/" 933 | ] 934 | }, 935 | "notification-url": "https://packagist.org/downloads/", 936 | "license": [ 937 | "BSD-3-Clause" 938 | ], 939 | "authors": [ 940 | { 941 | "name": "Sebastian Bergmann", 942 | "email": "sebastian@phpunit.de" 943 | }, 944 | { 945 | "name": "Jeff Welch", 946 | "email": "whatthejeff@gmail.com" 947 | }, 948 | { 949 | "name": "Volker Dusch", 950 | "email": "github@wallbash.com" 951 | }, 952 | { 953 | "name": "Bernhard Schussek", 954 | "email": "bschussek@2bepublished.at" 955 | } 956 | ], 957 | "description": "Provides the functionality to compare PHP values for equality", 958 | "homepage": "https://github.com/sebastianbergmann/comparator", 959 | "keywords": [ 960 | "comparator", 961 | "compare", 962 | "equality" 963 | ], 964 | "support": { 965 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 966 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" 967 | }, 968 | "funding": [ 969 | { 970 | "url": "https://github.com/sebastianbergmann", 971 | "type": "github" 972 | } 973 | ], 974 | "time": "2022-09-14T12:41:17+00:00" 975 | }, 976 | { 977 | "name": "sebastian/complexity", 978 | "version": "2.0.3", 979 | "source": { 980 | "type": "git", 981 | "url": "https://github.com/sebastianbergmann/complexity.git", 982 | "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" 983 | }, 984 | "dist": { 985 | "type": "zip", 986 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", 987 | "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", 988 | "shasum": "" 989 | }, 990 | "require": { 991 | "nikic/php-parser": "^4.18 || ^5.0", 992 | "php": ">=7.3" 993 | }, 994 | "require-dev": { 995 | "phpunit/phpunit": "^9.3" 996 | }, 997 | "type": "library", 998 | "extra": { 999 | "branch-alias": { 1000 | "dev-master": "2.0-dev" 1001 | } 1002 | }, 1003 | "autoload": { 1004 | "classmap": [ 1005 | "src/" 1006 | ] 1007 | }, 1008 | "notification-url": "https://packagist.org/downloads/", 1009 | "license": [ 1010 | "BSD-3-Clause" 1011 | ], 1012 | "authors": [ 1013 | { 1014 | "name": "Sebastian Bergmann", 1015 | "email": "sebastian@phpunit.de", 1016 | "role": "lead" 1017 | } 1018 | ], 1019 | "description": "Library for calculating the complexity of PHP code units", 1020 | "homepage": "https://github.com/sebastianbergmann/complexity", 1021 | "support": { 1022 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 1023 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" 1024 | }, 1025 | "funding": [ 1026 | { 1027 | "url": "https://github.com/sebastianbergmann", 1028 | "type": "github" 1029 | } 1030 | ], 1031 | "time": "2023-12-22T06:19:30+00:00" 1032 | }, 1033 | { 1034 | "name": "sebastian/diff", 1035 | "version": "4.0.6", 1036 | "source": { 1037 | "type": "git", 1038 | "url": "https://github.com/sebastianbergmann/diff.git", 1039 | "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" 1040 | }, 1041 | "dist": { 1042 | "type": "zip", 1043 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", 1044 | "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", 1045 | "shasum": "" 1046 | }, 1047 | "require": { 1048 | "php": ">=7.3" 1049 | }, 1050 | "require-dev": { 1051 | "phpunit/phpunit": "^9.3", 1052 | "symfony/process": "^4.2 || ^5" 1053 | }, 1054 | "type": "library", 1055 | "extra": { 1056 | "branch-alias": { 1057 | "dev-master": "4.0-dev" 1058 | } 1059 | }, 1060 | "autoload": { 1061 | "classmap": [ 1062 | "src/" 1063 | ] 1064 | }, 1065 | "notification-url": "https://packagist.org/downloads/", 1066 | "license": [ 1067 | "BSD-3-Clause" 1068 | ], 1069 | "authors": [ 1070 | { 1071 | "name": "Sebastian Bergmann", 1072 | "email": "sebastian@phpunit.de" 1073 | }, 1074 | { 1075 | "name": "Kore Nordmann", 1076 | "email": "mail@kore-nordmann.de" 1077 | } 1078 | ], 1079 | "description": "Diff implementation", 1080 | "homepage": "https://github.com/sebastianbergmann/diff", 1081 | "keywords": [ 1082 | "diff", 1083 | "udiff", 1084 | "unidiff", 1085 | "unified diff" 1086 | ], 1087 | "support": { 1088 | "issues": "https://github.com/sebastianbergmann/diff/issues", 1089 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" 1090 | }, 1091 | "funding": [ 1092 | { 1093 | "url": "https://github.com/sebastianbergmann", 1094 | "type": "github" 1095 | } 1096 | ], 1097 | "time": "2024-03-02T06:30:58+00:00" 1098 | }, 1099 | { 1100 | "name": "sebastian/environment", 1101 | "version": "5.1.5", 1102 | "source": { 1103 | "type": "git", 1104 | "url": "https://github.com/sebastianbergmann/environment.git", 1105 | "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" 1106 | }, 1107 | "dist": { 1108 | "type": "zip", 1109 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", 1110 | "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", 1111 | "shasum": "" 1112 | }, 1113 | "require": { 1114 | "php": ">=7.3" 1115 | }, 1116 | "require-dev": { 1117 | "phpunit/phpunit": "^9.3" 1118 | }, 1119 | "suggest": { 1120 | "ext-posix": "*" 1121 | }, 1122 | "type": "library", 1123 | "extra": { 1124 | "branch-alias": { 1125 | "dev-master": "5.1-dev" 1126 | } 1127 | }, 1128 | "autoload": { 1129 | "classmap": [ 1130 | "src/" 1131 | ] 1132 | }, 1133 | "notification-url": "https://packagist.org/downloads/", 1134 | "license": [ 1135 | "BSD-3-Clause" 1136 | ], 1137 | "authors": [ 1138 | { 1139 | "name": "Sebastian Bergmann", 1140 | "email": "sebastian@phpunit.de" 1141 | } 1142 | ], 1143 | "description": "Provides functionality to handle HHVM/PHP environments", 1144 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1145 | "keywords": [ 1146 | "Xdebug", 1147 | "environment", 1148 | "hhvm" 1149 | ], 1150 | "support": { 1151 | "issues": "https://github.com/sebastianbergmann/environment/issues", 1152 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" 1153 | }, 1154 | "funding": [ 1155 | { 1156 | "url": "https://github.com/sebastianbergmann", 1157 | "type": "github" 1158 | } 1159 | ], 1160 | "time": "2023-02-03T06:03:51+00:00" 1161 | }, 1162 | { 1163 | "name": "sebastian/exporter", 1164 | "version": "4.0.6", 1165 | "source": { 1166 | "type": "git", 1167 | "url": "https://github.com/sebastianbergmann/exporter.git", 1168 | "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" 1169 | }, 1170 | "dist": { 1171 | "type": "zip", 1172 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", 1173 | "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", 1174 | "shasum": "" 1175 | }, 1176 | "require": { 1177 | "php": ">=7.3", 1178 | "sebastian/recursion-context": "^4.0" 1179 | }, 1180 | "require-dev": { 1181 | "ext-mbstring": "*", 1182 | "phpunit/phpunit": "^9.3" 1183 | }, 1184 | "type": "library", 1185 | "extra": { 1186 | "branch-alias": { 1187 | "dev-master": "4.0-dev" 1188 | } 1189 | }, 1190 | "autoload": { 1191 | "classmap": [ 1192 | "src/" 1193 | ] 1194 | }, 1195 | "notification-url": "https://packagist.org/downloads/", 1196 | "license": [ 1197 | "BSD-3-Clause" 1198 | ], 1199 | "authors": [ 1200 | { 1201 | "name": "Sebastian Bergmann", 1202 | "email": "sebastian@phpunit.de" 1203 | }, 1204 | { 1205 | "name": "Jeff Welch", 1206 | "email": "whatthejeff@gmail.com" 1207 | }, 1208 | { 1209 | "name": "Volker Dusch", 1210 | "email": "github@wallbash.com" 1211 | }, 1212 | { 1213 | "name": "Adam Harvey", 1214 | "email": "aharvey@php.net" 1215 | }, 1216 | { 1217 | "name": "Bernhard Schussek", 1218 | "email": "bschussek@gmail.com" 1219 | } 1220 | ], 1221 | "description": "Provides the functionality to export PHP variables for visualization", 1222 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 1223 | "keywords": [ 1224 | "export", 1225 | "exporter" 1226 | ], 1227 | "support": { 1228 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 1229 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" 1230 | }, 1231 | "funding": [ 1232 | { 1233 | "url": "https://github.com/sebastianbergmann", 1234 | "type": "github" 1235 | } 1236 | ], 1237 | "time": "2024-03-02T06:33:00+00:00" 1238 | }, 1239 | { 1240 | "name": "sebastian/global-state", 1241 | "version": "5.0.7", 1242 | "source": { 1243 | "type": "git", 1244 | "url": "https://github.com/sebastianbergmann/global-state.git", 1245 | "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" 1246 | }, 1247 | "dist": { 1248 | "type": "zip", 1249 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", 1250 | "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", 1251 | "shasum": "" 1252 | }, 1253 | "require": { 1254 | "php": ">=7.3", 1255 | "sebastian/object-reflector": "^2.0", 1256 | "sebastian/recursion-context": "^4.0" 1257 | }, 1258 | "require-dev": { 1259 | "ext-dom": "*", 1260 | "phpunit/phpunit": "^9.3" 1261 | }, 1262 | "suggest": { 1263 | "ext-uopz": "*" 1264 | }, 1265 | "type": "library", 1266 | "extra": { 1267 | "branch-alias": { 1268 | "dev-master": "5.0-dev" 1269 | } 1270 | }, 1271 | "autoload": { 1272 | "classmap": [ 1273 | "src/" 1274 | ] 1275 | }, 1276 | "notification-url": "https://packagist.org/downloads/", 1277 | "license": [ 1278 | "BSD-3-Clause" 1279 | ], 1280 | "authors": [ 1281 | { 1282 | "name": "Sebastian Bergmann", 1283 | "email": "sebastian@phpunit.de" 1284 | } 1285 | ], 1286 | "description": "Snapshotting of global state", 1287 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1288 | "keywords": [ 1289 | "global state" 1290 | ], 1291 | "support": { 1292 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 1293 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" 1294 | }, 1295 | "funding": [ 1296 | { 1297 | "url": "https://github.com/sebastianbergmann", 1298 | "type": "github" 1299 | } 1300 | ], 1301 | "time": "2024-03-02T06:35:11+00:00" 1302 | }, 1303 | { 1304 | "name": "sebastian/lines-of-code", 1305 | "version": "1.0.4", 1306 | "source": { 1307 | "type": "git", 1308 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 1309 | "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" 1310 | }, 1311 | "dist": { 1312 | "type": "zip", 1313 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", 1314 | "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", 1315 | "shasum": "" 1316 | }, 1317 | "require": { 1318 | "nikic/php-parser": "^4.18 || ^5.0", 1319 | "php": ">=7.3" 1320 | }, 1321 | "require-dev": { 1322 | "phpunit/phpunit": "^9.3" 1323 | }, 1324 | "type": "library", 1325 | "extra": { 1326 | "branch-alias": { 1327 | "dev-master": "1.0-dev" 1328 | } 1329 | }, 1330 | "autoload": { 1331 | "classmap": [ 1332 | "src/" 1333 | ] 1334 | }, 1335 | "notification-url": "https://packagist.org/downloads/", 1336 | "license": [ 1337 | "BSD-3-Clause" 1338 | ], 1339 | "authors": [ 1340 | { 1341 | "name": "Sebastian Bergmann", 1342 | "email": "sebastian@phpunit.de", 1343 | "role": "lead" 1344 | } 1345 | ], 1346 | "description": "Library for counting the lines of code in PHP source code", 1347 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 1348 | "support": { 1349 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 1350 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" 1351 | }, 1352 | "funding": [ 1353 | { 1354 | "url": "https://github.com/sebastianbergmann", 1355 | "type": "github" 1356 | } 1357 | ], 1358 | "time": "2023-12-22T06:20:34+00:00" 1359 | }, 1360 | { 1361 | "name": "sebastian/object-enumerator", 1362 | "version": "4.0.4", 1363 | "source": { 1364 | "type": "git", 1365 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1366 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 1367 | }, 1368 | "dist": { 1369 | "type": "zip", 1370 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 1371 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 1372 | "shasum": "" 1373 | }, 1374 | "require": { 1375 | "php": ">=7.3", 1376 | "sebastian/object-reflector": "^2.0", 1377 | "sebastian/recursion-context": "^4.0" 1378 | }, 1379 | "require-dev": { 1380 | "phpunit/phpunit": "^9.3" 1381 | }, 1382 | "type": "library", 1383 | "extra": { 1384 | "branch-alias": { 1385 | "dev-master": "4.0-dev" 1386 | } 1387 | }, 1388 | "autoload": { 1389 | "classmap": [ 1390 | "src/" 1391 | ] 1392 | }, 1393 | "notification-url": "https://packagist.org/downloads/", 1394 | "license": [ 1395 | "BSD-3-Clause" 1396 | ], 1397 | "authors": [ 1398 | { 1399 | "name": "Sebastian Bergmann", 1400 | "email": "sebastian@phpunit.de" 1401 | } 1402 | ], 1403 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1404 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1405 | "support": { 1406 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 1407 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 1408 | }, 1409 | "funding": [ 1410 | { 1411 | "url": "https://github.com/sebastianbergmann", 1412 | "type": "github" 1413 | } 1414 | ], 1415 | "time": "2020-10-26T13:12:34+00:00" 1416 | }, 1417 | { 1418 | "name": "sebastian/object-reflector", 1419 | "version": "2.0.4", 1420 | "source": { 1421 | "type": "git", 1422 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1423 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 1424 | }, 1425 | "dist": { 1426 | "type": "zip", 1427 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1428 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 1429 | "shasum": "" 1430 | }, 1431 | "require": { 1432 | "php": ">=7.3" 1433 | }, 1434 | "require-dev": { 1435 | "phpunit/phpunit": "^9.3" 1436 | }, 1437 | "type": "library", 1438 | "extra": { 1439 | "branch-alias": { 1440 | "dev-master": "2.0-dev" 1441 | } 1442 | }, 1443 | "autoload": { 1444 | "classmap": [ 1445 | "src/" 1446 | ] 1447 | }, 1448 | "notification-url": "https://packagist.org/downloads/", 1449 | "license": [ 1450 | "BSD-3-Clause" 1451 | ], 1452 | "authors": [ 1453 | { 1454 | "name": "Sebastian Bergmann", 1455 | "email": "sebastian@phpunit.de" 1456 | } 1457 | ], 1458 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1459 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1460 | "support": { 1461 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 1462 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 1463 | }, 1464 | "funding": [ 1465 | { 1466 | "url": "https://github.com/sebastianbergmann", 1467 | "type": "github" 1468 | } 1469 | ], 1470 | "time": "2020-10-26T13:14:26+00:00" 1471 | }, 1472 | { 1473 | "name": "sebastian/recursion-context", 1474 | "version": "4.0.5", 1475 | "source": { 1476 | "type": "git", 1477 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1478 | "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" 1479 | }, 1480 | "dist": { 1481 | "type": "zip", 1482 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", 1483 | "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", 1484 | "shasum": "" 1485 | }, 1486 | "require": { 1487 | "php": ">=7.3" 1488 | }, 1489 | "require-dev": { 1490 | "phpunit/phpunit": "^9.3" 1491 | }, 1492 | "type": "library", 1493 | "extra": { 1494 | "branch-alias": { 1495 | "dev-master": "4.0-dev" 1496 | } 1497 | }, 1498 | "autoload": { 1499 | "classmap": [ 1500 | "src/" 1501 | ] 1502 | }, 1503 | "notification-url": "https://packagist.org/downloads/", 1504 | "license": [ 1505 | "BSD-3-Clause" 1506 | ], 1507 | "authors": [ 1508 | { 1509 | "name": "Sebastian Bergmann", 1510 | "email": "sebastian@phpunit.de" 1511 | }, 1512 | { 1513 | "name": "Jeff Welch", 1514 | "email": "whatthejeff@gmail.com" 1515 | }, 1516 | { 1517 | "name": "Adam Harvey", 1518 | "email": "aharvey@php.net" 1519 | } 1520 | ], 1521 | "description": "Provides functionality to recursively process PHP variables", 1522 | "homepage": "https://github.com/sebastianbergmann/recursion-context", 1523 | "support": { 1524 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 1525 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" 1526 | }, 1527 | "funding": [ 1528 | { 1529 | "url": "https://github.com/sebastianbergmann", 1530 | "type": "github" 1531 | } 1532 | ], 1533 | "time": "2023-02-03T06:07:39+00:00" 1534 | }, 1535 | { 1536 | "name": "sebastian/resource-operations", 1537 | "version": "3.0.4", 1538 | "source": { 1539 | "type": "git", 1540 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1541 | "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" 1542 | }, 1543 | "dist": { 1544 | "type": "zip", 1545 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", 1546 | "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", 1547 | "shasum": "" 1548 | }, 1549 | "require": { 1550 | "php": ">=7.3" 1551 | }, 1552 | "require-dev": { 1553 | "phpunit/phpunit": "^9.0" 1554 | }, 1555 | "type": "library", 1556 | "extra": { 1557 | "branch-alias": { 1558 | "dev-main": "3.0-dev" 1559 | } 1560 | }, 1561 | "autoload": { 1562 | "classmap": [ 1563 | "src/" 1564 | ] 1565 | }, 1566 | "notification-url": "https://packagist.org/downloads/", 1567 | "license": [ 1568 | "BSD-3-Clause" 1569 | ], 1570 | "authors": [ 1571 | { 1572 | "name": "Sebastian Bergmann", 1573 | "email": "sebastian@phpunit.de" 1574 | } 1575 | ], 1576 | "description": "Provides a list of PHP built-in functions that operate on resources", 1577 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1578 | "support": { 1579 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" 1580 | }, 1581 | "funding": [ 1582 | { 1583 | "url": "https://github.com/sebastianbergmann", 1584 | "type": "github" 1585 | } 1586 | ], 1587 | "time": "2024-03-14T16:00:52+00:00" 1588 | }, 1589 | { 1590 | "name": "sebastian/type", 1591 | "version": "3.2.1", 1592 | "source": { 1593 | "type": "git", 1594 | "url": "https://github.com/sebastianbergmann/type.git", 1595 | "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" 1596 | }, 1597 | "dist": { 1598 | "type": "zip", 1599 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", 1600 | "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", 1601 | "shasum": "" 1602 | }, 1603 | "require": { 1604 | "php": ">=7.3" 1605 | }, 1606 | "require-dev": { 1607 | "phpunit/phpunit": "^9.5" 1608 | }, 1609 | "type": "library", 1610 | "extra": { 1611 | "branch-alias": { 1612 | "dev-master": "3.2-dev" 1613 | } 1614 | }, 1615 | "autoload": { 1616 | "classmap": [ 1617 | "src/" 1618 | ] 1619 | }, 1620 | "notification-url": "https://packagist.org/downloads/", 1621 | "license": [ 1622 | "BSD-3-Clause" 1623 | ], 1624 | "authors": [ 1625 | { 1626 | "name": "Sebastian Bergmann", 1627 | "email": "sebastian@phpunit.de", 1628 | "role": "lead" 1629 | } 1630 | ], 1631 | "description": "Collection of value objects that represent the types of the PHP type system", 1632 | "homepage": "https://github.com/sebastianbergmann/type", 1633 | "support": { 1634 | "issues": "https://github.com/sebastianbergmann/type/issues", 1635 | "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" 1636 | }, 1637 | "funding": [ 1638 | { 1639 | "url": "https://github.com/sebastianbergmann", 1640 | "type": "github" 1641 | } 1642 | ], 1643 | "time": "2023-02-03T06:13:03+00:00" 1644 | }, 1645 | { 1646 | "name": "sebastian/version", 1647 | "version": "3.0.2", 1648 | "source": { 1649 | "type": "git", 1650 | "url": "https://github.com/sebastianbergmann/version.git", 1651 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 1652 | }, 1653 | "dist": { 1654 | "type": "zip", 1655 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 1656 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 1657 | "shasum": "" 1658 | }, 1659 | "require": { 1660 | "php": ">=7.3" 1661 | }, 1662 | "type": "library", 1663 | "extra": { 1664 | "branch-alias": { 1665 | "dev-master": "3.0-dev" 1666 | } 1667 | }, 1668 | "autoload": { 1669 | "classmap": [ 1670 | "src/" 1671 | ] 1672 | }, 1673 | "notification-url": "https://packagist.org/downloads/", 1674 | "license": [ 1675 | "BSD-3-Clause" 1676 | ], 1677 | "authors": [ 1678 | { 1679 | "name": "Sebastian Bergmann", 1680 | "email": "sebastian@phpunit.de", 1681 | "role": "lead" 1682 | } 1683 | ], 1684 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1685 | "homepage": "https://github.com/sebastianbergmann/version", 1686 | "support": { 1687 | "issues": "https://github.com/sebastianbergmann/version/issues", 1688 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 1689 | }, 1690 | "funding": [ 1691 | { 1692 | "url": "https://github.com/sebastianbergmann", 1693 | "type": "github" 1694 | } 1695 | ], 1696 | "time": "2020-09-28T06:39:44+00:00" 1697 | }, 1698 | { 1699 | "name": "theseer/tokenizer", 1700 | "version": "1.2.3", 1701 | "source": { 1702 | "type": "git", 1703 | "url": "https://github.com/theseer/tokenizer.git", 1704 | "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" 1705 | }, 1706 | "dist": { 1707 | "type": "zip", 1708 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", 1709 | "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", 1710 | "shasum": "" 1711 | }, 1712 | "require": { 1713 | "ext-dom": "*", 1714 | "ext-tokenizer": "*", 1715 | "ext-xmlwriter": "*", 1716 | "php": "^7.2 || ^8.0" 1717 | }, 1718 | "type": "library", 1719 | "autoload": { 1720 | "classmap": [ 1721 | "src/" 1722 | ] 1723 | }, 1724 | "notification-url": "https://packagist.org/downloads/", 1725 | "license": [ 1726 | "BSD-3-Clause" 1727 | ], 1728 | "authors": [ 1729 | { 1730 | "name": "Arne Blankerts", 1731 | "email": "arne@blankerts.de", 1732 | "role": "Developer" 1733 | } 1734 | ], 1735 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 1736 | "support": { 1737 | "issues": "https://github.com/theseer/tokenizer/issues", 1738 | "source": "https://github.com/theseer/tokenizer/tree/1.2.3" 1739 | }, 1740 | "funding": [ 1741 | { 1742 | "url": "https://github.com/theseer", 1743 | "type": "github" 1744 | } 1745 | ], 1746 | "time": "2024-03-03T12:36:25+00:00" 1747 | } 1748 | ], 1749 | "packages-dev": [ 1750 | { 1751 | "name": "amphp/amp", 1752 | "version": "v2.6.4", 1753 | "source": { 1754 | "type": "git", 1755 | "url": "https://github.com/amphp/amp.git", 1756 | "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" 1757 | }, 1758 | "dist": { 1759 | "type": "zip", 1760 | "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", 1761 | "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", 1762 | "shasum": "" 1763 | }, 1764 | "require": { 1765 | "php": ">=7.1" 1766 | }, 1767 | "require-dev": { 1768 | "amphp/php-cs-fixer-config": "dev-master", 1769 | "amphp/phpunit-util": "^1", 1770 | "ext-json": "*", 1771 | "jetbrains/phpstorm-stubs": "^2019.3", 1772 | "phpunit/phpunit": "^7 | ^8 | ^9", 1773 | "react/promise": "^2", 1774 | "vimeo/psalm": "^3.12" 1775 | }, 1776 | "type": "library", 1777 | "extra": { 1778 | "branch-alias": { 1779 | "dev-master": "2.x-dev" 1780 | } 1781 | }, 1782 | "autoload": { 1783 | "files": [ 1784 | "lib/functions.php", 1785 | "lib/Internal/functions.php" 1786 | ], 1787 | "psr-4": { 1788 | "Amp\\": "lib" 1789 | } 1790 | }, 1791 | "notification-url": "https://packagist.org/downloads/", 1792 | "license": [ 1793 | "MIT" 1794 | ], 1795 | "authors": [ 1796 | { 1797 | "name": "Daniel Lowrey", 1798 | "email": "rdlowrey@php.net" 1799 | }, 1800 | { 1801 | "name": "Aaron Piotrowski", 1802 | "email": "aaron@trowski.com" 1803 | }, 1804 | { 1805 | "name": "Bob Weinand", 1806 | "email": "bobwei9@hotmail.com" 1807 | }, 1808 | { 1809 | "name": "Niklas Keller", 1810 | "email": "me@kelunik.com" 1811 | } 1812 | ], 1813 | "description": "A non-blocking concurrency framework for PHP applications.", 1814 | "homepage": "https://amphp.org/amp", 1815 | "keywords": [ 1816 | "async", 1817 | "asynchronous", 1818 | "awaitable", 1819 | "concurrency", 1820 | "event", 1821 | "event-loop", 1822 | "future", 1823 | "non-blocking", 1824 | "promise" 1825 | ], 1826 | "support": { 1827 | "irc": "irc://irc.freenode.org/amphp", 1828 | "issues": "https://github.com/amphp/amp/issues", 1829 | "source": "https://github.com/amphp/amp/tree/v2.6.4" 1830 | }, 1831 | "funding": [ 1832 | { 1833 | "url": "https://github.com/amphp", 1834 | "type": "github" 1835 | } 1836 | ], 1837 | "time": "2024-03-21T18:52:26+00:00" 1838 | }, 1839 | { 1840 | "name": "amphp/byte-stream", 1841 | "version": "v1.8.2", 1842 | "source": { 1843 | "type": "git", 1844 | "url": "https://github.com/amphp/byte-stream.git", 1845 | "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" 1846 | }, 1847 | "dist": { 1848 | "type": "zip", 1849 | "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", 1850 | "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", 1851 | "shasum": "" 1852 | }, 1853 | "require": { 1854 | "amphp/amp": "^2", 1855 | "php": ">=7.1" 1856 | }, 1857 | "require-dev": { 1858 | "amphp/php-cs-fixer-config": "dev-master", 1859 | "amphp/phpunit-util": "^1.4", 1860 | "friendsofphp/php-cs-fixer": "^2.3", 1861 | "jetbrains/phpstorm-stubs": "^2019.3", 1862 | "phpunit/phpunit": "^6 || ^7 || ^8", 1863 | "psalm/phar": "^3.11.4" 1864 | }, 1865 | "type": "library", 1866 | "autoload": { 1867 | "files": [ 1868 | "lib/functions.php" 1869 | ], 1870 | "psr-4": { 1871 | "Amp\\ByteStream\\": "lib" 1872 | } 1873 | }, 1874 | "notification-url": "https://packagist.org/downloads/", 1875 | "license": [ 1876 | "MIT" 1877 | ], 1878 | "authors": [ 1879 | { 1880 | "name": "Aaron Piotrowski", 1881 | "email": "aaron@trowski.com" 1882 | }, 1883 | { 1884 | "name": "Niklas Keller", 1885 | "email": "me@kelunik.com" 1886 | } 1887 | ], 1888 | "description": "A stream abstraction to make working with non-blocking I/O simple.", 1889 | "homepage": "https://amphp.org/byte-stream", 1890 | "keywords": [ 1891 | "amp", 1892 | "amphp", 1893 | "async", 1894 | "io", 1895 | "non-blocking", 1896 | "stream" 1897 | ], 1898 | "support": { 1899 | "issues": "https://github.com/amphp/byte-stream/issues", 1900 | "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" 1901 | }, 1902 | "funding": [ 1903 | { 1904 | "url": "https://github.com/amphp", 1905 | "type": "github" 1906 | } 1907 | ], 1908 | "time": "2024-04-13T18:00:56+00:00" 1909 | }, 1910 | { 1911 | "name": "colinodell/json5", 1912 | "version": "v2.3.0", 1913 | "source": { 1914 | "type": "git", 1915 | "url": "https://github.com/colinodell/json5.git", 1916 | "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710" 1917 | }, 1918 | "dist": { 1919 | "type": "zip", 1920 | "url": "https://api.github.com/repos/colinodell/json5/zipball/15b063f8cb5e6deb15f0cd39123264ec0d19c710", 1921 | "reference": "15b063f8cb5e6deb15f0cd39123264ec0d19c710", 1922 | "shasum": "" 1923 | }, 1924 | "require": { 1925 | "ext-json": "*", 1926 | "ext-mbstring": "*", 1927 | "php": "^7.1.3|^8.0" 1928 | }, 1929 | "conflict": { 1930 | "scrutinizer/ocular": "1.7.*" 1931 | }, 1932 | "require-dev": { 1933 | "mikehaertl/php-shellcommand": "^1.2.5", 1934 | "phpstan/phpstan": "^1.4", 1935 | "scrutinizer/ocular": "^1.6", 1936 | "squizlabs/php_codesniffer": "^2.3 || ^3.0", 1937 | "symfony/finder": "^4.4|^5.4|^6.0", 1938 | "symfony/phpunit-bridge": "^5.4|^6.0" 1939 | }, 1940 | "bin": [ 1941 | "bin/json5" 1942 | ], 1943 | "type": "library", 1944 | "extra": { 1945 | "branch-alias": { 1946 | "dev-main": "3.0-dev" 1947 | } 1948 | }, 1949 | "autoload": { 1950 | "files": [ 1951 | "src/global.php" 1952 | ], 1953 | "psr-4": { 1954 | "ColinODell\\Json5\\": "src" 1955 | } 1956 | }, 1957 | "notification-url": "https://packagist.org/downloads/", 1958 | "license": [ 1959 | "MIT" 1960 | ], 1961 | "authors": [ 1962 | { 1963 | "name": "Colin O'Dell", 1964 | "email": "colinodell@gmail.com", 1965 | "homepage": "https://www.colinodell.com", 1966 | "role": "Developer" 1967 | } 1968 | ], 1969 | "description": "UTF-8 compatible JSON5 parser for PHP", 1970 | "homepage": "https://github.com/colinodell/json5", 1971 | "keywords": [ 1972 | "JSON5", 1973 | "json", 1974 | "json5_decode", 1975 | "json_decode" 1976 | ], 1977 | "support": { 1978 | "issues": "https://github.com/colinodell/json5/issues", 1979 | "source": "https://github.com/colinodell/json5/tree/v2.3.0" 1980 | }, 1981 | "funding": [ 1982 | { 1983 | "url": "https://www.colinodell.com/sponsor", 1984 | "type": "custom" 1985 | }, 1986 | { 1987 | "url": "https://www.paypal.me/colinpodell/10.00", 1988 | "type": "custom" 1989 | }, 1990 | { 1991 | "url": "https://github.com/colinodell", 1992 | "type": "github" 1993 | }, 1994 | { 1995 | "url": "https://www.patreon.com/colinodell", 1996 | "type": "patreon" 1997 | } 1998 | ], 1999 | "time": "2022-12-27T16:44:40+00:00" 2000 | }, 2001 | { 2002 | "name": "composer/package-versions-deprecated", 2003 | "version": "1.11.99.5", 2004 | "source": { 2005 | "type": "git", 2006 | "url": "https://github.com/composer/package-versions-deprecated.git", 2007 | "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d" 2008 | }, 2009 | "dist": { 2010 | "type": "zip", 2011 | "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d", 2012 | "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d", 2013 | "shasum": "" 2014 | }, 2015 | "require": { 2016 | "composer-plugin-api": "^1.1.0 || ^2.0", 2017 | "php": "^7 || ^8" 2018 | }, 2019 | "replace": { 2020 | "ocramius/package-versions": "1.11.99" 2021 | }, 2022 | "require-dev": { 2023 | "composer/composer": "^1.9.3 || ^2.0@dev", 2024 | "ext-zip": "^1.13", 2025 | "phpunit/phpunit": "^6.5 || ^7" 2026 | }, 2027 | "type": "composer-plugin", 2028 | "extra": { 2029 | "class": "PackageVersions\\Installer", 2030 | "branch-alias": { 2031 | "dev-master": "1.x-dev" 2032 | } 2033 | }, 2034 | "autoload": { 2035 | "psr-4": { 2036 | "PackageVersions\\": "src/PackageVersions" 2037 | } 2038 | }, 2039 | "notification-url": "https://packagist.org/downloads/", 2040 | "license": [ 2041 | "MIT" 2042 | ], 2043 | "authors": [ 2044 | { 2045 | "name": "Marco Pivetta", 2046 | "email": "ocramius@gmail.com" 2047 | }, 2048 | { 2049 | "name": "Jordi Boggiano", 2050 | "email": "j.boggiano@seld.be" 2051 | } 2052 | ], 2053 | "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", 2054 | "support": { 2055 | "issues": "https://github.com/composer/package-versions-deprecated/issues", 2056 | "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5" 2057 | }, 2058 | "funding": [ 2059 | { 2060 | "url": "https://packagist.com", 2061 | "type": "custom" 2062 | }, 2063 | { 2064 | "url": "https://github.com/composer", 2065 | "type": "github" 2066 | }, 2067 | { 2068 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 2069 | "type": "tidelift" 2070 | } 2071 | ], 2072 | "time": "2022-01-17T14:14:24+00:00" 2073 | }, 2074 | { 2075 | "name": "composer/pcre", 2076 | "version": "3.3.1", 2077 | "source": { 2078 | "type": "git", 2079 | "url": "https://github.com/composer/pcre.git", 2080 | "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4" 2081 | }, 2082 | "dist": { 2083 | "type": "zip", 2084 | "url": "https://api.github.com/repos/composer/pcre/zipball/63aaeac21d7e775ff9bc9d45021e1745c97521c4", 2085 | "reference": "63aaeac21d7e775ff9bc9d45021e1745c97521c4", 2086 | "shasum": "" 2087 | }, 2088 | "require": { 2089 | "php": "^7.4 || ^8.0" 2090 | }, 2091 | "conflict": { 2092 | "phpstan/phpstan": "<1.11.10" 2093 | }, 2094 | "require-dev": { 2095 | "phpstan/phpstan": "^1.11.10", 2096 | "phpstan/phpstan-strict-rules": "^1.1", 2097 | "phpunit/phpunit": "^8 || ^9" 2098 | }, 2099 | "type": "library", 2100 | "extra": { 2101 | "branch-alias": { 2102 | "dev-main": "3.x-dev" 2103 | }, 2104 | "phpstan": { 2105 | "includes": [ 2106 | "extension.neon" 2107 | ] 2108 | } 2109 | }, 2110 | "autoload": { 2111 | "psr-4": { 2112 | "Composer\\Pcre\\": "src" 2113 | } 2114 | }, 2115 | "notification-url": "https://packagist.org/downloads/", 2116 | "license": [ 2117 | "MIT" 2118 | ], 2119 | "authors": [ 2120 | { 2121 | "name": "Jordi Boggiano", 2122 | "email": "j.boggiano@seld.be", 2123 | "homepage": "http://seld.be" 2124 | } 2125 | ], 2126 | "description": "PCRE wrapping library that offers type-safe preg_* replacements.", 2127 | "keywords": [ 2128 | "PCRE", 2129 | "preg", 2130 | "regex", 2131 | "regular expression" 2132 | ], 2133 | "support": { 2134 | "issues": "https://github.com/composer/pcre/issues", 2135 | "source": "https://github.com/composer/pcre/tree/3.3.1" 2136 | }, 2137 | "funding": [ 2138 | { 2139 | "url": "https://packagist.com", 2140 | "type": "custom" 2141 | }, 2142 | { 2143 | "url": "https://github.com/composer", 2144 | "type": "github" 2145 | }, 2146 | { 2147 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 2148 | "type": "tidelift" 2149 | } 2150 | ], 2151 | "time": "2024-08-27T18:44:43+00:00" 2152 | }, 2153 | { 2154 | "name": "composer/semver", 2155 | "version": "3.4.2", 2156 | "source": { 2157 | "type": "git", 2158 | "url": "https://github.com/composer/semver.git", 2159 | "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" 2160 | }, 2161 | "dist": { 2162 | "type": "zip", 2163 | "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", 2164 | "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", 2165 | "shasum": "" 2166 | }, 2167 | "require": { 2168 | "php": "^5.3.2 || ^7.0 || ^8.0" 2169 | }, 2170 | "require-dev": { 2171 | "phpstan/phpstan": "^1.4", 2172 | "symfony/phpunit-bridge": "^4.2 || ^5" 2173 | }, 2174 | "type": "library", 2175 | "extra": { 2176 | "branch-alias": { 2177 | "dev-main": "3.x-dev" 2178 | } 2179 | }, 2180 | "autoload": { 2181 | "psr-4": { 2182 | "Composer\\Semver\\": "src" 2183 | } 2184 | }, 2185 | "notification-url": "https://packagist.org/downloads/", 2186 | "license": [ 2187 | "MIT" 2188 | ], 2189 | "authors": [ 2190 | { 2191 | "name": "Nils Adermann", 2192 | "email": "naderman@naderman.de", 2193 | "homepage": "http://www.naderman.de" 2194 | }, 2195 | { 2196 | "name": "Jordi Boggiano", 2197 | "email": "j.boggiano@seld.be", 2198 | "homepage": "http://seld.be" 2199 | }, 2200 | { 2201 | "name": "Rob Bast", 2202 | "email": "rob.bast@gmail.com", 2203 | "homepage": "http://robbast.nl" 2204 | } 2205 | ], 2206 | "description": "Semver library that offers utilities, version constraint parsing and validation.", 2207 | "keywords": [ 2208 | "semantic", 2209 | "semver", 2210 | "validation", 2211 | "versioning" 2212 | ], 2213 | "support": { 2214 | "irc": "ircs://irc.libera.chat:6697/composer", 2215 | "issues": "https://github.com/composer/semver/issues", 2216 | "source": "https://github.com/composer/semver/tree/3.4.2" 2217 | }, 2218 | "funding": [ 2219 | { 2220 | "url": "https://packagist.com", 2221 | "type": "custom" 2222 | }, 2223 | { 2224 | "url": "https://github.com/composer", 2225 | "type": "github" 2226 | }, 2227 | { 2228 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 2229 | "type": "tidelift" 2230 | } 2231 | ], 2232 | "time": "2024-07-12T11:35:52+00:00" 2233 | }, 2234 | { 2235 | "name": "composer/xdebug-handler", 2236 | "version": "3.0.5", 2237 | "source": { 2238 | "type": "git", 2239 | "url": "https://github.com/composer/xdebug-handler.git", 2240 | "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" 2241 | }, 2242 | "dist": { 2243 | "type": "zip", 2244 | "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", 2245 | "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", 2246 | "shasum": "" 2247 | }, 2248 | "require": { 2249 | "composer/pcre": "^1 || ^2 || ^3", 2250 | "php": "^7.2.5 || ^8.0", 2251 | "psr/log": "^1 || ^2 || ^3" 2252 | }, 2253 | "require-dev": { 2254 | "phpstan/phpstan": "^1.0", 2255 | "phpstan/phpstan-strict-rules": "^1.1", 2256 | "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" 2257 | }, 2258 | "type": "library", 2259 | "autoload": { 2260 | "psr-4": { 2261 | "Composer\\XdebugHandler\\": "src" 2262 | } 2263 | }, 2264 | "notification-url": "https://packagist.org/downloads/", 2265 | "license": [ 2266 | "MIT" 2267 | ], 2268 | "authors": [ 2269 | { 2270 | "name": "John Stevenson", 2271 | "email": "john-stevenson@blueyonder.co.uk" 2272 | } 2273 | ], 2274 | "description": "Restarts a process without Xdebug.", 2275 | "keywords": [ 2276 | "Xdebug", 2277 | "performance" 2278 | ], 2279 | "support": { 2280 | "irc": "ircs://irc.libera.chat:6697/composer", 2281 | "issues": "https://github.com/composer/xdebug-handler/issues", 2282 | "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" 2283 | }, 2284 | "funding": [ 2285 | { 2286 | "url": "https://packagist.com", 2287 | "type": "custom" 2288 | }, 2289 | { 2290 | "url": "https://github.com/composer", 2291 | "type": "github" 2292 | }, 2293 | { 2294 | "url": "https://tidelift.com/funding/github/packagist/composer/composer", 2295 | "type": "tidelift" 2296 | } 2297 | ], 2298 | "time": "2024-05-06T16:37:16+00:00" 2299 | }, 2300 | { 2301 | "name": "dealerdirect/phpcodesniffer-composer-installer", 2302 | "version": "v1.0.0", 2303 | "source": { 2304 | "type": "git", 2305 | "url": "https://github.com/PHPCSStandards/composer-installer.git", 2306 | "reference": "4be43904336affa5c2f70744a348312336afd0da" 2307 | }, 2308 | "dist": { 2309 | "type": "zip", 2310 | "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", 2311 | "reference": "4be43904336affa5c2f70744a348312336afd0da", 2312 | "shasum": "" 2313 | }, 2314 | "require": { 2315 | "composer-plugin-api": "^1.0 || ^2.0", 2316 | "php": ">=5.4", 2317 | "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" 2318 | }, 2319 | "require-dev": { 2320 | "composer/composer": "*", 2321 | "ext-json": "*", 2322 | "ext-zip": "*", 2323 | "php-parallel-lint/php-parallel-lint": "^1.3.1", 2324 | "phpcompatibility/php-compatibility": "^9.0", 2325 | "yoast/phpunit-polyfills": "^1.0" 2326 | }, 2327 | "type": "composer-plugin", 2328 | "extra": { 2329 | "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" 2330 | }, 2331 | "autoload": { 2332 | "psr-4": { 2333 | "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" 2334 | } 2335 | }, 2336 | "notification-url": "https://packagist.org/downloads/", 2337 | "license": [ 2338 | "MIT" 2339 | ], 2340 | "authors": [ 2341 | { 2342 | "name": "Franck Nijhof", 2343 | "email": "franck.nijhof@dealerdirect.com", 2344 | "homepage": "http://www.frenck.nl", 2345 | "role": "Developer / IT Manager" 2346 | }, 2347 | { 2348 | "name": "Contributors", 2349 | "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" 2350 | } 2351 | ], 2352 | "description": "PHP_CodeSniffer Standards Composer Installer Plugin", 2353 | "homepage": "http://www.dealerdirect.com", 2354 | "keywords": [ 2355 | "PHPCodeSniffer", 2356 | "PHP_CodeSniffer", 2357 | "code quality", 2358 | "codesniffer", 2359 | "composer", 2360 | "installer", 2361 | "phpcbf", 2362 | "phpcs", 2363 | "plugin", 2364 | "qa", 2365 | "quality", 2366 | "standard", 2367 | "standards", 2368 | "style guide", 2369 | "stylecheck", 2370 | "tests" 2371 | ], 2372 | "support": { 2373 | "issues": "https://github.com/PHPCSStandards/composer-installer/issues", 2374 | "source": "https://github.com/PHPCSStandards/composer-installer" 2375 | }, 2376 | "time": "2023-01-05T11:28:13+00:00" 2377 | }, 2378 | { 2379 | "name": "dnoegel/php-xdg-base-dir", 2380 | "version": "v0.1.1", 2381 | "source": { 2382 | "type": "git", 2383 | "url": "https://github.com/dnoegel/php-xdg-base-dir.git", 2384 | "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" 2385 | }, 2386 | "dist": { 2387 | "type": "zip", 2388 | "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", 2389 | "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", 2390 | "shasum": "" 2391 | }, 2392 | "require": { 2393 | "php": ">=5.3.2" 2394 | }, 2395 | "require-dev": { 2396 | "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" 2397 | }, 2398 | "type": "library", 2399 | "autoload": { 2400 | "psr-4": { 2401 | "XdgBaseDir\\": "src/" 2402 | } 2403 | }, 2404 | "notification-url": "https://packagist.org/downloads/", 2405 | "license": [ 2406 | "MIT" 2407 | ], 2408 | "description": "implementation of xdg base directory specification for php", 2409 | "support": { 2410 | "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", 2411 | "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" 2412 | }, 2413 | "time": "2019-12-04T15:06:13+00:00" 2414 | }, 2415 | { 2416 | "name": "doctrine/coding-standard", 2417 | "version": "12.0.0", 2418 | "source": { 2419 | "type": "git", 2420 | "url": "https://github.com/doctrine/coding-standard.git", 2421 | "reference": "1b2b7dc58c68833af481fb9325c25abd40681c79" 2422 | }, 2423 | "dist": { 2424 | "type": "zip", 2425 | "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/1b2b7dc58c68833af481fb9325c25abd40681c79", 2426 | "reference": "1b2b7dc58c68833af481fb9325c25abd40681c79", 2427 | "shasum": "" 2428 | }, 2429 | "require": { 2430 | "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0.0", 2431 | "php": "^7.2 || ^8.0", 2432 | "slevomat/coding-standard": "^8.11", 2433 | "squizlabs/php_codesniffer": "^3.7" 2434 | }, 2435 | "type": "phpcodesniffer-standard", 2436 | "notification-url": "https://packagist.org/downloads/", 2437 | "license": [ 2438 | "MIT" 2439 | ], 2440 | "authors": [ 2441 | { 2442 | "name": "Benjamin Eberlei", 2443 | "email": "kontakt@beberlei.de" 2444 | }, 2445 | { 2446 | "name": "Steve Müller", 2447 | "email": "st.mueller@dzh-online.de" 2448 | } 2449 | ], 2450 | "description": "The Doctrine Coding Standard is a set of PHPCS rules applied to all Doctrine projects.", 2451 | "homepage": "https://www.doctrine-project.org/projects/coding-standard.html", 2452 | "keywords": [ 2453 | "checks", 2454 | "code", 2455 | "coding", 2456 | "cs", 2457 | "dev", 2458 | "doctrine", 2459 | "rules", 2460 | "sniffer", 2461 | "sniffs", 2462 | "standard", 2463 | "style" 2464 | ], 2465 | "support": { 2466 | "issues": "https://github.com/doctrine/coding-standard/issues", 2467 | "source": "https://github.com/doctrine/coding-standard/tree/12.0.0" 2468 | }, 2469 | "time": "2023-04-24T17:43:28+00:00" 2470 | }, 2471 | { 2472 | "name": "doctrine/deprecations", 2473 | "version": "1.1.3", 2474 | "source": { 2475 | "type": "git", 2476 | "url": "https://github.com/doctrine/deprecations.git", 2477 | "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" 2478 | }, 2479 | "dist": { 2480 | "type": "zip", 2481 | "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", 2482 | "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", 2483 | "shasum": "" 2484 | }, 2485 | "require": { 2486 | "php": "^7.1 || ^8.0" 2487 | }, 2488 | "require-dev": { 2489 | "doctrine/coding-standard": "^9", 2490 | "phpstan/phpstan": "1.4.10 || 1.10.15", 2491 | "phpstan/phpstan-phpunit": "^1.0", 2492 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 2493 | "psalm/plugin-phpunit": "0.18.4", 2494 | "psr/log": "^1 || ^2 || ^3", 2495 | "vimeo/psalm": "4.30.0 || 5.12.0" 2496 | }, 2497 | "suggest": { 2498 | "psr/log": "Allows logging deprecations via PSR-3 logger implementation" 2499 | }, 2500 | "type": "library", 2501 | "autoload": { 2502 | "psr-4": { 2503 | "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" 2504 | } 2505 | }, 2506 | "notification-url": "https://packagist.org/downloads/", 2507 | "license": [ 2508 | "MIT" 2509 | ], 2510 | "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", 2511 | "homepage": "https://www.doctrine-project.org/", 2512 | "support": { 2513 | "issues": "https://github.com/doctrine/deprecations/issues", 2514 | "source": "https://github.com/doctrine/deprecations/tree/1.1.3" 2515 | }, 2516 | "time": "2024-01-30T19:34:25+00:00" 2517 | }, 2518 | { 2519 | "name": "felixfbecker/advanced-json-rpc", 2520 | "version": "v3.2.1", 2521 | "source": { 2522 | "type": "git", 2523 | "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", 2524 | "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" 2525 | }, 2526 | "dist": { 2527 | "type": "zip", 2528 | "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", 2529 | "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", 2530 | "shasum": "" 2531 | }, 2532 | "require": { 2533 | "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", 2534 | "php": "^7.1 || ^8.0", 2535 | "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" 2536 | }, 2537 | "require-dev": { 2538 | "phpunit/phpunit": "^7.0 || ^8.0" 2539 | }, 2540 | "type": "library", 2541 | "autoload": { 2542 | "psr-4": { 2543 | "AdvancedJsonRpc\\": "lib/" 2544 | } 2545 | }, 2546 | "notification-url": "https://packagist.org/downloads/", 2547 | "license": [ 2548 | "ISC" 2549 | ], 2550 | "authors": [ 2551 | { 2552 | "name": "Felix Becker", 2553 | "email": "felix.b@outlook.com" 2554 | } 2555 | ], 2556 | "description": "A more advanced JSONRPC implementation", 2557 | "support": { 2558 | "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", 2559 | "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" 2560 | }, 2561 | "time": "2021-06-11T22:34:44+00:00" 2562 | }, 2563 | { 2564 | "name": "felixfbecker/language-server-protocol", 2565 | "version": "v1.5.2", 2566 | "source": { 2567 | "type": "git", 2568 | "url": "https://github.com/felixfbecker/php-language-server-protocol.git", 2569 | "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" 2570 | }, 2571 | "dist": { 2572 | "type": "zip", 2573 | "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", 2574 | "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", 2575 | "shasum": "" 2576 | }, 2577 | "require": { 2578 | "php": ">=7.1" 2579 | }, 2580 | "require-dev": { 2581 | "phpstan/phpstan": "*", 2582 | "squizlabs/php_codesniffer": "^3.1", 2583 | "vimeo/psalm": "^4.0" 2584 | }, 2585 | "type": "library", 2586 | "extra": { 2587 | "branch-alias": { 2588 | "dev-master": "1.x-dev" 2589 | } 2590 | }, 2591 | "autoload": { 2592 | "psr-4": { 2593 | "LanguageServerProtocol\\": "src/" 2594 | } 2595 | }, 2596 | "notification-url": "https://packagist.org/downloads/", 2597 | "license": [ 2598 | "ISC" 2599 | ], 2600 | "authors": [ 2601 | { 2602 | "name": "Felix Becker", 2603 | "email": "felix.b@outlook.com" 2604 | } 2605 | ], 2606 | "description": "PHP classes for the Language Server Protocol", 2607 | "keywords": [ 2608 | "language", 2609 | "microsoft", 2610 | "php", 2611 | "server" 2612 | ], 2613 | "support": { 2614 | "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", 2615 | "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" 2616 | }, 2617 | "time": "2022-03-02T22:36:06+00:00" 2618 | }, 2619 | { 2620 | "name": "fidry/cpu-core-counter", 2621 | "version": "1.2.0", 2622 | "source": { 2623 | "type": "git", 2624 | "url": "https://github.com/theofidry/cpu-core-counter.git", 2625 | "reference": "8520451a140d3f46ac33042715115e290cf5785f" 2626 | }, 2627 | "dist": { 2628 | "type": "zip", 2629 | "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", 2630 | "reference": "8520451a140d3f46ac33042715115e290cf5785f", 2631 | "shasum": "" 2632 | }, 2633 | "require": { 2634 | "php": "^7.2 || ^8.0" 2635 | }, 2636 | "require-dev": { 2637 | "fidry/makefile": "^0.2.0", 2638 | "fidry/php-cs-fixer-config": "^1.1.2", 2639 | "phpstan/extension-installer": "^1.2.0", 2640 | "phpstan/phpstan": "^1.9.2", 2641 | "phpstan/phpstan-deprecation-rules": "^1.0.0", 2642 | "phpstan/phpstan-phpunit": "^1.2.2", 2643 | "phpstan/phpstan-strict-rules": "^1.4.4", 2644 | "phpunit/phpunit": "^8.5.31 || ^9.5.26", 2645 | "webmozarts/strict-phpunit": "^7.5" 2646 | }, 2647 | "type": "library", 2648 | "autoload": { 2649 | "psr-4": { 2650 | "Fidry\\CpuCoreCounter\\": "src/" 2651 | } 2652 | }, 2653 | "notification-url": "https://packagist.org/downloads/", 2654 | "license": [ 2655 | "MIT" 2656 | ], 2657 | "authors": [ 2658 | { 2659 | "name": "Théo FIDRY", 2660 | "email": "theo.fidry@gmail.com" 2661 | } 2662 | ], 2663 | "description": "Tiny utility to get the number of CPU cores.", 2664 | "keywords": [ 2665 | "CPU", 2666 | "core" 2667 | ], 2668 | "support": { 2669 | "issues": "https://github.com/theofidry/cpu-core-counter/issues", 2670 | "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" 2671 | }, 2672 | "funding": [ 2673 | { 2674 | "url": "https://github.com/theofidry", 2675 | "type": "github" 2676 | } 2677 | ], 2678 | "time": "2024-08-06T10:04:20+00:00" 2679 | }, 2680 | { 2681 | "name": "infection/abstract-testframework-adapter", 2682 | "version": "0.5.0", 2683 | "source": { 2684 | "type": "git", 2685 | "url": "https://github.com/infection/abstract-testframework-adapter.git", 2686 | "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b" 2687 | }, 2688 | "dist": { 2689 | "type": "zip", 2690 | "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/18925e20d15d1a5995bb85c9dc09e8751e1e069b", 2691 | "reference": "18925e20d15d1a5995bb85c9dc09e8751e1e069b", 2692 | "shasum": "" 2693 | }, 2694 | "require": { 2695 | "php": "^7.4 || ^8.0" 2696 | }, 2697 | "require-dev": { 2698 | "ergebnis/composer-normalize": "^2.8", 2699 | "friendsofphp/php-cs-fixer": "^2.17", 2700 | "phpunit/phpunit": "^9.5" 2701 | }, 2702 | "type": "library", 2703 | "autoload": { 2704 | "psr-4": { 2705 | "Infection\\AbstractTestFramework\\": "src/" 2706 | } 2707 | }, 2708 | "notification-url": "https://packagist.org/downloads/", 2709 | "license": [ 2710 | "BSD-3-Clause" 2711 | ], 2712 | "authors": [ 2713 | { 2714 | "name": "Maks Rafalko", 2715 | "email": "maks.rafalko@gmail.com" 2716 | } 2717 | ], 2718 | "description": "Abstract Test Framework Adapter for Infection", 2719 | "support": { 2720 | "issues": "https://github.com/infection/abstract-testframework-adapter/issues", 2721 | "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.0" 2722 | }, 2723 | "funding": [ 2724 | { 2725 | "url": "https://github.com/infection", 2726 | "type": "github" 2727 | }, 2728 | { 2729 | "url": "https://opencollective.com/infection", 2730 | "type": "open_collective" 2731 | } 2732 | ], 2733 | "time": "2021-08-17T18:49:12+00:00" 2734 | }, 2735 | { 2736 | "name": "infection/extension-installer", 2737 | "version": "0.1.2", 2738 | "source": { 2739 | "type": "git", 2740 | "url": "https://github.com/infection/extension-installer.git", 2741 | "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf" 2742 | }, 2743 | "dist": { 2744 | "type": "zip", 2745 | "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf", 2746 | "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf", 2747 | "shasum": "" 2748 | }, 2749 | "require": { 2750 | "composer-plugin-api": "^1.1 || ^2.0" 2751 | }, 2752 | "require-dev": { 2753 | "composer/composer": "^1.9 || ^2.0", 2754 | "friendsofphp/php-cs-fixer": "^2.18, <2.19", 2755 | "infection/infection": "^0.15.2", 2756 | "php-coveralls/php-coveralls": "^2.4", 2757 | "phpstan/extension-installer": "^1.0", 2758 | "phpstan/phpstan": "^0.12.10", 2759 | "phpstan/phpstan-phpunit": "^0.12.6", 2760 | "phpstan/phpstan-strict-rules": "^0.12.2", 2761 | "phpstan/phpstan-webmozart-assert": "^0.12.2", 2762 | "phpunit/phpunit": "^9.5", 2763 | "vimeo/psalm": "^4.8" 2764 | }, 2765 | "type": "composer-plugin", 2766 | "extra": { 2767 | "class": "Infection\\ExtensionInstaller\\Plugin" 2768 | }, 2769 | "autoload": { 2770 | "psr-4": { 2771 | "Infection\\ExtensionInstaller\\": "src/" 2772 | } 2773 | }, 2774 | "notification-url": "https://packagist.org/downloads/", 2775 | "license": [ 2776 | "BSD-3-Clause" 2777 | ], 2778 | "authors": [ 2779 | { 2780 | "name": "Maks Rafalko", 2781 | "email": "maks.rafalko@gmail.com" 2782 | } 2783 | ], 2784 | "description": "Infection Extension Installer", 2785 | "support": { 2786 | "issues": "https://github.com/infection/extension-installer/issues", 2787 | "source": "https://github.com/infection/extension-installer/tree/0.1.2" 2788 | }, 2789 | "funding": [ 2790 | { 2791 | "url": "https://github.com/infection", 2792 | "type": "github" 2793 | }, 2794 | { 2795 | "url": "https://opencollective.com/infection", 2796 | "type": "open_collective" 2797 | } 2798 | ], 2799 | "time": "2021-10-20T22:08:34+00:00" 2800 | }, 2801 | { 2802 | "name": "infection/include-interceptor", 2803 | "version": "0.2.5", 2804 | "source": { 2805 | "type": "git", 2806 | "url": "https://github.com/infection/include-interceptor.git", 2807 | "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7" 2808 | }, 2809 | "dist": { 2810 | "type": "zip", 2811 | "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7", 2812 | "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7", 2813 | "shasum": "" 2814 | }, 2815 | "require-dev": { 2816 | "friendsofphp/php-cs-fixer": "^2.16", 2817 | "infection/infection": "^0.15.0", 2818 | "phan/phan": "^2.4 || ^3", 2819 | "php-coveralls/php-coveralls": "^2.2", 2820 | "phpstan/phpstan": "^0.12.8", 2821 | "phpunit/phpunit": "^8.5", 2822 | "vimeo/psalm": "^3.8" 2823 | }, 2824 | "type": "library", 2825 | "autoload": { 2826 | "psr-4": { 2827 | "Infection\\StreamWrapper\\": "src/" 2828 | } 2829 | }, 2830 | "notification-url": "https://packagist.org/downloads/", 2831 | "license": [ 2832 | "BSD-3-Clause" 2833 | ], 2834 | "authors": [ 2835 | { 2836 | "name": "Maks Rafalko", 2837 | "email": "maks.rafalko@gmail.com" 2838 | } 2839 | ], 2840 | "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.", 2841 | "support": { 2842 | "issues": "https://github.com/infection/include-interceptor/issues", 2843 | "source": "https://github.com/infection/include-interceptor/tree/0.2.5" 2844 | }, 2845 | "funding": [ 2846 | { 2847 | "url": "https://github.com/infection", 2848 | "type": "github" 2849 | }, 2850 | { 2851 | "url": "https://opencollective.com/infection", 2852 | "type": "open_collective" 2853 | } 2854 | ], 2855 | "time": "2021-08-09T10:03:57+00:00" 2856 | }, 2857 | { 2858 | "name": "infection/infection", 2859 | "version": "0.27.10", 2860 | "source": { 2861 | "type": "git", 2862 | "url": "https://github.com/infection/infection.git", 2863 | "reference": "873cd3335774a114bef9ca93388e623bf362d820" 2864 | }, 2865 | "dist": { 2866 | "type": "zip", 2867 | "url": "https://api.github.com/repos/infection/infection/zipball/873cd3335774a114bef9ca93388e623bf362d820", 2868 | "reference": "873cd3335774a114bef9ca93388e623bf362d820", 2869 | "shasum": "" 2870 | }, 2871 | "require": { 2872 | "colinodell/json5": "^2.2", 2873 | "composer-runtime-api": "^2.0", 2874 | "composer/xdebug-handler": "^2.0 || ^3.0", 2875 | "ext-dom": "*", 2876 | "ext-json": "*", 2877 | "ext-libxml": "*", 2878 | "ext-mbstring": "*", 2879 | "fidry/cpu-core-counter": "^0.4.0 || ^0.5.0 || ^1.0", 2880 | "infection/abstract-testframework-adapter": "^0.5.0", 2881 | "infection/extension-installer": "^0.1.0", 2882 | "infection/include-interceptor": "^0.2.5", 2883 | "justinrainbow/json-schema": "^5.2.10", 2884 | "nikic/php-parser": "^4.15.1", 2885 | "ondram/ci-detector": "^4.1.0", 2886 | "php": "^8.1", 2887 | "sanmai/later": "^0.1.1", 2888 | "sanmai/pipeline": "^5.1 || ^6", 2889 | "sebastian/diff": "^3.0.2 || ^4.0 || ^5.0 || ^6.0", 2890 | "symfony/console": "^5.4 || ^6.0 || ^7.0", 2891 | "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", 2892 | "symfony/finder": "^5.4 || ^6.0 || ^7.0", 2893 | "symfony/process": "^5.4 || ^6.0 || ^7.0", 2894 | "thecodingmachine/safe": "^2.1.2", 2895 | "webmozart/assert": "^1.11" 2896 | }, 2897 | "conflict": { 2898 | "antecedent/patchwork": "<2.1.25", 2899 | "dg/bypass-finals": "<1.4.1", 2900 | "phpunit/php-code-coverage": ">9,<9.1.4 || >9.2.17,<9.2.21" 2901 | }, 2902 | "require-dev": { 2903 | "brianium/paratest": "^6.11", 2904 | "ext-simplexml": "*", 2905 | "fidry/makefile": "^0.2.0", 2906 | "helmich/phpunit-json-assert": "^3.0", 2907 | "phpspec/prophecy": "^1.15", 2908 | "phpspec/prophecy-phpunit": "^2.0", 2909 | "phpstan/extension-installer": "^1.1.0", 2910 | "phpstan/phpstan": "^1.10.15", 2911 | "phpstan/phpstan-phpunit": "^1.0.0", 2912 | "phpstan/phpstan-strict-rules": "^1.1.0", 2913 | "phpstan/phpstan-webmozart-assert": "^1.0.2", 2914 | "phpunit/phpunit": "^9.6", 2915 | "rector/rector": "^0.16.0", 2916 | "sidz/phpstan-rules": "^0.4.0", 2917 | "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0", 2918 | "symfony/yaml": "^5.4 || ^6.0 || ^7.0", 2919 | "thecodingmachine/phpstan-safe-rule": "^1.2.0" 2920 | }, 2921 | "bin": [ 2922 | "bin/infection" 2923 | ], 2924 | "type": "library", 2925 | "autoload": { 2926 | "psr-4": { 2927 | "Infection\\": "src/" 2928 | } 2929 | }, 2930 | "notification-url": "https://packagist.org/downloads/", 2931 | "license": [ 2932 | "BSD-3-Clause" 2933 | ], 2934 | "authors": [ 2935 | { 2936 | "name": "Maks Rafalko", 2937 | "email": "maks.rafalko@gmail.com", 2938 | "homepage": "https://twitter.com/maks_rafalko" 2939 | }, 2940 | { 2941 | "name": "Oleg Zhulnev", 2942 | "homepage": "https://github.com/sidz" 2943 | }, 2944 | { 2945 | "name": "Gert de Pagter", 2946 | "homepage": "https://github.com/BackEndTea" 2947 | }, 2948 | { 2949 | "name": "Théo FIDRY", 2950 | "email": "theo.fidry@gmail.com", 2951 | "homepage": "https://twitter.com/tfidry" 2952 | }, 2953 | { 2954 | "name": "Alexey Kopytko", 2955 | "email": "alexey@kopytko.com", 2956 | "homepage": "https://www.alexeykopytko.com" 2957 | }, 2958 | { 2959 | "name": "Andreas Möller", 2960 | "email": "am@localheinz.com", 2961 | "homepage": "https://localheinz.com" 2962 | } 2963 | ], 2964 | "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.", 2965 | "keywords": [ 2966 | "coverage", 2967 | "mutant", 2968 | "mutation framework", 2969 | "mutation testing", 2970 | "testing", 2971 | "unit testing" 2972 | ], 2973 | "support": { 2974 | "issues": "https://github.com/infection/infection/issues", 2975 | "source": "https://github.com/infection/infection/tree/0.27.10" 2976 | }, 2977 | "funding": [ 2978 | { 2979 | "url": "https://github.com/infection", 2980 | "type": "github" 2981 | }, 2982 | { 2983 | "url": "https://opencollective.com/infection", 2984 | "type": "open_collective" 2985 | } 2986 | ], 2987 | "time": "2024-02-20T00:08:52+00:00" 2988 | }, 2989 | { 2990 | "name": "justinrainbow/json-schema", 2991 | "version": "5.3.0", 2992 | "source": { 2993 | "type": "git", 2994 | "url": "https://github.com/jsonrainbow/json-schema.git", 2995 | "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8" 2996 | }, 2997 | "dist": { 2998 | "type": "zip", 2999 | "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", 3000 | "reference": "feb2ca6dd1cebdaf1ed60a4c8de2e53ce11c4fd8", 3001 | "shasum": "" 3002 | }, 3003 | "require": { 3004 | "php": ">=7.1" 3005 | }, 3006 | "require-dev": { 3007 | "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", 3008 | "json-schema/json-schema-test-suite": "1.2.0", 3009 | "phpunit/phpunit": "^4.8.35" 3010 | }, 3011 | "bin": [ 3012 | "bin/validate-json" 3013 | ], 3014 | "type": "library", 3015 | "autoload": { 3016 | "psr-4": { 3017 | "JsonSchema\\": "src/JsonSchema/" 3018 | } 3019 | }, 3020 | "notification-url": "https://packagist.org/downloads/", 3021 | "license": [ 3022 | "MIT" 3023 | ], 3024 | "authors": [ 3025 | { 3026 | "name": "Bruno Prieto Reis", 3027 | "email": "bruno.p.reis@gmail.com" 3028 | }, 3029 | { 3030 | "name": "Justin Rainbow", 3031 | "email": "justin.rainbow@gmail.com" 3032 | }, 3033 | { 3034 | "name": "Igor Wiedler", 3035 | "email": "igor@wiedler.ch" 3036 | }, 3037 | { 3038 | "name": "Robert Schönthal", 3039 | "email": "seroscho@googlemail.com" 3040 | } 3041 | ], 3042 | "description": "A library to validate a json schema.", 3043 | "homepage": "https://github.com/justinrainbow/json-schema", 3044 | "keywords": [ 3045 | "json", 3046 | "schema" 3047 | ], 3048 | "support": { 3049 | "issues": "https://github.com/jsonrainbow/json-schema/issues", 3050 | "source": "https://github.com/jsonrainbow/json-schema/tree/5.3.0" 3051 | }, 3052 | "time": "2024-07-06T21:00:26+00:00" 3053 | }, 3054 | { 3055 | "name": "netresearch/jsonmapper", 3056 | "version": "v4.5.0", 3057 | "source": { 3058 | "type": "git", 3059 | "url": "https://github.com/cweiske/jsonmapper.git", 3060 | "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" 3061 | }, 3062 | "dist": { 3063 | "type": "zip", 3064 | "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", 3065 | "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", 3066 | "shasum": "" 3067 | }, 3068 | "require": { 3069 | "ext-json": "*", 3070 | "ext-pcre": "*", 3071 | "ext-reflection": "*", 3072 | "ext-spl": "*", 3073 | "php": ">=7.1" 3074 | }, 3075 | "require-dev": { 3076 | "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", 3077 | "squizlabs/php_codesniffer": "~3.5" 3078 | }, 3079 | "type": "library", 3080 | "autoload": { 3081 | "psr-0": { 3082 | "JsonMapper": "src/" 3083 | } 3084 | }, 3085 | "notification-url": "https://packagist.org/downloads/", 3086 | "license": [ 3087 | "OSL-3.0" 3088 | ], 3089 | "authors": [ 3090 | { 3091 | "name": "Christian Weiske", 3092 | "email": "cweiske@cweiske.de", 3093 | "homepage": "http://github.com/cweiske/jsonmapper/", 3094 | "role": "Developer" 3095 | } 3096 | ], 3097 | "description": "Map nested JSON structures onto PHP classes", 3098 | "support": { 3099 | "email": "cweiske@cweiske.de", 3100 | "issues": "https://github.com/cweiske/jsonmapper/issues", 3101 | "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" 3102 | }, 3103 | "time": "2024-09-08T10:13:13+00:00" 3104 | }, 3105 | { 3106 | "name": "ondram/ci-detector", 3107 | "version": "4.2.0", 3108 | "source": { 3109 | "type": "git", 3110 | "url": "https://github.com/OndraM/ci-detector.git", 3111 | "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8" 3112 | }, 3113 | "dist": { 3114 | "type": "zip", 3115 | "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", 3116 | "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8", 3117 | "shasum": "" 3118 | }, 3119 | "require": { 3120 | "php": "^7.4 || ^8.0" 3121 | }, 3122 | "require-dev": { 3123 | "ergebnis/composer-normalize": "^2.13.2", 3124 | "lmc/coding-standard": "^3.0.0", 3125 | "php-parallel-lint/php-parallel-lint": "^1.2", 3126 | "phpstan/extension-installer": "^1.1.0", 3127 | "phpstan/phpstan": "^1.2.0", 3128 | "phpstan/phpstan-phpunit": "^1.0.0", 3129 | "phpunit/phpunit": "^9.6.13" 3130 | }, 3131 | "type": "library", 3132 | "autoload": { 3133 | "psr-4": { 3134 | "OndraM\\CiDetector\\": "src/" 3135 | } 3136 | }, 3137 | "notification-url": "https://packagist.org/downloads/", 3138 | "license": [ 3139 | "MIT" 3140 | ], 3141 | "authors": [ 3142 | { 3143 | "name": "Ondřej Machulda", 3144 | "email": "ondrej.machulda@gmail.com" 3145 | } 3146 | ], 3147 | "description": "Detect continuous integration environment and provide unified access to properties of current build", 3148 | "keywords": [ 3149 | "CircleCI", 3150 | "Codeship", 3151 | "Wercker", 3152 | "adapter", 3153 | "appveyor", 3154 | "aws", 3155 | "aws codebuild", 3156 | "azure", 3157 | "azure devops", 3158 | "azure pipelines", 3159 | "bamboo", 3160 | "bitbucket", 3161 | "buddy", 3162 | "ci-info", 3163 | "codebuild", 3164 | "continuous integration", 3165 | "continuousphp", 3166 | "devops", 3167 | "drone", 3168 | "github", 3169 | "gitlab", 3170 | "interface", 3171 | "jenkins", 3172 | "pipelines", 3173 | "sourcehut", 3174 | "teamcity", 3175 | "travis" 3176 | ], 3177 | "support": { 3178 | "issues": "https://github.com/OndraM/ci-detector/issues", 3179 | "source": "https://github.com/OndraM/ci-detector/tree/4.2.0" 3180 | }, 3181 | "time": "2024-03-12T13:22:30+00:00" 3182 | }, 3183 | { 3184 | "name": "phpdocumentor/reflection-common", 3185 | "version": "2.2.0", 3186 | "source": { 3187 | "type": "git", 3188 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 3189 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 3190 | }, 3191 | "dist": { 3192 | "type": "zip", 3193 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 3194 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 3195 | "shasum": "" 3196 | }, 3197 | "require": { 3198 | "php": "^7.2 || ^8.0" 3199 | }, 3200 | "type": "library", 3201 | "extra": { 3202 | "branch-alias": { 3203 | "dev-2.x": "2.x-dev" 3204 | } 3205 | }, 3206 | "autoload": { 3207 | "psr-4": { 3208 | "phpDocumentor\\Reflection\\": "src/" 3209 | } 3210 | }, 3211 | "notification-url": "https://packagist.org/downloads/", 3212 | "license": [ 3213 | "MIT" 3214 | ], 3215 | "authors": [ 3216 | { 3217 | "name": "Jaap van Otterdijk", 3218 | "email": "opensource@ijaap.nl" 3219 | } 3220 | ], 3221 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 3222 | "homepage": "http://www.phpdoc.org", 3223 | "keywords": [ 3224 | "FQSEN", 3225 | "phpDocumentor", 3226 | "phpdoc", 3227 | "reflection", 3228 | "static analysis" 3229 | ], 3230 | "support": { 3231 | "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", 3232 | "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" 3233 | }, 3234 | "time": "2020-06-27T09:03:43+00:00" 3235 | }, 3236 | { 3237 | "name": "phpdocumentor/reflection-docblock", 3238 | "version": "5.4.1", 3239 | "source": { 3240 | "type": "git", 3241 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 3242 | "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" 3243 | }, 3244 | "dist": { 3245 | "type": "zip", 3246 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", 3247 | "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", 3248 | "shasum": "" 3249 | }, 3250 | "require": { 3251 | "doctrine/deprecations": "^1.1", 3252 | "ext-filter": "*", 3253 | "php": "^7.4 || ^8.0", 3254 | "phpdocumentor/reflection-common": "^2.2", 3255 | "phpdocumentor/type-resolver": "^1.7", 3256 | "phpstan/phpdoc-parser": "^1.7", 3257 | "webmozart/assert": "^1.9.1" 3258 | }, 3259 | "require-dev": { 3260 | "mockery/mockery": "~1.3.5", 3261 | "phpstan/extension-installer": "^1.1", 3262 | "phpstan/phpstan": "^1.8", 3263 | "phpstan/phpstan-mockery": "^1.1", 3264 | "phpstan/phpstan-webmozart-assert": "^1.2", 3265 | "phpunit/phpunit": "^9.5", 3266 | "vimeo/psalm": "^5.13" 3267 | }, 3268 | "type": "library", 3269 | "extra": { 3270 | "branch-alias": { 3271 | "dev-master": "5.x-dev" 3272 | } 3273 | }, 3274 | "autoload": { 3275 | "psr-4": { 3276 | "phpDocumentor\\Reflection\\": "src" 3277 | } 3278 | }, 3279 | "notification-url": "https://packagist.org/downloads/", 3280 | "license": [ 3281 | "MIT" 3282 | ], 3283 | "authors": [ 3284 | { 3285 | "name": "Mike van Riel", 3286 | "email": "me@mikevanriel.com" 3287 | }, 3288 | { 3289 | "name": "Jaap van Otterdijk", 3290 | "email": "opensource@ijaap.nl" 3291 | } 3292 | ], 3293 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 3294 | "support": { 3295 | "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", 3296 | "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" 3297 | }, 3298 | "time": "2024-05-21T05:55:05+00:00" 3299 | }, 3300 | { 3301 | "name": "phpdocumentor/type-resolver", 3302 | "version": "1.8.2", 3303 | "source": { 3304 | "type": "git", 3305 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 3306 | "reference": "153ae662783729388a584b4361f2545e4d841e3c" 3307 | }, 3308 | "dist": { 3309 | "type": "zip", 3310 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", 3311 | "reference": "153ae662783729388a584b4361f2545e4d841e3c", 3312 | "shasum": "" 3313 | }, 3314 | "require": { 3315 | "doctrine/deprecations": "^1.0", 3316 | "php": "^7.3 || ^8.0", 3317 | "phpdocumentor/reflection-common": "^2.0", 3318 | "phpstan/phpdoc-parser": "^1.13" 3319 | }, 3320 | "require-dev": { 3321 | "ext-tokenizer": "*", 3322 | "phpbench/phpbench": "^1.2", 3323 | "phpstan/extension-installer": "^1.1", 3324 | "phpstan/phpstan": "^1.8", 3325 | "phpstan/phpstan-phpunit": "^1.1", 3326 | "phpunit/phpunit": "^9.5", 3327 | "rector/rector": "^0.13.9", 3328 | "vimeo/psalm": "^4.25" 3329 | }, 3330 | "type": "library", 3331 | "extra": { 3332 | "branch-alias": { 3333 | "dev-1.x": "1.x-dev" 3334 | } 3335 | }, 3336 | "autoload": { 3337 | "psr-4": { 3338 | "phpDocumentor\\Reflection\\": "src" 3339 | } 3340 | }, 3341 | "notification-url": "https://packagist.org/downloads/", 3342 | "license": [ 3343 | "MIT" 3344 | ], 3345 | "authors": [ 3346 | { 3347 | "name": "Mike van Riel", 3348 | "email": "me@mikevanriel.com" 3349 | } 3350 | ], 3351 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 3352 | "support": { 3353 | "issues": "https://github.com/phpDocumentor/TypeResolver/issues", 3354 | "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" 3355 | }, 3356 | "time": "2024-02-23T11:10:43+00:00" 3357 | }, 3358 | { 3359 | "name": "phpstan/phpdoc-parser", 3360 | "version": "1.30.1", 3361 | "source": { 3362 | "type": "git", 3363 | "url": "https://github.com/phpstan/phpdoc-parser.git", 3364 | "reference": "51b95ec8670af41009e2b2b56873bad96682413e" 3365 | }, 3366 | "dist": { 3367 | "type": "zip", 3368 | "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", 3369 | "reference": "51b95ec8670af41009e2b2b56873bad96682413e", 3370 | "shasum": "" 3371 | }, 3372 | "require": { 3373 | "php": "^7.2 || ^8.0" 3374 | }, 3375 | "require-dev": { 3376 | "doctrine/annotations": "^2.0", 3377 | "nikic/php-parser": "^4.15", 3378 | "php-parallel-lint/php-parallel-lint": "^1.2", 3379 | "phpstan/extension-installer": "^1.0", 3380 | "phpstan/phpstan": "^1.5", 3381 | "phpstan/phpstan-phpunit": "^1.1", 3382 | "phpstan/phpstan-strict-rules": "^1.0", 3383 | "phpunit/phpunit": "^9.5", 3384 | "symfony/process": "^5.2" 3385 | }, 3386 | "type": "library", 3387 | "autoload": { 3388 | "psr-4": { 3389 | "PHPStan\\PhpDocParser\\": [ 3390 | "src/" 3391 | ] 3392 | } 3393 | }, 3394 | "notification-url": "https://packagist.org/downloads/", 3395 | "license": [ 3396 | "MIT" 3397 | ], 3398 | "description": "PHPDoc parser with support for nullable, intersection and generic types", 3399 | "support": { 3400 | "issues": "https://github.com/phpstan/phpdoc-parser/issues", 3401 | "source": "https://github.com/phpstan/phpdoc-parser/tree/1.30.1" 3402 | }, 3403 | "time": "2024-09-07T20:13:05+00:00" 3404 | }, 3405 | { 3406 | "name": "psalm/plugin-phpunit", 3407 | "version": "0.19.0", 3408 | "source": { 3409 | "type": "git", 3410 | "url": "https://github.com/psalm/psalm-plugin-phpunit.git", 3411 | "reference": "e344eaaa27871e79c6cb97b9efe52a735f9d1966" 3412 | }, 3413 | "dist": { 3414 | "type": "zip", 3415 | "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/e344eaaa27871e79c6cb97b9efe52a735f9d1966", 3416 | "reference": "e344eaaa27871e79c6cb97b9efe52a735f9d1966", 3417 | "shasum": "" 3418 | }, 3419 | "require": { 3420 | "composer/package-versions-deprecated": "^1.10", 3421 | "composer/semver": "^1.4 || ^2.0 || ^3.0", 3422 | "ext-simplexml": "*", 3423 | "php": "^7.4 || ^8.0", 3424 | "vimeo/psalm": "dev-master || ^5@beta || ^5.0" 3425 | }, 3426 | "conflict": { 3427 | "phpunit/phpunit": "<7.5" 3428 | }, 3429 | "require-dev": { 3430 | "codeception/codeception": "^4.0.3", 3431 | "php": "^7.3 || ^8.0", 3432 | "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0", 3433 | "squizlabs/php_codesniffer": "^3.3.1", 3434 | "weirdan/codeception-psalm-module": "^0.11.0", 3435 | "weirdan/prophecy-shim": "^1.0 || ^2.0" 3436 | }, 3437 | "type": "psalm-plugin", 3438 | "extra": { 3439 | "psalm": { 3440 | "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" 3441 | } 3442 | }, 3443 | "autoload": { 3444 | "psr-4": { 3445 | "Psalm\\PhpUnitPlugin\\": "src" 3446 | } 3447 | }, 3448 | "notification-url": "https://packagist.org/downloads/", 3449 | "license": [ 3450 | "MIT" 3451 | ], 3452 | "authors": [ 3453 | { 3454 | "name": "Matt Brown", 3455 | "email": "github@muglug.com" 3456 | } 3457 | ], 3458 | "description": "Psalm plugin for PHPUnit", 3459 | "support": { 3460 | "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", 3461 | "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.19.0" 3462 | }, 3463 | "time": "2024-03-15T10:43:15+00:00" 3464 | }, 3465 | { 3466 | "name": "psr/container", 3467 | "version": "2.0.2", 3468 | "source": { 3469 | "type": "git", 3470 | "url": "https://github.com/php-fig/container.git", 3471 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 3472 | }, 3473 | "dist": { 3474 | "type": "zip", 3475 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 3476 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 3477 | "shasum": "" 3478 | }, 3479 | "require": { 3480 | "php": ">=7.4.0" 3481 | }, 3482 | "type": "library", 3483 | "extra": { 3484 | "branch-alias": { 3485 | "dev-master": "2.0.x-dev" 3486 | } 3487 | }, 3488 | "autoload": { 3489 | "psr-4": { 3490 | "Psr\\Container\\": "src/" 3491 | } 3492 | }, 3493 | "notification-url": "https://packagist.org/downloads/", 3494 | "license": [ 3495 | "MIT" 3496 | ], 3497 | "authors": [ 3498 | { 3499 | "name": "PHP-FIG", 3500 | "homepage": "https://www.php-fig.org/" 3501 | } 3502 | ], 3503 | "description": "Common Container Interface (PHP FIG PSR-11)", 3504 | "homepage": "https://github.com/php-fig/container", 3505 | "keywords": [ 3506 | "PSR-11", 3507 | "container", 3508 | "container-interface", 3509 | "container-interop", 3510 | "psr" 3511 | ], 3512 | "support": { 3513 | "issues": "https://github.com/php-fig/container/issues", 3514 | "source": "https://github.com/php-fig/container/tree/2.0.2" 3515 | }, 3516 | "time": "2021-11-05T16:47:00+00:00" 3517 | }, 3518 | { 3519 | "name": "psr/log", 3520 | "version": "3.0.1", 3521 | "source": { 3522 | "type": "git", 3523 | "url": "https://github.com/php-fig/log.git", 3524 | "reference": "79dff0b268932c640297f5208d6298f71855c03e" 3525 | }, 3526 | "dist": { 3527 | "type": "zip", 3528 | "url": "https://api.github.com/repos/php-fig/log/zipball/79dff0b268932c640297f5208d6298f71855c03e", 3529 | "reference": "79dff0b268932c640297f5208d6298f71855c03e", 3530 | "shasum": "" 3531 | }, 3532 | "require": { 3533 | "php": ">=8.0.0" 3534 | }, 3535 | "type": "library", 3536 | "extra": { 3537 | "branch-alias": { 3538 | "dev-master": "3.x-dev" 3539 | } 3540 | }, 3541 | "autoload": { 3542 | "psr-4": { 3543 | "Psr\\Log\\": "src" 3544 | } 3545 | }, 3546 | "notification-url": "https://packagist.org/downloads/", 3547 | "license": [ 3548 | "MIT" 3549 | ], 3550 | "authors": [ 3551 | { 3552 | "name": "PHP-FIG", 3553 | "homepage": "https://www.php-fig.org/" 3554 | } 3555 | ], 3556 | "description": "Common interface for logging libraries", 3557 | "homepage": "https://github.com/php-fig/log", 3558 | "keywords": [ 3559 | "log", 3560 | "psr", 3561 | "psr-3" 3562 | ], 3563 | "support": { 3564 | "source": "https://github.com/php-fig/log/tree/3.0.1" 3565 | }, 3566 | "time": "2024-08-21T13:31:24+00:00" 3567 | }, 3568 | { 3569 | "name": "roave/infection-static-analysis-plugin", 3570 | "version": "1.35.0", 3571 | "source": { 3572 | "type": "git", 3573 | "url": "https://github.com/Roave/infection-static-analysis-plugin.git", 3574 | "reference": "3cb32845c5f758913a4b9eafd91ae18eafc26d82" 3575 | }, 3576 | "dist": { 3577 | "type": "zip", 3578 | "url": "https://api.github.com/repos/Roave/infection-static-analysis-plugin/zipball/3cb32845c5f758913a4b9eafd91ae18eafc26d82", 3579 | "reference": "3cb32845c5f758913a4b9eafd91ae18eafc26d82", 3580 | "shasum": "" 3581 | }, 3582 | "require": { 3583 | "composer-runtime-api": "^2.2", 3584 | "infection/infection": "0.27.10", 3585 | "php": "~8.1.0 || ~8.2.0 || ~8.3.0", 3586 | "sanmai/later": "^0.1.4", 3587 | "vimeo/psalm": "^4.30.0 || ^5.15" 3588 | }, 3589 | "require-dev": { 3590 | "doctrine/coding-standard": "^12.0.0", 3591 | "phpunit/phpunit": "^10.5.12" 3592 | }, 3593 | "bin": [ 3594 | "bin/roave-infection-static-analysis-plugin" 3595 | ], 3596 | "type": "library", 3597 | "autoload": { 3598 | "psr-4": { 3599 | "Roave\\InfectionStaticAnalysis\\": "src/Roave/InfectionStaticAnalysis" 3600 | } 3601 | }, 3602 | "notification-url": "https://packagist.org/downloads/", 3603 | "license": [ 3604 | "MIT" 3605 | ], 3606 | "authors": [ 3607 | { 3608 | "name": "Marco Pivetta", 3609 | "email": "ocramius@gmail.com" 3610 | } 3611 | ], 3612 | "description": "Static analysis on top of mutation testing - prevents escaped mutants from being invalid according to static analysis", 3613 | "support": { 3614 | "issues": "https://github.com/Roave/infection-static-analysis-plugin/issues", 3615 | "source": "https://github.com/Roave/infection-static-analysis-plugin/tree/1.35.0" 3616 | }, 3617 | "time": "2024-03-10T11:55:48+00:00" 3618 | }, 3619 | { 3620 | "name": "sanmai/later", 3621 | "version": "0.1.4", 3622 | "source": { 3623 | "type": "git", 3624 | "url": "https://github.com/sanmai/later.git", 3625 | "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60" 3626 | }, 3627 | "dist": { 3628 | "type": "zip", 3629 | "url": "https://api.github.com/repos/sanmai/later/zipball/e24c4304a4b1349c2a83151a692cec0c10579f60", 3630 | "reference": "e24c4304a4b1349c2a83151a692cec0c10579f60", 3631 | "shasum": "" 3632 | }, 3633 | "require": { 3634 | "php": ">=7.4" 3635 | }, 3636 | "require-dev": { 3637 | "ergebnis/composer-normalize": "^2.8", 3638 | "friendsofphp/php-cs-fixer": "^3.35.1", 3639 | "infection/infection": ">=0.27.6", 3640 | "phan/phan": ">=2", 3641 | "php-coveralls/php-coveralls": "^2.0", 3642 | "phpstan/phpstan": ">=1.4.5", 3643 | "phpunit/phpunit": ">=9.5 <10", 3644 | "vimeo/psalm": ">=2" 3645 | }, 3646 | "type": "library", 3647 | "extra": { 3648 | "branch-alias": { 3649 | "dev-main": "0.1.x-dev" 3650 | } 3651 | }, 3652 | "autoload": { 3653 | "files": [ 3654 | "src/functions.php" 3655 | ], 3656 | "psr-4": { 3657 | "Later\\": "src/" 3658 | } 3659 | }, 3660 | "notification-url": "https://packagist.org/downloads/", 3661 | "license": [ 3662 | "Apache-2.0" 3663 | ], 3664 | "authors": [ 3665 | { 3666 | "name": "Alexey Kopytko", 3667 | "email": "alexey@kopytko.com" 3668 | } 3669 | ], 3670 | "description": "Later: deferred wrapper object", 3671 | "support": { 3672 | "issues": "https://github.com/sanmai/later/issues", 3673 | "source": "https://github.com/sanmai/later/tree/0.1.4" 3674 | }, 3675 | "funding": [ 3676 | { 3677 | "url": "https://github.com/sanmai", 3678 | "type": "github" 3679 | } 3680 | ], 3681 | "time": "2023-10-24T00:25:28+00:00" 3682 | }, 3683 | { 3684 | "name": "sanmai/pipeline", 3685 | "version": "v6.11", 3686 | "source": { 3687 | "type": "git", 3688 | "url": "https://github.com/sanmai/pipeline.git", 3689 | "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110" 3690 | }, 3691 | "dist": { 3692 | "type": "zip", 3693 | "url": "https://api.github.com/repos/sanmai/pipeline/zipball/a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", 3694 | "reference": "a5fa2a6c6ca93efa37e7c24aab72f47448a6b110", 3695 | "shasum": "" 3696 | }, 3697 | "require": { 3698 | "php": "^7.4 || ^8.0" 3699 | }, 3700 | "require-dev": { 3701 | "ergebnis/composer-normalize": "^2.8", 3702 | "friendsofphp/php-cs-fixer": "^3.17", 3703 | "infection/infection": ">=0.10.5", 3704 | "league/pipeline": "^0.3 || ^1.0", 3705 | "phan/phan": ">=1.1", 3706 | "php-coveralls/php-coveralls": "^2.4.1", 3707 | "phpstan/phpstan": ">=0.10", 3708 | "phpunit/phpunit": ">=9.4", 3709 | "vimeo/psalm": ">=2" 3710 | }, 3711 | "type": "library", 3712 | "extra": { 3713 | "branch-alias": { 3714 | "dev-main": "v6.x-dev" 3715 | } 3716 | }, 3717 | "autoload": { 3718 | "files": [ 3719 | "src/functions.php" 3720 | ], 3721 | "psr-4": { 3722 | "Pipeline\\": "src/" 3723 | } 3724 | }, 3725 | "notification-url": "https://packagist.org/downloads/", 3726 | "license": [ 3727 | "Apache-2.0" 3728 | ], 3729 | "authors": [ 3730 | { 3731 | "name": "Alexey Kopytko", 3732 | "email": "alexey@kopytko.com" 3733 | } 3734 | ], 3735 | "description": "General-purpose collections pipeline", 3736 | "support": { 3737 | "issues": "https://github.com/sanmai/pipeline/issues", 3738 | "source": "https://github.com/sanmai/pipeline/tree/v6.11" 3739 | }, 3740 | "funding": [ 3741 | { 3742 | "url": "https://github.com/sanmai", 3743 | "type": "github" 3744 | } 3745 | ], 3746 | "time": "2024-06-15T03:11:19+00:00" 3747 | }, 3748 | { 3749 | "name": "slevomat/coding-standard", 3750 | "version": "8.15.0", 3751 | "source": { 3752 | "type": "git", 3753 | "url": "https://github.com/slevomat/coding-standard.git", 3754 | "reference": "7d1d957421618a3803b593ec31ace470177d7817" 3755 | }, 3756 | "dist": { 3757 | "type": "zip", 3758 | "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/7d1d957421618a3803b593ec31ace470177d7817", 3759 | "reference": "7d1d957421618a3803b593ec31ace470177d7817", 3760 | "shasum": "" 3761 | }, 3762 | "require": { 3763 | "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", 3764 | "php": "^7.2 || ^8.0", 3765 | "phpstan/phpdoc-parser": "^1.23.1", 3766 | "squizlabs/php_codesniffer": "^3.9.0" 3767 | }, 3768 | "require-dev": { 3769 | "phing/phing": "2.17.4", 3770 | "php-parallel-lint/php-parallel-lint": "1.3.2", 3771 | "phpstan/phpstan": "1.10.60", 3772 | "phpstan/phpstan-deprecation-rules": "1.1.4", 3773 | "phpstan/phpstan-phpunit": "1.3.16", 3774 | "phpstan/phpstan-strict-rules": "1.5.2", 3775 | "phpunit/phpunit": "8.5.21|9.6.8|10.5.11" 3776 | }, 3777 | "type": "phpcodesniffer-standard", 3778 | "extra": { 3779 | "branch-alias": { 3780 | "dev-master": "8.x-dev" 3781 | } 3782 | }, 3783 | "autoload": { 3784 | "psr-4": { 3785 | "SlevomatCodingStandard\\": "SlevomatCodingStandard/" 3786 | } 3787 | }, 3788 | "notification-url": "https://packagist.org/downloads/", 3789 | "license": [ 3790 | "MIT" 3791 | ], 3792 | "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", 3793 | "keywords": [ 3794 | "dev", 3795 | "phpcs" 3796 | ], 3797 | "support": { 3798 | "issues": "https://github.com/slevomat/coding-standard/issues", 3799 | "source": "https://github.com/slevomat/coding-standard/tree/8.15.0" 3800 | }, 3801 | "funding": [ 3802 | { 3803 | "url": "https://github.com/kukulich", 3804 | "type": "github" 3805 | }, 3806 | { 3807 | "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", 3808 | "type": "tidelift" 3809 | } 3810 | ], 3811 | "time": "2024-03-09T15:20:58+00:00" 3812 | }, 3813 | { 3814 | "name": "spatie/array-to-xml", 3815 | "version": "3.3.0", 3816 | "source": { 3817 | "type": "git", 3818 | "url": "https://github.com/spatie/array-to-xml.git", 3819 | "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876" 3820 | }, 3821 | "dist": { 3822 | "type": "zip", 3823 | "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/f56b220fe2db1ade4c88098d83413ebdfc3bf876", 3824 | "reference": "f56b220fe2db1ade4c88098d83413ebdfc3bf876", 3825 | "shasum": "" 3826 | }, 3827 | "require": { 3828 | "ext-dom": "*", 3829 | "php": "^8.0" 3830 | }, 3831 | "require-dev": { 3832 | "mockery/mockery": "^1.2", 3833 | "pestphp/pest": "^1.21", 3834 | "spatie/pest-plugin-snapshots": "^1.1" 3835 | }, 3836 | "type": "library", 3837 | "extra": { 3838 | "branch-alias": { 3839 | "dev-main": "3.x-dev" 3840 | } 3841 | }, 3842 | "autoload": { 3843 | "psr-4": { 3844 | "Spatie\\ArrayToXml\\": "src" 3845 | } 3846 | }, 3847 | "notification-url": "https://packagist.org/downloads/", 3848 | "license": [ 3849 | "MIT" 3850 | ], 3851 | "authors": [ 3852 | { 3853 | "name": "Freek Van der Herten", 3854 | "email": "freek@spatie.be", 3855 | "homepage": "https://freek.dev", 3856 | "role": "Developer" 3857 | } 3858 | ], 3859 | "description": "Convert an array to xml", 3860 | "homepage": "https://github.com/spatie/array-to-xml", 3861 | "keywords": [ 3862 | "array", 3863 | "convert", 3864 | "xml" 3865 | ], 3866 | "support": { 3867 | "source": "https://github.com/spatie/array-to-xml/tree/3.3.0" 3868 | }, 3869 | "funding": [ 3870 | { 3871 | "url": "https://spatie.be/open-source/support-us", 3872 | "type": "custom" 3873 | }, 3874 | { 3875 | "url": "https://github.com/spatie", 3876 | "type": "github" 3877 | } 3878 | ], 3879 | "time": "2024-05-01T10:20:27+00:00" 3880 | }, 3881 | { 3882 | "name": "squizlabs/php_codesniffer", 3883 | "version": "3.10.2", 3884 | "source": { 3885 | "type": "git", 3886 | "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", 3887 | "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" 3888 | }, 3889 | "dist": { 3890 | "type": "zip", 3891 | "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", 3892 | "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", 3893 | "shasum": "" 3894 | }, 3895 | "require": { 3896 | "ext-simplexml": "*", 3897 | "ext-tokenizer": "*", 3898 | "ext-xmlwriter": "*", 3899 | "php": ">=5.4.0" 3900 | }, 3901 | "require-dev": { 3902 | "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" 3903 | }, 3904 | "bin": [ 3905 | "bin/phpcbf", 3906 | "bin/phpcs" 3907 | ], 3908 | "type": "library", 3909 | "extra": { 3910 | "branch-alias": { 3911 | "dev-master": "3.x-dev" 3912 | } 3913 | }, 3914 | "notification-url": "https://packagist.org/downloads/", 3915 | "license": [ 3916 | "BSD-3-Clause" 3917 | ], 3918 | "authors": [ 3919 | { 3920 | "name": "Greg Sherwood", 3921 | "role": "Former lead" 3922 | }, 3923 | { 3924 | "name": "Juliette Reinders Folmer", 3925 | "role": "Current lead" 3926 | }, 3927 | { 3928 | "name": "Contributors", 3929 | "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" 3930 | } 3931 | ], 3932 | "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", 3933 | "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", 3934 | "keywords": [ 3935 | "phpcs", 3936 | "standards", 3937 | "static analysis" 3938 | ], 3939 | "support": { 3940 | "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", 3941 | "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", 3942 | "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", 3943 | "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" 3944 | }, 3945 | "funding": [ 3946 | { 3947 | "url": "https://github.com/PHPCSStandards", 3948 | "type": "github" 3949 | }, 3950 | { 3951 | "url": "https://github.com/jrfnl", 3952 | "type": "github" 3953 | }, 3954 | { 3955 | "url": "https://opencollective.com/php_codesniffer", 3956 | "type": "open_collective" 3957 | } 3958 | ], 3959 | "time": "2024-07-21T23:26:44+00:00" 3960 | }, 3961 | { 3962 | "name": "symfony/console", 3963 | "version": "v6.4.11", 3964 | "source": { 3965 | "type": "git", 3966 | "url": "https://github.com/symfony/console.git", 3967 | "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998" 3968 | }, 3969 | "dist": { 3970 | "type": "zip", 3971 | "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998", 3972 | "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998", 3973 | "shasum": "" 3974 | }, 3975 | "require": { 3976 | "php": ">=8.1", 3977 | "symfony/deprecation-contracts": "^2.5|^3", 3978 | "symfony/polyfill-mbstring": "~1.0", 3979 | "symfony/service-contracts": "^2.5|^3", 3980 | "symfony/string": "^5.4|^6.0|^7.0" 3981 | }, 3982 | "conflict": { 3983 | "symfony/dependency-injection": "<5.4", 3984 | "symfony/dotenv": "<5.4", 3985 | "symfony/event-dispatcher": "<5.4", 3986 | "symfony/lock": "<5.4", 3987 | "symfony/process": "<5.4" 3988 | }, 3989 | "provide": { 3990 | "psr/log-implementation": "1.0|2.0|3.0" 3991 | }, 3992 | "require-dev": { 3993 | "psr/log": "^1|^2|^3", 3994 | "symfony/config": "^5.4|^6.0|^7.0", 3995 | "symfony/dependency-injection": "^5.4|^6.0|^7.0", 3996 | "symfony/event-dispatcher": "^5.4|^6.0|^7.0", 3997 | "symfony/http-foundation": "^6.4|^7.0", 3998 | "symfony/http-kernel": "^6.4|^7.0", 3999 | "symfony/lock": "^5.4|^6.0|^7.0", 4000 | "symfony/messenger": "^5.4|^6.0|^7.0", 4001 | "symfony/process": "^5.4|^6.0|^7.0", 4002 | "symfony/stopwatch": "^5.4|^6.0|^7.0", 4003 | "symfony/var-dumper": "^5.4|^6.0|^7.0" 4004 | }, 4005 | "type": "library", 4006 | "autoload": { 4007 | "psr-4": { 4008 | "Symfony\\Component\\Console\\": "" 4009 | }, 4010 | "exclude-from-classmap": [ 4011 | "/Tests/" 4012 | ] 4013 | }, 4014 | "notification-url": "https://packagist.org/downloads/", 4015 | "license": [ 4016 | "MIT" 4017 | ], 4018 | "authors": [ 4019 | { 4020 | "name": "Fabien Potencier", 4021 | "email": "fabien@symfony.com" 4022 | }, 4023 | { 4024 | "name": "Symfony Community", 4025 | "homepage": "https://symfony.com/contributors" 4026 | } 4027 | ], 4028 | "description": "Eases the creation of beautiful and testable command line interfaces", 4029 | "homepage": "https://symfony.com", 4030 | "keywords": [ 4031 | "cli", 4032 | "command-line", 4033 | "console", 4034 | "terminal" 4035 | ], 4036 | "support": { 4037 | "source": "https://github.com/symfony/console/tree/v6.4.11" 4038 | }, 4039 | "funding": [ 4040 | { 4041 | "url": "https://symfony.com/sponsor", 4042 | "type": "custom" 4043 | }, 4044 | { 4045 | "url": "https://github.com/fabpot", 4046 | "type": "github" 4047 | }, 4048 | { 4049 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4050 | "type": "tidelift" 4051 | } 4052 | ], 4053 | "time": "2024-08-15T22:48:29+00:00" 4054 | }, 4055 | { 4056 | "name": "symfony/deprecation-contracts", 4057 | "version": "v3.5.0", 4058 | "source": { 4059 | "type": "git", 4060 | "url": "https://github.com/symfony/deprecation-contracts.git", 4061 | "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" 4062 | }, 4063 | "dist": { 4064 | "type": "zip", 4065 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", 4066 | "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", 4067 | "shasum": "" 4068 | }, 4069 | "require": { 4070 | "php": ">=8.1" 4071 | }, 4072 | "type": "library", 4073 | "extra": { 4074 | "branch-alias": { 4075 | "dev-main": "3.5-dev" 4076 | }, 4077 | "thanks": { 4078 | "name": "symfony/contracts", 4079 | "url": "https://github.com/symfony/contracts" 4080 | } 4081 | }, 4082 | "autoload": { 4083 | "files": [ 4084 | "function.php" 4085 | ] 4086 | }, 4087 | "notification-url": "https://packagist.org/downloads/", 4088 | "license": [ 4089 | "MIT" 4090 | ], 4091 | "authors": [ 4092 | { 4093 | "name": "Nicolas Grekas", 4094 | "email": "p@tchwork.com" 4095 | }, 4096 | { 4097 | "name": "Symfony Community", 4098 | "homepage": "https://symfony.com/contributors" 4099 | } 4100 | ], 4101 | "description": "A generic function and convention to trigger deprecation notices", 4102 | "homepage": "https://symfony.com", 4103 | "support": { 4104 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" 4105 | }, 4106 | "funding": [ 4107 | { 4108 | "url": "https://symfony.com/sponsor", 4109 | "type": "custom" 4110 | }, 4111 | { 4112 | "url": "https://github.com/fabpot", 4113 | "type": "github" 4114 | }, 4115 | { 4116 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4117 | "type": "tidelift" 4118 | } 4119 | ], 4120 | "time": "2024-04-18T09:32:20+00:00" 4121 | }, 4122 | { 4123 | "name": "symfony/filesystem", 4124 | "version": "v6.4.9", 4125 | "source": { 4126 | "type": "git", 4127 | "url": "https://github.com/symfony/filesystem.git", 4128 | "reference": "b51ef8059159330b74a4d52f68e671033c0fe463" 4129 | }, 4130 | "dist": { 4131 | "type": "zip", 4132 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463", 4133 | "reference": "b51ef8059159330b74a4d52f68e671033c0fe463", 4134 | "shasum": "" 4135 | }, 4136 | "require": { 4137 | "php": ">=8.1", 4138 | "symfony/polyfill-ctype": "~1.8", 4139 | "symfony/polyfill-mbstring": "~1.8" 4140 | }, 4141 | "require-dev": { 4142 | "symfony/process": "^5.4|^6.4|^7.0" 4143 | }, 4144 | "type": "library", 4145 | "autoload": { 4146 | "psr-4": { 4147 | "Symfony\\Component\\Filesystem\\": "" 4148 | }, 4149 | "exclude-from-classmap": [ 4150 | "/Tests/" 4151 | ] 4152 | }, 4153 | "notification-url": "https://packagist.org/downloads/", 4154 | "license": [ 4155 | "MIT" 4156 | ], 4157 | "authors": [ 4158 | { 4159 | "name": "Fabien Potencier", 4160 | "email": "fabien@symfony.com" 4161 | }, 4162 | { 4163 | "name": "Symfony Community", 4164 | "homepage": "https://symfony.com/contributors" 4165 | } 4166 | ], 4167 | "description": "Provides basic utilities for the filesystem", 4168 | "homepage": "https://symfony.com", 4169 | "support": { 4170 | "source": "https://github.com/symfony/filesystem/tree/v6.4.9" 4171 | }, 4172 | "funding": [ 4173 | { 4174 | "url": "https://symfony.com/sponsor", 4175 | "type": "custom" 4176 | }, 4177 | { 4178 | "url": "https://github.com/fabpot", 4179 | "type": "github" 4180 | }, 4181 | { 4182 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4183 | "type": "tidelift" 4184 | } 4185 | ], 4186 | "time": "2024-06-28T09:49:33+00:00" 4187 | }, 4188 | { 4189 | "name": "symfony/finder", 4190 | "version": "v6.4.11", 4191 | "source": { 4192 | "type": "git", 4193 | "url": "https://github.com/symfony/finder.git", 4194 | "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453" 4195 | }, 4196 | "dist": { 4197 | "type": "zip", 4198 | "url": "https://api.github.com/repos/symfony/finder/zipball/d7eb6daf8cd7e9ac4976e9576b32042ef7253453", 4199 | "reference": "d7eb6daf8cd7e9ac4976e9576b32042ef7253453", 4200 | "shasum": "" 4201 | }, 4202 | "require": { 4203 | "php": ">=8.1" 4204 | }, 4205 | "require-dev": { 4206 | "symfony/filesystem": "^6.0|^7.0" 4207 | }, 4208 | "type": "library", 4209 | "autoload": { 4210 | "psr-4": { 4211 | "Symfony\\Component\\Finder\\": "" 4212 | }, 4213 | "exclude-from-classmap": [ 4214 | "/Tests/" 4215 | ] 4216 | }, 4217 | "notification-url": "https://packagist.org/downloads/", 4218 | "license": [ 4219 | "MIT" 4220 | ], 4221 | "authors": [ 4222 | { 4223 | "name": "Fabien Potencier", 4224 | "email": "fabien@symfony.com" 4225 | }, 4226 | { 4227 | "name": "Symfony Community", 4228 | "homepage": "https://symfony.com/contributors" 4229 | } 4230 | ], 4231 | "description": "Finds files and directories via an intuitive fluent interface", 4232 | "homepage": "https://symfony.com", 4233 | "support": { 4234 | "source": "https://github.com/symfony/finder/tree/v6.4.11" 4235 | }, 4236 | "funding": [ 4237 | { 4238 | "url": "https://symfony.com/sponsor", 4239 | "type": "custom" 4240 | }, 4241 | { 4242 | "url": "https://github.com/fabpot", 4243 | "type": "github" 4244 | }, 4245 | { 4246 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4247 | "type": "tidelift" 4248 | } 4249 | ], 4250 | "time": "2024-08-13T14:27:37+00:00" 4251 | }, 4252 | { 4253 | "name": "symfony/polyfill-ctype", 4254 | "version": "v1.31.0", 4255 | "source": { 4256 | "type": "git", 4257 | "url": "https://github.com/symfony/polyfill-ctype.git", 4258 | "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" 4259 | }, 4260 | "dist": { 4261 | "type": "zip", 4262 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", 4263 | "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", 4264 | "shasum": "" 4265 | }, 4266 | "require": { 4267 | "php": ">=7.2" 4268 | }, 4269 | "provide": { 4270 | "ext-ctype": "*" 4271 | }, 4272 | "suggest": { 4273 | "ext-ctype": "For best performance" 4274 | }, 4275 | "type": "library", 4276 | "extra": { 4277 | "thanks": { 4278 | "name": "symfony/polyfill", 4279 | "url": "https://github.com/symfony/polyfill" 4280 | } 4281 | }, 4282 | "autoload": { 4283 | "files": [ 4284 | "bootstrap.php" 4285 | ], 4286 | "psr-4": { 4287 | "Symfony\\Polyfill\\Ctype\\": "" 4288 | } 4289 | }, 4290 | "notification-url": "https://packagist.org/downloads/", 4291 | "license": [ 4292 | "MIT" 4293 | ], 4294 | "authors": [ 4295 | { 4296 | "name": "Gert de Pagter", 4297 | "email": "BackEndTea@gmail.com" 4298 | }, 4299 | { 4300 | "name": "Symfony Community", 4301 | "homepage": "https://symfony.com/contributors" 4302 | } 4303 | ], 4304 | "description": "Symfony polyfill for ctype functions", 4305 | "homepage": "https://symfony.com", 4306 | "keywords": [ 4307 | "compatibility", 4308 | "ctype", 4309 | "polyfill", 4310 | "portable" 4311 | ], 4312 | "support": { 4313 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" 4314 | }, 4315 | "funding": [ 4316 | { 4317 | "url": "https://symfony.com/sponsor", 4318 | "type": "custom" 4319 | }, 4320 | { 4321 | "url": "https://github.com/fabpot", 4322 | "type": "github" 4323 | }, 4324 | { 4325 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4326 | "type": "tidelift" 4327 | } 4328 | ], 4329 | "time": "2024-09-09T11:45:10+00:00" 4330 | }, 4331 | { 4332 | "name": "symfony/polyfill-intl-grapheme", 4333 | "version": "v1.31.0", 4334 | "source": { 4335 | "type": "git", 4336 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 4337 | "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" 4338 | }, 4339 | "dist": { 4340 | "type": "zip", 4341 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", 4342 | "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", 4343 | "shasum": "" 4344 | }, 4345 | "require": { 4346 | "php": ">=7.2" 4347 | }, 4348 | "suggest": { 4349 | "ext-intl": "For best performance" 4350 | }, 4351 | "type": "library", 4352 | "extra": { 4353 | "thanks": { 4354 | "name": "symfony/polyfill", 4355 | "url": "https://github.com/symfony/polyfill" 4356 | } 4357 | }, 4358 | "autoload": { 4359 | "files": [ 4360 | "bootstrap.php" 4361 | ], 4362 | "psr-4": { 4363 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 4364 | } 4365 | }, 4366 | "notification-url": "https://packagist.org/downloads/", 4367 | "license": [ 4368 | "MIT" 4369 | ], 4370 | "authors": [ 4371 | { 4372 | "name": "Nicolas Grekas", 4373 | "email": "p@tchwork.com" 4374 | }, 4375 | { 4376 | "name": "Symfony Community", 4377 | "homepage": "https://symfony.com/contributors" 4378 | } 4379 | ], 4380 | "description": "Symfony polyfill for intl's grapheme_* functions", 4381 | "homepage": "https://symfony.com", 4382 | "keywords": [ 4383 | "compatibility", 4384 | "grapheme", 4385 | "intl", 4386 | "polyfill", 4387 | "portable", 4388 | "shim" 4389 | ], 4390 | "support": { 4391 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" 4392 | }, 4393 | "funding": [ 4394 | { 4395 | "url": "https://symfony.com/sponsor", 4396 | "type": "custom" 4397 | }, 4398 | { 4399 | "url": "https://github.com/fabpot", 4400 | "type": "github" 4401 | }, 4402 | { 4403 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4404 | "type": "tidelift" 4405 | } 4406 | ], 4407 | "time": "2024-09-09T11:45:10+00:00" 4408 | }, 4409 | { 4410 | "name": "symfony/polyfill-intl-normalizer", 4411 | "version": "v1.31.0", 4412 | "source": { 4413 | "type": "git", 4414 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 4415 | "reference": "3833d7255cc303546435cb650316bff708a1c75c" 4416 | }, 4417 | "dist": { 4418 | "type": "zip", 4419 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", 4420 | "reference": "3833d7255cc303546435cb650316bff708a1c75c", 4421 | "shasum": "" 4422 | }, 4423 | "require": { 4424 | "php": ">=7.2" 4425 | }, 4426 | "suggest": { 4427 | "ext-intl": "For best performance" 4428 | }, 4429 | "type": "library", 4430 | "extra": { 4431 | "thanks": { 4432 | "name": "symfony/polyfill", 4433 | "url": "https://github.com/symfony/polyfill" 4434 | } 4435 | }, 4436 | "autoload": { 4437 | "files": [ 4438 | "bootstrap.php" 4439 | ], 4440 | "psr-4": { 4441 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 4442 | }, 4443 | "classmap": [ 4444 | "Resources/stubs" 4445 | ] 4446 | }, 4447 | "notification-url": "https://packagist.org/downloads/", 4448 | "license": [ 4449 | "MIT" 4450 | ], 4451 | "authors": [ 4452 | { 4453 | "name": "Nicolas Grekas", 4454 | "email": "p@tchwork.com" 4455 | }, 4456 | { 4457 | "name": "Symfony Community", 4458 | "homepage": "https://symfony.com/contributors" 4459 | } 4460 | ], 4461 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 4462 | "homepage": "https://symfony.com", 4463 | "keywords": [ 4464 | "compatibility", 4465 | "intl", 4466 | "normalizer", 4467 | "polyfill", 4468 | "portable", 4469 | "shim" 4470 | ], 4471 | "support": { 4472 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" 4473 | }, 4474 | "funding": [ 4475 | { 4476 | "url": "https://symfony.com/sponsor", 4477 | "type": "custom" 4478 | }, 4479 | { 4480 | "url": "https://github.com/fabpot", 4481 | "type": "github" 4482 | }, 4483 | { 4484 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4485 | "type": "tidelift" 4486 | } 4487 | ], 4488 | "time": "2024-09-09T11:45:10+00:00" 4489 | }, 4490 | { 4491 | "name": "symfony/polyfill-mbstring", 4492 | "version": "v1.31.0", 4493 | "source": { 4494 | "type": "git", 4495 | "url": "https://github.com/symfony/polyfill-mbstring.git", 4496 | "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" 4497 | }, 4498 | "dist": { 4499 | "type": "zip", 4500 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", 4501 | "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", 4502 | "shasum": "" 4503 | }, 4504 | "require": { 4505 | "php": ">=7.2" 4506 | }, 4507 | "provide": { 4508 | "ext-mbstring": "*" 4509 | }, 4510 | "suggest": { 4511 | "ext-mbstring": "For best performance" 4512 | }, 4513 | "type": "library", 4514 | "extra": { 4515 | "thanks": { 4516 | "name": "symfony/polyfill", 4517 | "url": "https://github.com/symfony/polyfill" 4518 | } 4519 | }, 4520 | "autoload": { 4521 | "files": [ 4522 | "bootstrap.php" 4523 | ], 4524 | "psr-4": { 4525 | "Symfony\\Polyfill\\Mbstring\\": "" 4526 | } 4527 | }, 4528 | "notification-url": "https://packagist.org/downloads/", 4529 | "license": [ 4530 | "MIT" 4531 | ], 4532 | "authors": [ 4533 | { 4534 | "name": "Nicolas Grekas", 4535 | "email": "p@tchwork.com" 4536 | }, 4537 | { 4538 | "name": "Symfony Community", 4539 | "homepage": "https://symfony.com/contributors" 4540 | } 4541 | ], 4542 | "description": "Symfony polyfill for the Mbstring extension", 4543 | "homepage": "https://symfony.com", 4544 | "keywords": [ 4545 | "compatibility", 4546 | "mbstring", 4547 | "polyfill", 4548 | "portable", 4549 | "shim" 4550 | ], 4551 | "support": { 4552 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" 4553 | }, 4554 | "funding": [ 4555 | { 4556 | "url": "https://symfony.com/sponsor", 4557 | "type": "custom" 4558 | }, 4559 | { 4560 | "url": "https://github.com/fabpot", 4561 | "type": "github" 4562 | }, 4563 | { 4564 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4565 | "type": "tidelift" 4566 | } 4567 | ], 4568 | "time": "2024-09-09T11:45:10+00:00" 4569 | }, 4570 | { 4571 | "name": "symfony/process", 4572 | "version": "v6.4.8", 4573 | "source": { 4574 | "type": "git", 4575 | "url": "https://github.com/symfony/process.git", 4576 | "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5" 4577 | }, 4578 | "dist": { 4579 | "type": "zip", 4580 | "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5", 4581 | "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5", 4582 | "shasum": "" 4583 | }, 4584 | "require": { 4585 | "php": ">=8.1" 4586 | }, 4587 | "type": "library", 4588 | "autoload": { 4589 | "psr-4": { 4590 | "Symfony\\Component\\Process\\": "" 4591 | }, 4592 | "exclude-from-classmap": [ 4593 | "/Tests/" 4594 | ] 4595 | }, 4596 | "notification-url": "https://packagist.org/downloads/", 4597 | "license": [ 4598 | "MIT" 4599 | ], 4600 | "authors": [ 4601 | { 4602 | "name": "Fabien Potencier", 4603 | "email": "fabien@symfony.com" 4604 | }, 4605 | { 4606 | "name": "Symfony Community", 4607 | "homepage": "https://symfony.com/contributors" 4608 | } 4609 | ], 4610 | "description": "Executes commands in sub-processes", 4611 | "homepage": "https://symfony.com", 4612 | "support": { 4613 | "source": "https://github.com/symfony/process/tree/v6.4.8" 4614 | }, 4615 | "funding": [ 4616 | { 4617 | "url": "https://symfony.com/sponsor", 4618 | "type": "custom" 4619 | }, 4620 | { 4621 | "url": "https://github.com/fabpot", 4622 | "type": "github" 4623 | }, 4624 | { 4625 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4626 | "type": "tidelift" 4627 | } 4628 | ], 4629 | "time": "2024-05-31T14:49:08+00:00" 4630 | }, 4631 | { 4632 | "name": "symfony/service-contracts", 4633 | "version": "v3.5.0", 4634 | "source": { 4635 | "type": "git", 4636 | "url": "https://github.com/symfony/service-contracts.git", 4637 | "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" 4638 | }, 4639 | "dist": { 4640 | "type": "zip", 4641 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", 4642 | "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", 4643 | "shasum": "" 4644 | }, 4645 | "require": { 4646 | "php": ">=8.1", 4647 | "psr/container": "^1.1|^2.0", 4648 | "symfony/deprecation-contracts": "^2.5|^3" 4649 | }, 4650 | "conflict": { 4651 | "ext-psr": "<1.1|>=2" 4652 | }, 4653 | "type": "library", 4654 | "extra": { 4655 | "branch-alias": { 4656 | "dev-main": "3.5-dev" 4657 | }, 4658 | "thanks": { 4659 | "name": "symfony/contracts", 4660 | "url": "https://github.com/symfony/contracts" 4661 | } 4662 | }, 4663 | "autoload": { 4664 | "psr-4": { 4665 | "Symfony\\Contracts\\Service\\": "" 4666 | }, 4667 | "exclude-from-classmap": [ 4668 | "/Test/" 4669 | ] 4670 | }, 4671 | "notification-url": "https://packagist.org/downloads/", 4672 | "license": [ 4673 | "MIT" 4674 | ], 4675 | "authors": [ 4676 | { 4677 | "name": "Nicolas Grekas", 4678 | "email": "p@tchwork.com" 4679 | }, 4680 | { 4681 | "name": "Symfony Community", 4682 | "homepage": "https://symfony.com/contributors" 4683 | } 4684 | ], 4685 | "description": "Generic abstractions related to writing services", 4686 | "homepage": "https://symfony.com", 4687 | "keywords": [ 4688 | "abstractions", 4689 | "contracts", 4690 | "decoupling", 4691 | "interfaces", 4692 | "interoperability", 4693 | "standards" 4694 | ], 4695 | "support": { 4696 | "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" 4697 | }, 4698 | "funding": [ 4699 | { 4700 | "url": "https://symfony.com/sponsor", 4701 | "type": "custom" 4702 | }, 4703 | { 4704 | "url": "https://github.com/fabpot", 4705 | "type": "github" 4706 | }, 4707 | { 4708 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4709 | "type": "tidelift" 4710 | } 4711 | ], 4712 | "time": "2024-04-18T09:32:20+00:00" 4713 | }, 4714 | { 4715 | "name": "symfony/string", 4716 | "version": "v6.4.11", 4717 | "source": { 4718 | "type": "git", 4719 | "url": "https://github.com/symfony/string.git", 4720 | "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b" 4721 | }, 4722 | "dist": { 4723 | "type": "zip", 4724 | "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b", 4725 | "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b", 4726 | "shasum": "" 4727 | }, 4728 | "require": { 4729 | "php": ">=8.1", 4730 | "symfony/polyfill-ctype": "~1.8", 4731 | "symfony/polyfill-intl-grapheme": "~1.0", 4732 | "symfony/polyfill-intl-normalizer": "~1.0", 4733 | "symfony/polyfill-mbstring": "~1.0" 4734 | }, 4735 | "conflict": { 4736 | "symfony/translation-contracts": "<2.5" 4737 | }, 4738 | "require-dev": { 4739 | "symfony/error-handler": "^5.4|^6.0|^7.0", 4740 | "symfony/http-client": "^5.4|^6.0|^7.0", 4741 | "symfony/intl": "^6.2|^7.0", 4742 | "symfony/translation-contracts": "^2.5|^3.0", 4743 | "symfony/var-exporter": "^5.4|^6.0|^7.0" 4744 | }, 4745 | "type": "library", 4746 | "autoload": { 4747 | "files": [ 4748 | "Resources/functions.php" 4749 | ], 4750 | "psr-4": { 4751 | "Symfony\\Component\\String\\": "" 4752 | }, 4753 | "exclude-from-classmap": [ 4754 | "/Tests/" 4755 | ] 4756 | }, 4757 | "notification-url": "https://packagist.org/downloads/", 4758 | "license": [ 4759 | "MIT" 4760 | ], 4761 | "authors": [ 4762 | { 4763 | "name": "Nicolas Grekas", 4764 | "email": "p@tchwork.com" 4765 | }, 4766 | { 4767 | "name": "Symfony Community", 4768 | "homepage": "https://symfony.com/contributors" 4769 | } 4770 | ], 4771 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 4772 | "homepage": "https://symfony.com", 4773 | "keywords": [ 4774 | "grapheme", 4775 | "i18n", 4776 | "string", 4777 | "unicode", 4778 | "utf-8", 4779 | "utf8" 4780 | ], 4781 | "support": { 4782 | "source": "https://github.com/symfony/string/tree/v6.4.11" 4783 | }, 4784 | "funding": [ 4785 | { 4786 | "url": "https://symfony.com/sponsor", 4787 | "type": "custom" 4788 | }, 4789 | { 4790 | "url": "https://github.com/fabpot", 4791 | "type": "github" 4792 | }, 4793 | { 4794 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 4795 | "type": "tidelift" 4796 | } 4797 | ], 4798 | "time": "2024-08-12T09:55:28+00:00" 4799 | }, 4800 | { 4801 | "name": "thecodingmachine/safe", 4802 | "version": "v2.5.0", 4803 | "source": { 4804 | "type": "git", 4805 | "url": "https://github.com/thecodingmachine/safe.git", 4806 | "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" 4807 | }, 4808 | "dist": { 4809 | "type": "zip", 4810 | "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", 4811 | "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", 4812 | "shasum": "" 4813 | }, 4814 | "require": { 4815 | "php": "^8.0" 4816 | }, 4817 | "require-dev": { 4818 | "phpstan/phpstan": "^1.5", 4819 | "phpunit/phpunit": "^9.5", 4820 | "squizlabs/php_codesniffer": "^3.2", 4821 | "thecodingmachine/phpstan-strict-rules": "^1.0" 4822 | }, 4823 | "type": "library", 4824 | "extra": { 4825 | "branch-alias": { 4826 | "dev-master": "2.2.x-dev" 4827 | } 4828 | }, 4829 | "autoload": { 4830 | "files": [ 4831 | "deprecated/apc.php", 4832 | "deprecated/array.php", 4833 | "deprecated/datetime.php", 4834 | "deprecated/libevent.php", 4835 | "deprecated/misc.php", 4836 | "deprecated/password.php", 4837 | "deprecated/mssql.php", 4838 | "deprecated/stats.php", 4839 | "deprecated/strings.php", 4840 | "lib/special_cases.php", 4841 | "deprecated/mysqli.php", 4842 | "generated/apache.php", 4843 | "generated/apcu.php", 4844 | "generated/array.php", 4845 | "generated/bzip2.php", 4846 | "generated/calendar.php", 4847 | "generated/classobj.php", 4848 | "generated/com.php", 4849 | "generated/cubrid.php", 4850 | "generated/curl.php", 4851 | "generated/datetime.php", 4852 | "generated/dir.php", 4853 | "generated/eio.php", 4854 | "generated/errorfunc.php", 4855 | "generated/exec.php", 4856 | "generated/fileinfo.php", 4857 | "generated/filesystem.php", 4858 | "generated/filter.php", 4859 | "generated/fpm.php", 4860 | "generated/ftp.php", 4861 | "generated/funchand.php", 4862 | "generated/gettext.php", 4863 | "generated/gmp.php", 4864 | "generated/gnupg.php", 4865 | "generated/hash.php", 4866 | "generated/ibase.php", 4867 | "generated/ibmDb2.php", 4868 | "generated/iconv.php", 4869 | "generated/image.php", 4870 | "generated/imap.php", 4871 | "generated/info.php", 4872 | "generated/inotify.php", 4873 | "generated/json.php", 4874 | "generated/ldap.php", 4875 | "generated/libxml.php", 4876 | "generated/lzf.php", 4877 | "generated/mailparse.php", 4878 | "generated/mbstring.php", 4879 | "generated/misc.php", 4880 | "generated/mysql.php", 4881 | "generated/network.php", 4882 | "generated/oci8.php", 4883 | "generated/opcache.php", 4884 | "generated/openssl.php", 4885 | "generated/outcontrol.php", 4886 | "generated/pcntl.php", 4887 | "generated/pcre.php", 4888 | "generated/pgsql.php", 4889 | "generated/posix.php", 4890 | "generated/ps.php", 4891 | "generated/pspell.php", 4892 | "generated/readline.php", 4893 | "generated/rpminfo.php", 4894 | "generated/rrd.php", 4895 | "generated/sem.php", 4896 | "generated/session.php", 4897 | "generated/shmop.php", 4898 | "generated/sockets.php", 4899 | "generated/sodium.php", 4900 | "generated/solr.php", 4901 | "generated/spl.php", 4902 | "generated/sqlsrv.php", 4903 | "generated/ssdeep.php", 4904 | "generated/ssh2.php", 4905 | "generated/stream.php", 4906 | "generated/strings.php", 4907 | "generated/swoole.php", 4908 | "generated/uodbc.php", 4909 | "generated/uopz.php", 4910 | "generated/url.php", 4911 | "generated/var.php", 4912 | "generated/xdiff.php", 4913 | "generated/xml.php", 4914 | "generated/xmlrpc.php", 4915 | "generated/yaml.php", 4916 | "generated/yaz.php", 4917 | "generated/zip.php", 4918 | "generated/zlib.php" 4919 | ], 4920 | "classmap": [ 4921 | "lib/DateTime.php", 4922 | "lib/DateTimeImmutable.php", 4923 | "lib/Exceptions/", 4924 | "deprecated/Exceptions/", 4925 | "generated/Exceptions/" 4926 | ] 4927 | }, 4928 | "notification-url": "https://packagist.org/downloads/", 4929 | "license": [ 4930 | "MIT" 4931 | ], 4932 | "description": "PHP core functions that throw exceptions instead of returning FALSE on error", 4933 | "support": { 4934 | "issues": "https://github.com/thecodingmachine/safe/issues", 4935 | "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" 4936 | }, 4937 | "time": "2023-04-05T11:54:14+00:00" 4938 | }, 4939 | { 4940 | "name": "vimeo/psalm", 4941 | "version": "5.26.1", 4942 | "source": { 4943 | "type": "git", 4944 | "url": "https://github.com/vimeo/psalm.git", 4945 | "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0" 4946 | }, 4947 | "dist": { 4948 | "type": "zip", 4949 | "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", 4950 | "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0", 4951 | "shasum": "" 4952 | }, 4953 | "require": { 4954 | "amphp/amp": "^2.4.2", 4955 | "amphp/byte-stream": "^1.5", 4956 | "composer-runtime-api": "^2", 4957 | "composer/semver": "^1.4 || ^2.0 || ^3.0", 4958 | "composer/xdebug-handler": "^2.0 || ^3.0", 4959 | "dnoegel/php-xdg-base-dir": "^0.1.1", 4960 | "ext-ctype": "*", 4961 | "ext-dom": "*", 4962 | "ext-json": "*", 4963 | "ext-libxml": "*", 4964 | "ext-mbstring": "*", 4965 | "ext-simplexml": "*", 4966 | "ext-tokenizer": "*", 4967 | "felixfbecker/advanced-json-rpc": "^3.1", 4968 | "felixfbecker/language-server-protocol": "^1.5.2", 4969 | "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", 4970 | "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", 4971 | "nikic/php-parser": "^4.17", 4972 | "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", 4973 | "sebastian/diff": "^4.0 || ^5.0 || ^6.0", 4974 | "spatie/array-to-xml": "^2.17.0 || ^3.0", 4975 | "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0", 4976 | "symfony/filesystem": "^5.4 || ^6.0 || ^7.0" 4977 | }, 4978 | "conflict": { 4979 | "nikic/php-parser": "4.17.0" 4980 | }, 4981 | "provide": { 4982 | "psalm/psalm": "self.version" 4983 | }, 4984 | "require-dev": { 4985 | "amphp/phpunit-util": "^2.0", 4986 | "bamarni/composer-bin-plugin": "^1.4", 4987 | "brianium/paratest": "^6.9", 4988 | "ext-curl": "*", 4989 | "mockery/mockery": "^1.5", 4990 | "nunomaduro/mock-final-classes": "^1.1", 4991 | "php-parallel-lint/php-parallel-lint": "^1.2", 4992 | "phpstan/phpdoc-parser": "^1.6", 4993 | "phpunit/phpunit": "^9.6", 4994 | "psalm/plugin-mockery": "^1.1", 4995 | "psalm/plugin-phpunit": "^0.18", 4996 | "slevomat/coding-standard": "^8.4", 4997 | "squizlabs/php_codesniffer": "^3.6", 4998 | "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0" 4999 | }, 5000 | "suggest": { 5001 | "ext-curl": "In order to send data to shepherd", 5002 | "ext-igbinary": "^2.0.5 is required, used to serialize caching data" 5003 | }, 5004 | "bin": [ 5005 | "psalm", 5006 | "psalm-language-server", 5007 | "psalm-plugin", 5008 | "psalm-refactor", 5009 | "psalter" 5010 | ], 5011 | "type": "project", 5012 | "extra": { 5013 | "branch-alias": { 5014 | "dev-master": "5.x-dev", 5015 | "dev-4.x": "4.x-dev", 5016 | "dev-3.x": "3.x-dev", 5017 | "dev-2.x": "2.x-dev", 5018 | "dev-1.x": "1.x-dev" 5019 | } 5020 | }, 5021 | "autoload": { 5022 | "psr-4": { 5023 | "Psalm\\": "src/Psalm/" 5024 | } 5025 | }, 5026 | "notification-url": "https://packagist.org/downloads/", 5027 | "license": [ 5028 | "MIT" 5029 | ], 5030 | "authors": [ 5031 | { 5032 | "name": "Matthew Brown" 5033 | } 5034 | ], 5035 | "description": "A static analysis tool for finding errors in PHP applications", 5036 | "keywords": [ 5037 | "code", 5038 | "inspection", 5039 | "php", 5040 | "static analysis" 5041 | ], 5042 | "support": { 5043 | "docs": "https://psalm.dev/docs", 5044 | "issues": "https://github.com/vimeo/psalm/issues", 5045 | "source": "https://github.com/vimeo/psalm" 5046 | }, 5047 | "time": "2024-09-08T18:53:08+00:00" 5048 | }, 5049 | { 5050 | "name": "webmozart/assert", 5051 | "version": "1.11.0", 5052 | "source": { 5053 | "type": "git", 5054 | "url": "https://github.com/webmozarts/assert.git", 5055 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" 5056 | }, 5057 | "dist": { 5058 | "type": "zip", 5059 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", 5060 | "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", 5061 | "shasum": "" 5062 | }, 5063 | "require": { 5064 | "ext-ctype": "*", 5065 | "php": "^7.2 || ^8.0" 5066 | }, 5067 | "conflict": { 5068 | "phpstan/phpstan": "<0.12.20", 5069 | "vimeo/psalm": "<4.6.1 || 4.6.2" 5070 | }, 5071 | "require-dev": { 5072 | "phpunit/phpunit": "^8.5.13" 5073 | }, 5074 | "type": "library", 5075 | "extra": { 5076 | "branch-alias": { 5077 | "dev-master": "1.10-dev" 5078 | } 5079 | }, 5080 | "autoload": { 5081 | "psr-4": { 5082 | "Webmozart\\Assert\\": "src/" 5083 | } 5084 | }, 5085 | "notification-url": "https://packagist.org/downloads/", 5086 | "license": [ 5087 | "MIT" 5088 | ], 5089 | "authors": [ 5090 | { 5091 | "name": "Bernhard Schussek", 5092 | "email": "bschussek@gmail.com" 5093 | } 5094 | ], 5095 | "description": "Assertions to validate method input/output with nice error messages.", 5096 | "keywords": [ 5097 | "assert", 5098 | "check", 5099 | "validate" 5100 | ], 5101 | "support": { 5102 | "issues": "https://github.com/webmozarts/assert/issues", 5103 | "source": "https://github.com/webmozarts/assert/tree/1.11.0" 5104 | }, 5105 | "time": "2022-06-03T18:03:27+00:00" 5106 | } 5107 | ], 5108 | "aliases": [], 5109 | "minimum-stability": "stable", 5110 | "stability-flags": [], 5111 | "prefer-stable": false, 5112 | "prefer-lowest": false, 5113 | "platform": { 5114 | "php": "~8.1.0 || ~8.2.0", 5115 | "ext-json": "*" 5116 | }, 5117 | "platform-dev": [], 5118 | "platform-overrides": { 5119 | "php": "8.1.99" 5120 | }, 5121 | "plugin-api-version": "2.6.0" 5122 | } 5123 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "local>Ocramius/.github:renovate-config" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /src/CollectTestExecutionMemoryFootprints.php: -------------------------------------------------------------------------------- 1 | > */ 40 | private array $preTestMemoryUsages = []; 41 | 42 | /** @var array> */ 43 | private array $postTestMemoryUsages = []; 44 | 45 | public function startTestSuite(TestSuite $suite): void 46 | { 47 | $suite->addTest(new EmptyBaselineMemoryUsageTest(EmptyBaselineMemoryUsageTest::TEST_METHOD)); 48 | } 49 | 50 | public function executeBeforeTest(string $test): void 51 | { 52 | gc_collect_cycles(); 53 | 54 | $this->preTestMemoryUsages[$test][] = memory_get_usage(); 55 | } 56 | 57 | public function executeAfterSuccessfulTest(string $test, float $time): void 58 | { 59 | gc_collect_cycles(); 60 | 61 | $this->postTestMemoryUsages[$test][] = memory_get_usage(); 62 | } 63 | 64 | public function executeAfterLastTest(): void 65 | { 66 | if ( 67 | ! ( 68 | array_key_exists(EmptyBaselineMemoryUsageTest::class . '::' . EmptyBaselineMemoryUsageTest::TEST_METHOD, $this->preTestMemoryUsages) 69 | && array_key_exists(EmptyBaselineMemoryUsageTest::class . '::' . EmptyBaselineMemoryUsageTest::TEST_METHOD, $this->postTestMemoryUsages) 70 | ) 71 | ) { 72 | throw new Exception('Could not find baseline test: impossible to determine PHPUnit base memory overhead'); 73 | } 74 | 75 | $baselineMemoryUsage = MeasuredBaselineTestMemoryLeak::fromBaselineTestMemoryUsages( 76 | $this->preTestMemoryUsages[EmptyBaselineMemoryUsageTest::class . '::' . EmptyBaselineMemoryUsageTest::TEST_METHOD], 77 | $this->postTestMemoryUsages[EmptyBaselineMemoryUsageTest::class . '::' . EmptyBaselineMemoryUsageTest::TEST_METHOD], 78 | ); 79 | 80 | unset( 81 | $this->preTestMemoryUsages[EmptyBaselineMemoryUsageTest::class . '::' . EmptyBaselineMemoryUsageTest::TEST_METHOD], 82 | $this->postTestMemoryUsages[EmptyBaselineMemoryUsageTest::class . '::' . EmptyBaselineMemoryUsageTest::TEST_METHOD], 83 | ); 84 | 85 | $successfullyExecutedTests = array_intersect_key($this->preTestMemoryUsages, $this->postTestMemoryUsages); 86 | 87 | $memoryUsages = array_combine( 88 | array_keys($successfullyExecutedTests), 89 | array_map( 90 | [MeasuredTestRunMemoryLeak::class, 'fromTestMemoryUsages'], 91 | $successfullyExecutedTests, 92 | $this->postTestMemoryUsages, 93 | ), 94 | ); 95 | 96 | $leaks = array_filter(array_map(static function (MeasuredTestRunMemoryLeak $profile) use ($baselineMemoryUsage): bool { 97 | return $profile->leaksMemory($baselineMemoryUsage); 98 | }, $memoryUsages)); 99 | 100 | if ($leaks !== []) { 101 | throw new Exception(sprintf( 102 | "The following test produced memory leaks:\n * %s\n", 103 | implode("\n * ", array_keys($leaks)), 104 | )); 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/EmptyBaselineMemoryUsageTest.php: -------------------------------------------------------------------------------- 1 | addToAssertionCount(self::ASSERTION_COUNT); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/MeasuredBaselineTestMemoryLeak.php: -------------------------------------------------------------------------------- 1 | $baselineTestRunsMemoryLeaks the amount of memory consumed for running the 34 | * baseline test, usually caused by collecting 35 | * stats about it or similar state, retained by 36 | * the test runner and its plugins 37 | */ 38 | private function __construct(private readonly array $baselineTestRunsMemoryLeaks) 39 | { 40 | } 41 | 42 | /** 43 | * @param list $preBaselineTestMemoryUsages 44 | * @param list $postBaselineTestMemoryUsages 45 | */ 46 | public static function fromBaselineTestMemoryUsages( 47 | array $preBaselineTestMemoryUsages, 48 | array $postBaselineTestMemoryUsages, 49 | ): self { 50 | if (count($preBaselineTestMemoryUsages) !== count($postBaselineTestMemoryUsages)) { 51 | throw new Exception('Pre- and post- baseline test run collected memory usages don\'t match in number'); 52 | } 53 | 54 | $memoryUsages = array_map(static function (int $beforeRun, int $afterRun): int { 55 | return $afterRun - $beforeRun; 56 | }, $preBaselineTestMemoryUsages, $postBaselineTestMemoryUsages); 57 | 58 | // Note: profile 0 is discarded, as it may contain autoloading and other static test suite initialisation state 59 | $relevantMemoryUsages = array_slice($memoryUsages, 1); 60 | 61 | $nonNegativeMemoryUsages = array_filter( 62 | $relevantMemoryUsages, 63 | static function (int $memoryUsage): bool { 64 | return $memoryUsage >= 0; 65 | }, 66 | ); 67 | 68 | if (count($nonNegativeMemoryUsages) < 2) { 69 | throw new Exception(sprintf( 70 | 'At least 3 baseline test run memory profiles are required, %d given', 71 | count($nonNegativeMemoryUsages) + 1, 72 | )); 73 | } 74 | 75 | if ( 76 | array_filter(array_count_values($nonNegativeMemoryUsages), static function (int $count): bool { 77 | return $count > 1; 78 | }) === [] 79 | ) { 80 | // @TODO good enough for detecting standard deviation for now, I guess? :| 81 | throw new Exception(sprintf( 82 | 'Very inconsistent baseline memory usage profiles: could not find two equal values in profile %s', 83 | json_encode($memoryUsages, JSON_THROW_ON_ERROR), 84 | )); 85 | } 86 | 87 | return new self(array_values($nonNegativeMemoryUsages)); 88 | } 89 | 90 | public function lessThan(int $testRunMemoryLeak): bool 91 | { 92 | return array_sum($this->baselineTestRunsMemoryLeaks) / count($this->baselineTestRunsMemoryLeaks) < $testRunMemoryLeak; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/MeasuredTestRunMemoryLeak.php: -------------------------------------------------------------------------------- 1 | $memoryUsages */ 24 | private function __construct(private readonly array $memoryUsages) 25 | { 26 | } 27 | 28 | /** 29 | * @param list $preRunMemoryUsages 30 | * @param list $postRunMemoryUsages 31 | */ 32 | public static function fromTestMemoryUsages( 33 | array $preRunMemoryUsages, 34 | array $postRunMemoryUsages, 35 | ): self { 36 | $snapshotsCount = min(count($preRunMemoryUsages), count($postRunMemoryUsages)); 37 | 38 | $results = array_map(static function (int $beforeRun, int $afterRun): int { 39 | return $afterRun - $beforeRun; 40 | }, array_slice($preRunMemoryUsages, 0, $snapshotsCount), array_slice($postRunMemoryUsages, 0, $snapshotsCount)); 41 | 42 | assert($results !== []); 43 | 44 | return new self($results); 45 | } 46 | 47 | public function leaksMemory(MeasuredBaselineTestMemoryLeak $baseline): bool 48 | { 49 | // If at least one of the runs does not leak memory, then the leak does not come from inside the test, 50 | // but from the test runner noise. This is naive, but also an acceptable threshold for most test suites 51 | return array_filter(array_map( 52 | static function (int $memoryUsage) use ($baseline): bool { 53 | return ! $baseline->lessThan($memoryUsage); 54 | }, 55 | $this->memoryUsages, 56 | )) === []; 57 | } 58 | } 59 | --------------------------------------------------------------------------------