├── .github ├── dependabot.yml └── workflows │ └── ci.yml ├── LICENSE ├── README.md ├── bin └── php-semver-checker-git ├── box.json ├── composer.json ├── composer.lock └── src └── PHPSemVerCheckerGit ├── Console ├── Application.php └── Command │ ├── BaseCommand.php │ ├── CompareCommand.php │ └── SuggestCommand.php ├── Filter └── SourceFilter.php ├── ProcessedFileList.php ├── Reporter └── JsonReporter.php ├── Repository └── Git.php └── SourceFileProcessor.php /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "composer" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: Continuous integration 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | fail-fast: true 10 | matrix: 11 | php: [7.3, 7.4, 8.0, 8.1] 12 | stability: [prefer-lowest, prefer-stable] 13 | 14 | name: PHP ${{ matrix.php }} - ${{ matrix.stability }} 15 | 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v3 19 | with: 20 | fetch-depth: 0 21 | 22 | - name: Setup PHP 23 | uses: shivammathur/setup-php@v2 24 | with: 25 | php-version: ${{ matrix.php }} 26 | tools: composer:v2 27 | coverage: xdebug 28 | 29 | - name: Install dependencies 30 | uses: nick-invision/retry@v2 31 | env: 32 | COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.COMPOSER_GITHUB_TOKEN }}"}}' 33 | with: 34 | timeout_minutes: 5 35 | max_attempts: 5 36 | command: | 37 | composer update --${{ matrix.stability }} --prefer-dist --no-interaction --no-progress 38 | # revert updated composer.lock 39 | git checkout composer.lock 40 | 41 | - name: Run tests 42 | run: php vendor/bin/phpunit 43 | 44 | - name: Submit code coverage 45 | uses: codecov/codecov-action@v3 46 | 47 | - name: Evaluate semantic versioning 48 | run: php bin/php-semver-checker-git suggest --allow-detached -vvv --details --include-before=src --include-after=src 49 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) <2015> 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 13 | all 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 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PHP Semantic Versioning Checker for `git` 2 | 3 | [![License](https://poser.pugx.org/tomzx/php-semver-checker-git/license.svg)](https://packagist.org/packages/tomzx/php-semver-checker-git) 4 | [![Latest Stable Version](https://poser.pugx.org/tomzx/php-semver-checker-git/v/stable.svg)](https://packagist.org/packages/tomzx/php-semver-checker-git) 5 | [![Latest Unstable Version](https://poser.pugx.org/tomzx/php-semver-checker-git/v/unstable.svg)](https://packagist.org/packages/tomzx/php-semver-checker-git) 6 | [![Build Status](https://img.shields.io/github/workflow/status/tomzx/php-semver-checker-git/Continuous%20integration.svg)](https://github.com/tomzx/php-semver-checker-git/actions?query=workflow%3A%22Continuous+integration%22) 7 | [![Code Coverage](https://img.shields.io/codecov/c/github/tomzx/php-semver-checker-git)](https://app.codecov.io/gh/tomzx/php-semver-checker-git/) 8 | [![Total Downloads](https://img.shields.io/packagist/dt/tomzx/php-semver-checker-git.svg)](https://packagist.org/packages/tomzx/php-semver-checker-git) 9 | 10 | PHP Semantic Versioning Checker for `git` is a console/library which allows you to inspect a set of before and after source code using GIT. 11 | 12 | The command line utility will use an existing `git` repository to compare to changesets using anything `git checkout` would accept (sha1, branch, tag). It will checkout in `detached` mode in order not to pollute your list of branches. 13 | 14 | **Note** It is strongly suggested you do not run this directly on any repository you do not want to lose. Make a copy of it beforehand and run `php-semver-checker-git` on that copy instead. 15 | 16 | ## Getting started 17 | 18 | As this is still an alpha package, it is not suggested to include `php-semver-checker-git` directly in your composer.json. There are however a couple ways to use the tool: 19 | 20 | 1. **Preferred method** Download the [latest .phar build](https://psvcg.coreteks.org/php-semver-checker-git.phar). Note that the .phar build is generally less bleeding edge than the following methods. 21 | 2. `php composer.phar create-project tomzx/php-semver-checker-git --stability=dev` will clone to a new php-semver-checker-git folder in your current working directory 22 | 3. `git clone https://github.com/tomzx/php-semver-checker-git.git` and `php composer.phar install` in the newly cloned directory. 23 | 24 | See the example section for examples of how to use the tool. 25 | 26 | ### Building `php-semver-checker-git.phar` 27 | First, make sure you have [box](https://github.com/box-project/box2) installed. Then, in the base directory, you can run the following command which will generate the `php-semver-checker-git.phar` file. 28 | 29 | ```bash 30 | box build 31 | ``` 32 | 33 | ### Using `php-semver-checker-git` with `GitHub actions` 34 | 35 | It is very easy to add `php-semver-checker-git` to your build process and to get a nice report you can check in the `GitHub actions` logs. 36 | In a file under `.github/workflows/`, add the following: 37 | 38 | ```yaml 39 | name: Continuous integration 40 | 41 | on: [push] 42 | 43 | jobs: 44 | build: 45 | runs-on: ubuntu-latest 46 | 47 | steps: 48 | - name: Checkout code 49 | uses: actions/checkout@v2 50 | with: 51 | fetch-depth: 0 52 | 53 | - name: Setup PHP 54 | uses: shivammathur/setup-php@v2 55 | with: 56 | php-version: ${{ matrix.php }} 57 | tools: composer:v2 58 | coverage: xdebug 59 | 60 | # Your own CI configuration goes here 61 | 62 | - name: Evaluate semantic versioning 63 | run: | 64 | wget https://psvcg.coreteks.org/php-semver-checker-git.phar 65 | php php-semver-checker-git.phar suggest -vvv --include-before=src --include-after=src --details --allow-detached 66 | ``` 67 | 68 | In order to simplify the above call to `php-semver-checker-git`, we suggest you create a `php-semver-checker-git.yml` configuration file at the root of your project. In it, you can put the following: 69 | 70 | ```yml 71 | allow-detached: true 72 | details: true 73 | include-before: src 74 | include-after: src 75 | ``` 76 | 77 | With this configuration file, you can update the configuration file created previously: 78 | 79 | Before: 80 | ```yaml 81 | # Your own CI configuration goes here 82 | 83 | - name: Evaluate semantic versioning 84 | run: | 85 | wget https://psvcg.coreteks.org/php-semver-checker-git.phar 86 | php php-semver-checker-git.phar suggest -vvv --include-before=src --include-after=src --details --allow-detached 87 | ``` 88 | 89 | After: 90 | ```yaml 91 | # Your own CI configuration goes here 92 | 93 | - name: Evaluate semantic versioning 94 | run: | 95 | wget https://psvcg.coreteks.org/php-semver-checker-git.phar 96 | php php-semver-checker-git.phar suggest -vvv 97 | ``` 98 | 99 | ## Example 100 | 101 | ### Compare two commits (without semantic versioning) 102 | 103 | ```bash 104 | # arguments are: before-commit/branch/tag after-commit/branch/tag 105 | php bin/php-semver-checker-git compare v1.6.4 v2.0.0 --include-before=src --include-after=src 106 | ``` 107 | 108 | ### Compare HEAD against your latest semantic version tag 109 | 110 | ```bash 111 | php bin/php-semver-checker-git suggest --allow-detached --include-before=src --include-after=src 112 | ``` 113 | 114 | Note: `--allow-detached` is very useful when you are running this command on [`GitHub actions`](https://github.com/features/actions) or any other continuous integration provider. It is necessary when a checkout is done on a particular commit, which makes `HEAD` become `detached`. If this option is not passed to the command, it will abort. This is done because it is impossible to revert the original `detached` branch when the `suggest` command completes. 115 | 116 | ### Compare HEAD against a specific tag constraint 117 | 118 | ```bash 119 | php bin/php-semver-checker-git suggest --allow-detached --include-before=src --include-after=src --tag=~5.0 120 | ``` 121 | 122 | Note: `--tag` supports any semantic versioning constraint such as `<`, `<=`, `>=`, '>', `~x.y.z`, `^x.y.z` `x.y.*`. 123 | 124 | ## License 125 | 126 | The code is licensed under the [MIT license](https://choosealicense.com/licenses/mit/). See [LICENSE](LICENSE). 127 | -------------------------------------------------------------------------------- /bin/php-semver-checker-git: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | run(new PHPSemVerChecker\Console\InspectableArgvInput()); 29 | -------------------------------------------------------------------------------- /box.json: -------------------------------------------------------------------------------- 1 | { 2 | "alias": "php-semver-checker-git.phar", 3 | "compactors": ["Herrera\\Box\\Compactor\\Php"], 4 | "compression": "GZ", 5 | "directories": ["src"], 6 | "files": ["LICENSE"], 7 | "finder": [ 8 | { 9 | "name": "*.php", 10 | "exclude": ["test", "tests", "Tests"], 11 | "in": "vendor" 12 | } 13 | ], 14 | "git-version": "package_version", 15 | "main": "bin/php-semver-checker-git", 16 | "output": "php-semver-checker-git.phar", 17 | "stub": true 18 | } 19 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tomzx/php-semver-checker-git", 3 | "description": "PHP Semantic Versioning Checker for GIT", 4 | "type": "library", 5 | "keywords": [ 6 | "semantic versioning", 7 | "semver", 8 | "checker", 9 | "git" 10 | ], 11 | "homepage": "https://github.com/tomzx/php-semver-checker-git", 12 | "license": "MIT", 13 | "authors": [ 14 | { 15 | "name": "Tom Rochette", 16 | "email": "tom@tomrochette.com", 17 | "homepage": "https://www.tomrochette.com" 18 | } 19 | ], 20 | "support": { 21 | "issues": "https://github.com/tomzx/php-semver-checker-git/issues" 22 | }, 23 | "repositories": [ 24 | { 25 | "type": "vcs", 26 | "url": "https://github.com/tomzx/gitter" 27 | } 28 | ], 29 | "require": { 30 | "php": ">=7.3", 31 | "klaussilveira/gitter": "dev-php-semver-checker", 32 | "symfony/console": "^4.4|^5.1", 33 | "tomzx/php-semver-checker": "^0.15.1", 34 | "vierbergenlars/php-semver": "^3.0.2" 35 | }, 36 | "require-dev": { 37 | "mockery/mockery": "^1.4.4", 38 | "phpunit/phpunit": "^9.5.10" 39 | }, 40 | "bin": [ 41 | "bin/php-semver-checker-git" 42 | ], 43 | "autoload": { 44 | "psr-4": { 45 | "PHPSemVerCheckerGit\\": "src/PHPSemVerCheckerGit" 46 | } 47 | }, 48 | "autoload-dev": { 49 | "psr-4": { 50 | "PHPSemVerCheckerGit\\Tests\\": "tests/PHPSemVerCheckerGit" 51 | } 52 | }, 53 | "config": { 54 | "platform": { 55 | "php": "7.3.0" 56 | } 57 | }, 58 | "extra": { 59 | "branch-alias": { 60 | "dev-master": "0.9-dev" 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /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": "c50b70b32d18c7266ba9b0ed73d11406", 8 | "packages": [ 9 | { 10 | "name": "hassankhan/config", 11 | "version": "3.0.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/hassankhan/config.git", 15 | "reference": "a3f02c5158d0a772d242ffd377657793c08cc0c6" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/hassankhan/config/zipball/a3f02c5158d0a772d242ffd377657793c08cc0c6", 20 | "reference": "a3f02c5158d0a772d242ffd377657793c08cc0c6", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.5.9" 25 | }, 26 | "require-dev": { 27 | "phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.5 || ~7.5 || ~8.5", 28 | "scrutinizer/ocular": "~1.1", 29 | "squizlabs/php_codesniffer": "~2.2", 30 | "symfony/yaml": "~3.4", 31 | "yoast/phpunit-polyfills": "^1.0" 32 | }, 33 | "suggest": { 34 | "symfony/yaml": "~3.4" 35 | }, 36 | "type": "library", 37 | "autoload": { 38 | "psr-4": { 39 | "Noodlehaus\\": "src" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "MIT" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Hassan Khan", 49 | "homepage": "http://hassankhan.me/", 50 | "role": "Developer" 51 | } 52 | ], 53 | "description": "Lightweight configuration file loader that supports PHP, INI, XML, JSON, and YAML files", 54 | "homepage": "http://hassankhan.me/config/", 55 | "keywords": [ 56 | "config", 57 | "configuration", 58 | "ini", 59 | "json", 60 | "microphp", 61 | "unframework", 62 | "xml", 63 | "yaml", 64 | "yml" 65 | ], 66 | "support": { 67 | "issues": "https://github.com/hassankhan/config/issues", 68 | "source": "https://github.com/hassankhan/config/tree/3.0.0" 69 | }, 70 | "time": "2021-12-30T16:38:05+00:00" 71 | }, 72 | { 73 | "name": "klaussilveira/gitter", 74 | "version": "dev-php-semver-checker", 75 | "source": { 76 | "type": "git", 77 | "url": "https://github.com/tomzx/gitter.git", 78 | "reference": "47ed3833f61c161cba86a38c555ac9cf52d96eab" 79 | }, 80 | "dist": { 81 | "type": "zip", 82 | "url": "https://api.github.com/repos/tomzx/gitter/zipball/47ed3833f61c161cba86a38c555ac9cf52d96eab", 83 | "reference": "47ed3833f61c161cba86a38c555ac9cf52d96eab", 84 | "shasum": "" 85 | }, 86 | "require": { 87 | "php": ">=7.3", 88 | "symfony/process": "^4.2||^5.0" 89 | }, 90 | "require-dev": { 91 | "mockery/mockery": "^1.4.4", 92 | "phpunit/phpunit": "^9.5.10", 93 | "symfony/filesystem": "^5.0" 94 | }, 95 | "default-branch": true, 96 | "type": "library", 97 | "autoload": { 98 | "psr-0": { 99 | "Gitter": "lib/" 100 | } 101 | }, 102 | "license": [ 103 | "BSD-2-Clause" 104 | ], 105 | "authors": [ 106 | { 107 | "name": "Klaus Silveira", 108 | "email": "klaussilveira@php.net", 109 | "homepage": "http://www.klaussilveira.com/", 110 | "role": "Developer" 111 | } 112 | ], 113 | "description": "Gitter allows you to interact in an object oriented manner with Git repositories.", 114 | "homepage": "https://github.com/klaussilveira/gitter", 115 | "keywords": [ 116 | "git", 117 | "vcs" 118 | ], 119 | "support": { 120 | "source": "https://github.com/tomzx/gitter/tree/php-semver-checker", 121 | "issues": "https://github.com/tomzx/gitter/issues" 122 | }, 123 | "time": "2021-12-31T04:07:01+00:00" 124 | }, 125 | { 126 | "name": "nikic/php-parser", 127 | "version": "v4.15.2", 128 | "source": { 129 | "type": "git", 130 | "url": "https://github.com/nikic/PHP-Parser.git", 131 | "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" 132 | }, 133 | "dist": { 134 | "type": "zip", 135 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", 136 | "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", 137 | "shasum": "" 138 | }, 139 | "require": { 140 | "ext-tokenizer": "*", 141 | "php": ">=7.0" 142 | }, 143 | "require-dev": { 144 | "ircmaxell/php-yacc": "^0.0.7", 145 | "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" 146 | }, 147 | "bin": [ 148 | "bin/php-parse" 149 | ], 150 | "type": "library", 151 | "extra": { 152 | "branch-alias": { 153 | "dev-master": "4.9-dev" 154 | } 155 | }, 156 | "autoload": { 157 | "psr-4": { 158 | "PhpParser\\": "lib/PhpParser" 159 | } 160 | }, 161 | "notification-url": "https://packagist.org/downloads/", 162 | "license": [ 163 | "BSD-3-Clause" 164 | ], 165 | "authors": [ 166 | { 167 | "name": "Nikita Popov" 168 | } 169 | ], 170 | "description": "A PHP parser written in PHP", 171 | "keywords": [ 172 | "parser", 173 | "php" 174 | ], 175 | "support": { 176 | "issues": "https://github.com/nikic/PHP-Parser/issues", 177 | "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" 178 | }, 179 | "time": "2022-11-12T15:38:23+00:00" 180 | }, 181 | { 182 | "name": "psr/container", 183 | "version": "1.1.1", 184 | "source": { 185 | "type": "git", 186 | "url": "https://github.com/php-fig/container.git", 187 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" 188 | }, 189 | "dist": { 190 | "type": "zip", 191 | "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", 192 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", 193 | "shasum": "" 194 | }, 195 | "require": { 196 | "php": ">=7.2.0" 197 | }, 198 | "type": "library", 199 | "autoload": { 200 | "psr-4": { 201 | "Psr\\Container\\": "src/" 202 | } 203 | }, 204 | "notification-url": "https://packagist.org/downloads/", 205 | "license": [ 206 | "MIT" 207 | ], 208 | "authors": [ 209 | { 210 | "name": "PHP-FIG", 211 | "homepage": "https://www.php-fig.org/" 212 | } 213 | ], 214 | "description": "Common Container Interface (PHP FIG PSR-11)", 215 | "homepage": "https://github.com/php-fig/container", 216 | "keywords": [ 217 | "PSR-11", 218 | "container", 219 | "container-interface", 220 | "container-interop", 221 | "psr" 222 | ], 223 | "support": { 224 | "issues": "https://github.com/php-fig/container/issues", 225 | "source": "https://github.com/php-fig/container/tree/1.1.1" 226 | }, 227 | "time": "2021-03-05T17:36:06+00:00" 228 | }, 229 | { 230 | "name": "symfony/console", 231 | "version": "v5.4.5", 232 | "source": { 233 | "type": "git", 234 | "url": "https://github.com/symfony/console.git", 235 | "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad" 236 | }, 237 | "dist": { 238 | "type": "zip", 239 | "url": "https://api.github.com/repos/symfony/console/zipball/d8111acc99876953f52fe16d4c50eb60940d49ad", 240 | "reference": "d8111acc99876953f52fe16d4c50eb60940d49ad", 241 | "shasum": "" 242 | }, 243 | "require": { 244 | "php": ">=7.2.5", 245 | "symfony/deprecation-contracts": "^2.1|^3", 246 | "symfony/polyfill-mbstring": "~1.0", 247 | "symfony/polyfill-php73": "^1.9", 248 | "symfony/polyfill-php80": "^1.16", 249 | "symfony/service-contracts": "^1.1|^2|^3", 250 | "symfony/string": "^5.1|^6.0" 251 | }, 252 | "conflict": { 253 | "psr/log": ">=3", 254 | "symfony/dependency-injection": "<4.4", 255 | "symfony/dotenv": "<5.1", 256 | "symfony/event-dispatcher": "<4.4", 257 | "symfony/lock": "<4.4", 258 | "symfony/process": "<4.4" 259 | }, 260 | "provide": { 261 | "psr/log-implementation": "1.0|2.0" 262 | }, 263 | "require-dev": { 264 | "psr/log": "^1|^2", 265 | "symfony/config": "^4.4|^5.0|^6.0", 266 | "symfony/dependency-injection": "^4.4|^5.0|^6.0", 267 | "symfony/event-dispatcher": "^4.4|^5.0|^6.0", 268 | "symfony/lock": "^4.4|^5.0|^6.0", 269 | "symfony/process": "^4.4|^5.0|^6.0", 270 | "symfony/var-dumper": "^4.4|^5.0|^6.0" 271 | }, 272 | "suggest": { 273 | "psr/log": "For using the console logger", 274 | "symfony/event-dispatcher": "", 275 | "symfony/lock": "", 276 | "symfony/process": "" 277 | }, 278 | "type": "library", 279 | "autoload": { 280 | "psr-4": { 281 | "Symfony\\Component\\Console\\": "" 282 | }, 283 | "exclude-from-classmap": [ 284 | "/Tests/" 285 | ] 286 | }, 287 | "notification-url": "https://packagist.org/downloads/", 288 | "license": [ 289 | "MIT" 290 | ], 291 | "authors": [ 292 | { 293 | "name": "Fabien Potencier", 294 | "email": "fabien@symfony.com" 295 | }, 296 | { 297 | "name": "Symfony Community", 298 | "homepage": "https://symfony.com/contributors" 299 | } 300 | ], 301 | "description": "Eases the creation of beautiful and testable command line interfaces", 302 | "homepage": "https://symfony.com", 303 | "keywords": [ 304 | "cli", 305 | "command line", 306 | "console", 307 | "terminal" 308 | ], 309 | "support": { 310 | "source": "https://github.com/symfony/console/tree/v5.4.5" 311 | }, 312 | "funding": [ 313 | { 314 | "url": "https://symfony.com/sponsor", 315 | "type": "custom" 316 | }, 317 | { 318 | "url": "https://github.com/fabpot", 319 | "type": "github" 320 | }, 321 | { 322 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 323 | "type": "tidelift" 324 | } 325 | ], 326 | "time": "2022-02-24T12:45:35+00:00" 327 | }, 328 | { 329 | "name": "symfony/deprecation-contracts", 330 | "version": "v2.5.0", 331 | "source": { 332 | "type": "git", 333 | "url": "https://github.com/symfony/deprecation-contracts.git", 334 | "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" 335 | }, 336 | "dist": { 337 | "type": "zip", 338 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", 339 | "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", 340 | "shasum": "" 341 | }, 342 | "require": { 343 | "php": ">=7.1" 344 | }, 345 | "type": "library", 346 | "extra": { 347 | "branch-alias": { 348 | "dev-main": "2.5-dev" 349 | }, 350 | "thanks": { 351 | "name": "symfony/contracts", 352 | "url": "https://github.com/symfony/contracts" 353 | } 354 | }, 355 | "autoload": { 356 | "files": [ 357 | "function.php" 358 | ] 359 | }, 360 | "notification-url": "https://packagist.org/downloads/", 361 | "license": [ 362 | "MIT" 363 | ], 364 | "authors": [ 365 | { 366 | "name": "Nicolas Grekas", 367 | "email": "p@tchwork.com" 368 | }, 369 | { 370 | "name": "Symfony Community", 371 | "homepage": "https://symfony.com/contributors" 372 | } 373 | ], 374 | "description": "A generic function and convention to trigger deprecation notices", 375 | "homepage": "https://symfony.com", 376 | "support": { 377 | "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.0" 378 | }, 379 | "funding": [ 380 | { 381 | "url": "https://symfony.com/sponsor", 382 | "type": "custom" 383 | }, 384 | { 385 | "url": "https://github.com/fabpot", 386 | "type": "github" 387 | }, 388 | { 389 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 390 | "type": "tidelift" 391 | } 392 | ], 393 | "time": "2021-07-12T14:48:14+00:00" 394 | }, 395 | { 396 | "name": "symfony/polyfill-ctype", 397 | "version": "v1.25.0", 398 | "source": { 399 | "type": "git", 400 | "url": "https://github.com/symfony/polyfill-ctype.git", 401 | "reference": "30885182c981ab175d4d034db0f6f469898070ab" 402 | }, 403 | "dist": { 404 | "type": "zip", 405 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", 406 | "reference": "30885182c981ab175d4d034db0f6f469898070ab", 407 | "shasum": "" 408 | }, 409 | "require": { 410 | "php": ">=7.1" 411 | }, 412 | "provide": { 413 | "ext-ctype": "*" 414 | }, 415 | "suggest": { 416 | "ext-ctype": "For best performance" 417 | }, 418 | "type": "library", 419 | "extra": { 420 | "branch-alias": { 421 | "dev-main": "1.23-dev" 422 | }, 423 | "thanks": { 424 | "name": "symfony/polyfill", 425 | "url": "https://github.com/symfony/polyfill" 426 | } 427 | }, 428 | "autoload": { 429 | "files": [ 430 | "bootstrap.php" 431 | ], 432 | "psr-4": { 433 | "Symfony\\Polyfill\\Ctype\\": "" 434 | } 435 | }, 436 | "notification-url": "https://packagist.org/downloads/", 437 | "license": [ 438 | "MIT" 439 | ], 440 | "authors": [ 441 | { 442 | "name": "Gert de Pagter", 443 | "email": "BackEndTea@gmail.com" 444 | }, 445 | { 446 | "name": "Symfony Community", 447 | "homepage": "https://symfony.com/contributors" 448 | } 449 | ], 450 | "description": "Symfony polyfill for ctype functions", 451 | "homepage": "https://symfony.com", 452 | "keywords": [ 453 | "compatibility", 454 | "ctype", 455 | "polyfill", 456 | "portable" 457 | ], 458 | "support": { 459 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0" 460 | }, 461 | "funding": [ 462 | { 463 | "url": "https://symfony.com/sponsor", 464 | "type": "custom" 465 | }, 466 | { 467 | "url": "https://github.com/fabpot", 468 | "type": "github" 469 | }, 470 | { 471 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 472 | "type": "tidelift" 473 | } 474 | ], 475 | "time": "2021-10-20T20:35:02+00:00" 476 | }, 477 | { 478 | "name": "symfony/polyfill-intl-grapheme", 479 | "version": "v1.24.0", 480 | "source": { 481 | "type": "git", 482 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 483 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" 484 | }, 485 | "dist": { 486 | "type": "zip", 487 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", 488 | "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", 489 | "shasum": "" 490 | }, 491 | "require": { 492 | "php": ">=7.1" 493 | }, 494 | "suggest": { 495 | "ext-intl": "For best performance" 496 | }, 497 | "type": "library", 498 | "extra": { 499 | "branch-alias": { 500 | "dev-main": "1.23-dev" 501 | }, 502 | "thanks": { 503 | "name": "symfony/polyfill", 504 | "url": "https://github.com/symfony/polyfill" 505 | } 506 | }, 507 | "autoload": { 508 | "files": [ 509 | "bootstrap.php" 510 | ], 511 | "psr-4": { 512 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 513 | } 514 | }, 515 | "notification-url": "https://packagist.org/downloads/", 516 | "license": [ 517 | "MIT" 518 | ], 519 | "authors": [ 520 | { 521 | "name": "Nicolas Grekas", 522 | "email": "p@tchwork.com" 523 | }, 524 | { 525 | "name": "Symfony Community", 526 | "homepage": "https://symfony.com/contributors" 527 | } 528 | ], 529 | "description": "Symfony polyfill for intl's grapheme_* functions", 530 | "homepage": "https://symfony.com", 531 | "keywords": [ 532 | "compatibility", 533 | "grapheme", 534 | "intl", 535 | "polyfill", 536 | "portable", 537 | "shim" 538 | ], 539 | "support": { 540 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" 541 | }, 542 | "funding": [ 543 | { 544 | "url": "https://symfony.com/sponsor", 545 | "type": "custom" 546 | }, 547 | { 548 | "url": "https://github.com/fabpot", 549 | "type": "github" 550 | }, 551 | { 552 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 553 | "type": "tidelift" 554 | } 555 | ], 556 | "time": "2021-11-23T21:10:46+00:00" 557 | }, 558 | { 559 | "name": "symfony/polyfill-intl-normalizer", 560 | "version": "v1.24.0", 561 | "source": { 562 | "type": "git", 563 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 564 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" 565 | }, 566 | "dist": { 567 | "type": "zip", 568 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", 569 | "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", 570 | "shasum": "" 571 | }, 572 | "require": { 573 | "php": ">=7.1" 574 | }, 575 | "suggest": { 576 | "ext-intl": "For best performance" 577 | }, 578 | "type": "library", 579 | "extra": { 580 | "branch-alias": { 581 | "dev-main": "1.23-dev" 582 | }, 583 | "thanks": { 584 | "name": "symfony/polyfill", 585 | "url": "https://github.com/symfony/polyfill" 586 | } 587 | }, 588 | "autoload": { 589 | "files": [ 590 | "bootstrap.php" 591 | ], 592 | "psr-4": { 593 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 594 | }, 595 | "classmap": [ 596 | "Resources/stubs" 597 | ] 598 | }, 599 | "notification-url": "https://packagist.org/downloads/", 600 | "license": [ 601 | "MIT" 602 | ], 603 | "authors": [ 604 | { 605 | "name": "Nicolas Grekas", 606 | "email": "p@tchwork.com" 607 | }, 608 | { 609 | "name": "Symfony Community", 610 | "homepage": "https://symfony.com/contributors" 611 | } 612 | ], 613 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 614 | "homepage": "https://symfony.com", 615 | "keywords": [ 616 | "compatibility", 617 | "intl", 618 | "normalizer", 619 | "polyfill", 620 | "portable", 621 | "shim" 622 | ], 623 | "support": { 624 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" 625 | }, 626 | "funding": [ 627 | { 628 | "url": "https://symfony.com/sponsor", 629 | "type": "custom" 630 | }, 631 | { 632 | "url": "https://github.com/fabpot", 633 | "type": "github" 634 | }, 635 | { 636 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 637 | "type": "tidelift" 638 | } 639 | ], 640 | "time": "2021-02-19T12:13:01+00:00" 641 | }, 642 | { 643 | "name": "symfony/polyfill-mbstring", 644 | "version": "v1.24.0", 645 | "source": { 646 | "type": "git", 647 | "url": "https://github.com/symfony/polyfill-mbstring.git", 648 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" 649 | }, 650 | "dist": { 651 | "type": "zip", 652 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", 653 | "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", 654 | "shasum": "" 655 | }, 656 | "require": { 657 | "php": ">=7.1" 658 | }, 659 | "provide": { 660 | "ext-mbstring": "*" 661 | }, 662 | "suggest": { 663 | "ext-mbstring": "For best performance" 664 | }, 665 | "type": "library", 666 | "extra": { 667 | "branch-alias": { 668 | "dev-main": "1.23-dev" 669 | }, 670 | "thanks": { 671 | "name": "symfony/polyfill", 672 | "url": "https://github.com/symfony/polyfill" 673 | } 674 | }, 675 | "autoload": { 676 | "files": [ 677 | "bootstrap.php" 678 | ], 679 | "psr-4": { 680 | "Symfony\\Polyfill\\Mbstring\\": "" 681 | } 682 | }, 683 | "notification-url": "https://packagist.org/downloads/", 684 | "license": [ 685 | "MIT" 686 | ], 687 | "authors": [ 688 | { 689 | "name": "Nicolas Grekas", 690 | "email": "p@tchwork.com" 691 | }, 692 | { 693 | "name": "Symfony Community", 694 | "homepage": "https://symfony.com/contributors" 695 | } 696 | ], 697 | "description": "Symfony polyfill for the Mbstring extension", 698 | "homepage": "https://symfony.com", 699 | "keywords": [ 700 | "compatibility", 701 | "mbstring", 702 | "polyfill", 703 | "portable", 704 | "shim" 705 | ], 706 | "support": { 707 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" 708 | }, 709 | "funding": [ 710 | { 711 | "url": "https://symfony.com/sponsor", 712 | "type": "custom" 713 | }, 714 | { 715 | "url": "https://github.com/fabpot", 716 | "type": "github" 717 | }, 718 | { 719 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 720 | "type": "tidelift" 721 | } 722 | ], 723 | "time": "2021-11-30T18:21:41+00:00" 724 | }, 725 | { 726 | "name": "symfony/polyfill-php73", 727 | "version": "v1.24.0", 728 | "source": { 729 | "type": "git", 730 | "url": "https://github.com/symfony/polyfill-php73.git", 731 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" 732 | }, 733 | "dist": { 734 | "type": "zip", 735 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", 736 | "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", 737 | "shasum": "" 738 | }, 739 | "require": { 740 | "php": ">=7.1" 741 | }, 742 | "type": "library", 743 | "extra": { 744 | "branch-alias": { 745 | "dev-main": "1.23-dev" 746 | }, 747 | "thanks": { 748 | "name": "symfony/polyfill", 749 | "url": "https://github.com/symfony/polyfill" 750 | } 751 | }, 752 | "autoload": { 753 | "files": [ 754 | "bootstrap.php" 755 | ], 756 | "psr-4": { 757 | "Symfony\\Polyfill\\Php73\\": "" 758 | }, 759 | "classmap": [ 760 | "Resources/stubs" 761 | ] 762 | }, 763 | "notification-url": "https://packagist.org/downloads/", 764 | "license": [ 765 | "MIT" 766 | ], 767 | "authors": [ 768 | { 769 | "name": "Nicolas Grekas", 770 | "email": "p@tchwork.com" 771 | }, 772 | { 773 | "name": "Symfony Community", 774 | "homepage": "https://symfony.com/contributors" 775 | } 776 | ], 777 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 778 | "homepage": "https://symfony.com", 779 | "keywords": [ 780 | "compatibility", 781 | "polyfill", 782 | "portable", 783 | "shim" 784 | ], 785 | "support": { 786 | "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" 787 | }, 788 | "funding": [ 789 | { 790 | "url": "https://symfony.com/sponsor", 791 | "type": "custom" 792 | }, 793 | { 794 | "url": "https://github.com/fabpot", 795 | "type": "github" 796 | }, 797 | { 798 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 799 | "type": "tidelift" 800 | } 801 | ], 802 | "time": "2021-06-05T21:20:04+00:00" 803 | }, 804 | { 805 | "name": "symfony/polyfill-php80", 806 | "version": "v1.24.0", 807 | "source": { 808 | "type": "git", 809 | "url": "https://github.com/symfony/polyfill-php80.git", 810 | "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" 811 | }, 812 | "dist": { 813 | "type": "zip", 814 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", 815 | "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", 816 | "shasum": "" 817 | }, 818 | "require": { 819 | "php": ">=7.1" 820 | }, 821 | "type": "library", 822 | "extra": { 823 | "branch-alias": { 824 | "dev-main": "1.23-dev" 825 | }, 826 | "thanks": { 827 | "name": "symfony/polyfill", 828 | "url": "https://github.com/symfony/polyfill" 829 | } 830 | }, 831 | "autoload": { 832 | "files": [ 833 | "bootstrap.php" 834 | ], 835 | "psr-4": { 836 | "Symfony\\Polyfill\\Php80\\": "" 837 | }, 838 | "classmap": [ 839 | "Resources/stubs" 840 | ] 841 | }, 842 | "notification-url": "https://packagist.org/downloads/", 843 | "license": [ 844 | "MIT" 845 | ], 846 | "authors": [ 847 | { 848 | "name": "Ion Bazan", 849 | "email": "ion.bazan@gmail.com" 850 | }, 851 | { 852 | "name": "Nicolas Grekas", 853 | "email": "p@tchwork.com" 854 | }, 855 | { 856 | "name": "Symfony Community", 857 | "homepage": "https://symfony.com/contributors" 858 | } 859 | ], 860 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 861 | "homepage": "https://symfony.com", 862 | "keywords": [ 863 | "compatibility", 864 | "polyfill", 865 | "portable", 866 | "shim" 867 | ], 868 | "support": { 869 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" 870 | }, 871 | "funding": [ 872 | { 873 | "url": "https://symfony.com/sponsor", 874 | "type": "custom" 875 | }, 876 | { 877 | "url": "https://github.com/fabpot", 878 | "type": "github" 879 | }, 880 | { 881 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 882 | "type": "tidelift" 883 | } 884 | ], 885 | "time": "2021-09-13T13:58:33+00:00" 886 | }, 887 | { 888 | "name": "symfony/process", 889 | "version": "v5.4.2", 890 | "source": { 891 | "type": "git", 892 | "url": "https://github.com/symfony/process.git", 893 | "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4" 894 | }, 895 | "dist": { 896 | "type": "zip", 897 | "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", 898 | "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", 899 | "shasum": "" 900 | }, 901 | "require": { 902 | "php": ">=7.2.5", 903 | "symfony/polyfill-php80": "^1.16" 904 | }, 905 | "type": "library", 906 | "autoload": { 907 | "psr-4": { 908 | "Symfony\\Component\\Process\\": "" 909 | }, 910 | "exclude-from-classmap": [ 911 | "/Tests/" 912 | ] 913 | }, 914 | "notification-url": "https://packagist.org/downloads/", 915 | "license": [ 916 | "MIT" 917 | ], 918 | "authors": [ 919 | { 920 | "name": "Fabien Potencier", 921 | "email": "fabien@symfony.com" 922 | }, 923 | { 924 | "name": "Symfony Community", 925 | "homepage": "https://symfony.com/contributors" 926 | } 927 | ], 928 | "description": "Executes commands in sub-processes", 929 | "homepage": "https://symfony.com", 930 | "support": { 931 | "source": "https://github.com/symfony/process/tree/v5.4.2" 932 | }, 933 | "funding": [ 934 | { 935 | "url": "https://symfony.com/sponsor", 936 | "type": "custom" 937 | }, 938 | { 939 | "url": "https://github.com/fabpot", 940 | "type": "github" 941 | }, 942 | { 943 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 944 | "type": "tidelift" 945 | } 946 | ], 947 | "time": "2021-12-27T21:01:00+00:00" 948 | }, 949 | { 950 | "name": "symfony/service-contracts", 951 | "version": "v2.5.0", 952 | "source": { 953 | "type": "git", 954 | "url": "https://github.com/symfony/service-contracts.git", 955 | "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc" 956 | }, 957 | "dist": { 958 | "type": "zip", 959 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", 960 | "reference": "1ab11b933cd6bc5464b08e81e2c5b07dec58b0fc", 961 | "shasum": "" 962 | }, 963 | "require": { 964 | "php": ">=7.2.5", 965 | "psr/container": "^1.1", 966 | "symfony/deprecation-contracts": "^2.1" 967 | }, 968 | "conflict": { 969 | "ext-psr": "<1.1|>=2" 970 | }, 971 | "suggest": { 972 | "symfony/service-implementation": "" 973 | }, 974 | "type": "library", 975 | "extra": { 976 | "branch-alias": { 977 | "dev-main": "2.5-dev" 978 | }, 979 | "thanks": { 980 | "name": "symfony/contracts", 981 | "url": "https://github.com/symfony/contracts" 982 | } 983 | }, 984 | "autoload": { 985 | "psr-4": { 986 | "Symfony\\Contracts\\Service\\": "" 987 | } 988 | }, 989 | "notification-url": "https://packagist.org/downloads/", 990 | "license": [ 991 | "MIT" 992 | ], 993 | "authors": [ 994 | { 995 | "name": "Nicolas Grekas", 996 | "email": "p@tchwork.com" 997 | }, 998 | { 999 | "name": "Symfony Community", 1000 | "homepage": "https://symfony.com/contributors" 1001 | } 1002 | ], 1003 | "description": "Generic abstractions related to writing services", 1004 | "homepage": "https://symfony.com", 1005 | "keywords": [ 1006 | "abstractions", 1007 | "contracts", 1008 | "decoupling", 1009 | "interfaces", 1010 | "interoperability", 1011 | "standards" 1012 | ], 1013 | "support": { 1014 | "source": "https://github.com/symfony/service-contracts/tree/v2.5.0" 1015 | }, 1016 | "funding": [ 1017 | { 1018 | "url": "https://symfony.com/sponsor", 1019 | "type": "custom" 1020 | }, 1021 | { 1022 | "url": "https://github.com/fabpot", 1023 | "type": "github" 1024 | }, 1025 | { 1026 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1027 | "type": "tidelift" 1028 | } 1029 | ], 1030 | "time": "2021-11-04T16:48:04+00:00" 1031 | }, 1032 | { 1033 | "name": "symfony/string", 1034 | "version": "v5.4.3", 1035 | "source": { 1036 | "type": "git", 1037 | "url": "https://github.com/symfony/string.git", 1038 | "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10" 1039 | }, 1040 | "dist": { 1041 | "type": "zip", 1042 | "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10", 1043 | "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10", 1044 | "shasum": "" 1045 | }, 1046 | "require": { 1047 | "php": ">=7.2.5", 1048 | "symfony/polyfill-ctype": "~1.8", 1049 | "symfony/polyfill-intl-grapheme": "~1.0", 1050 | "symfony/polyfill-intl-normalizer": "~1.0", 1051 | "symfony/polyfill-mbstring": "~1.0", 1052 | "symfony/polyfill-php80": "~1.15" 1053 | }, 1054 | "conflict": { 1055 | "symfony/translation-contracts": ">=3.0" 1056 | }, 1057 | "require-dev": { 1058 | "symfony/error-handler": "^4.4|^5.0|^6.0", 1059 | "symfony/http-client": "^4.4|^5.0|^6.0", 1060 | "symfony/translation-contracts": "^1.1|^2", 1061 | "symfony/var-exporter": "^4.4|^5.0|^6.0" 1062 | }, 1063 | "type": "library", 1064 | "autoload": { 1065 | "files": [ 1066 | "Resources/functions.php" 1067 | ], 1068 | "psr-4": { 1069 | "Symfony\\Component\\String\\": "" 1070 | }, 1071 | "exclude-from-classmap": [ 1072 | "/Tests/" 1073 | ] 1074 | }, 1075 | "notification-url": "https://packagist.org/downloads/", 1076 | "license": [ 1077 | "MIT" 1078 | ], 1079 | "authors": [ 1080 | { 1081 | "name": "Nicolas Grekas", 1082 | "email": "p@tchwork.com" 1083 | }, 1084 | { 1085 | "name": "Symfony Community", 1086 | "homepage": "https://symfony.com/contributors" 1087 | } 1088 | ], 1089 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 1090 | "homepage": "https://symfony.com", 1091 | "keywords": [ 1092 | "grapheme", 1093 | "i18n", 1094 | "string", 1095 | "unicode", 1096 | "utf-8", 1097 | "utf8" 1098 | ], 1099 | "support": { 1100 | "source": "https://github.com/symfony/string/tree/v5.4.3" 1101 | }, 1102 | "funding": [ 1103 | { 1104 | "url": "https://symfony.com/sponsor", 1105 | "type": "custom" 1106 | }, 1107 | { 1108 | "url": "https://github.com/fabpot", 1109 | "type": "github" 1110 | }, 1111 | { 1112 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1113 | "type": "tidelift" 1114 | } 1115 | ], 1116 | "time": "2022-01-02T09:53:40+00:00" 1117 | }, 1118 | { 1119 | "name": "symfony/yaml", 1120 | "version": "v5.4.2", 1121 | "source": { 1122 | "type": "git", 1123 | "url": "https://github.com/symfony/yaml.git", 1124 | "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58" 1125 | }, 1126 | "dist": { 1127 | "type": "zip", 1128 | "url": "https://api.github.com/repos/symfony/yaml/zipball/b9eb163846a61bb32dfc147f7859e274fab38b58", 1129 | "reference": "b9eb163846a61bb32dfc147f7859e274fab38b58", 1130 | "shasum": "" 1131 | }, 1132 | "require": { 1133 | "php": ">=7.2.5", 1134 | "symfony/deprecation-contracts": "^2.1|^3", 1135 | "symfony/polyfill-ctype": "^1.8" 1136 | }, 1137 | "conflict": { 1138 | "symfony/console": "<5.3" 1139 | }, 1140 | "require-dev": { 1141 | "symfony/console": "^5.3|^6.0" 1142 | }, 1143 | "suggest": { 1144 | "symfony/console": "For validating YAML files using the lint command" 1145 | }, 1146 | "bin": [ 1147 | "Resources/bin/yaml-lint" 1148 | ], 1149 | "type": "library", 1150 | "autoload": { 1151 | "psr-4": { 1152 | "Symfony\\Component\\Yaml\\": "" 1153 | }, 1154 | "exclude-from-classmap": [ 1155 | "/Tests/" 1156 | ] 1157 | }, 1158 | "notification-url": "https://packagist.org/downloads/", 1159 | "license": [ 1160 | "MIT" 1161 | ], 1162 | "authors": [ 1163 | { 1164 | "name": "Fabien Potencier", 1165 | "email": "fabien@symfony.com" 1166 | }, 1167 | { 1168 | "name": "Symfony Community", 1169 | "homepage": "https://symfony.com/contributors" 1170 | } 1171 | ], 1172 | "description": "Loads and dumps YAML files", 1173 | "homepage": "https://symfony.com", 1174 | "support": { 1175 | "source": "https://github.com/symfony/yaml/tree/v5.4.2" 1176 | }, 1177 | "funding": [ 1178 | { 1179 | "url": "https://symfony.com/sponsor", 1180 | "type": "custom" 1181 | }, 1182 | { 1183 | "url": "https://github.com/fabpot", 1184 | "type": "github" 1185 | }, 1186 | { 1187 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1188 | "type": "tidelift" 1189 | } 1190 | ], 1191 | "time": "2021-12-16T21:58:21+00:00" 1192 | }, 1193 | { 1194 | "name": "tomzx/finder", 1195 | "version": "v0.2.0", 1196 | "source": { 1197 | "type": "git", 1198 | "url": "https://github.com/tomzx/finder.git", 1199 | "reference": "dc6e79df0662a7a98a0461fef55f0fbd06d13b24" 1200 | }, 1201 | "dist": { 1202 | "type": "zip", 1203 | "url": "https://api.github.com/repos/tomzx/finder/zipball/dc6e79df0662a7a98a0461fef55f0fbd06d13b24", 1204 | "reference": "dc6e79df0662a7a98a0461fef55f0fbd06d13b24", 1205 | "shasum": "" 1206 | }, 1207 | "require": { 1208 | "php": ">=7.3" 1209 | }, 1210 | "require-dev": { 1211 | "phpunit/phpunit": "^9.5" 1212 | }, 1213 | "type": "library", 1214 | "extra": { 1215 | "branch-alias": { 1216 | "dev-master": "0.2-dev" 1217 | } 1218 | }, 1219 | "autoload": { 1220 | "psr-4": { 1221 | "Finder\\": "src/Finder" 1222 | } 1223 | }, 1224 | "notification-url": "https://packagist.org/downloads/", 1225 | "license": [ 1226 | "MIT" 1227 | ], 1228 | "authors": [ 1229 | { 1230 | "name": "Tom Rochette", 1231 | "email": "tom@tomrochette.com", 1232 | "homepage": "https://www.tomrochette.com" 1233 | } 1234 | ], 1235 | "description": "Improved, Symfony Finder compatible finder.", 1236 | "homepage": "https://github.com/tomzx/finder", 1237 | "keywords": [ 1238 | "finder" 1239 | ], 1240 | "support": { 1241 | "issues": "https://github.com/tomzx/finder/issues", 1242 | "source": "https://github.com/tomzx/finder/tree/v0.2.0" 1243 | }, 1244 | "time": "2021-11-08T03:17:54+00:00" 1245 | }, 1246 | { 1247 | "name": "tomzx/php-semver-checker", 1248 | "version": "v0.15.1", 1249 | "source": { 1250 | "type": "git", 1251 | "url": "https://github.com/tomzx/php-semver-checker.git", 1252 | "reference": "934dd8e2761fb17f476433ff4f2af3ec0e5f3597" 1253 | }, 1254 | "dist": { 1255 | "type": "zip", 1256 | "url": "https://api.github.com/repos/tomzx/php-semver-checker/zipball/934dd8e2761fb17f476433ff4f2af3ec0e5f3597", 1257 | "reference": "934dd8e2761fb17f476433ff4f2af3ec0e5f3597", 1258 | "shasum": "" 1259 | }, 1260 | "require": { 1261 | "hassankhan/config": "^3.0", 1262 | "nikic/php-parser": "^4.0", 1263 | "php": ">=7.3", 1264 | "symfony/console": "^4.0||^5.0", 1265 | "symfony/yaml": "^4.0||^5.0", 1266 | "tomzx/finder": "^0.2" 1267 | }, 1268 | "require-dev": { 1269 | "mockery/mockery": "^1.4.4", 1270 | "phpunit/phpunit": "^9.5.10" 1271 | }, 1272 | "bin": [ 1273 | "bin/php-semver-checker" 1274 | ], 1275 | "type": "library", 1276 | "extra": { 1277 | "branch-alias": { 1278 | "dev-master": "0.16-dev" 1279 | } 1280 | }, 1281 | "autoload": { 1282 | "psr-4": { 1283 | "PHPSemVerChecker\\": "src/PHPSemVerChecker" 1284 | } 1285 | }, 1286 | "notification-url": "https://packagist.org/downloads/", 1287 | "license": [ 1288 | "MIT" 1289 | ], 1290 | "authors": [ 1291 | { 1292 | "name": "Tom Rochette", 1293 | "email": "tom@tomrochette.com", 1294 | "homepage": "https://www.tomrochette.com" 1295 | } 1296 | ], 1297 | "description": "PHP Semantic Versioning Checker", 1298 | "homepage": "https://github.com/tomzx/php-semver-checker", 1299 | "keywords": [ 1300 | "checker", 1301 | "semantic versioning", 1302 | "semver" 1303 | ], 1304 | "support": { 1305 | "issues": "https://github.com/tomzx/php-semver-checker/issues", 1306 | "source": "https://github.com/tomzx/php-semver-checker/tree/v0.15.1" 1307 | }, 1308 | "time": "2021-12-31T02:17:20+00:00" 1309 | }, 1310 | { 1311 | "name": "vierbergenlars/php-semver", 1312 | "version": "3.0.2", 1313 | "source": { 1314 | "type": "git", 1315 | "url": "https://github.com/vierbergenlars/php-semver.git", 1316 | "reference": "be22b86be4c1133acc42fd1685276792024af5f9" 1317 | }, 1318 | "dist": { 1319 | "type": "zip", 1320 | "url": "https://api.github.com/repos/vierbergenlars/php-semver/zipball/be22b86be4c1133acc42fd1685276792024af5f9", 1321 | "reference": "be22b86be4c1133acc42fd1685276792024af5f9", 1322 | "shasum": "" 1323 | }, 1324 | "require": { 1325 | "php": ">=5.3.0" 1326 | }, 1327 | "require-dev": { 1328 | "phpunit/phpunit": "~4" 1329 | }, 1330 | "bin": [ 1331 | "bin/semver", 1332 | "bin/update-versions" 1333 | ], 1334 | "type": "library", 1335 | "autoload": { 1336 | "psr-0": { 1337 | "vierbergenlars\\SemVer\\": "src/", 1338 | "vierbergenlars\\LibJs\\": "src/" 1339 | }, 1340 | "classmap": [ 1341 | "src/vierbergenlars/SemVer/internal.php" 1342 | ] 1343 | }, 1344 | "notification-url": "https://packagist.org/downloads/", 1345 | "license": [ 1346 | "MIT" 1347 | ], 1348 | "authors": [ 1349 | { 1350 | "name": "Lars Vierbergen", 1351 | "email": "vierbergenlars@gmail.com" 1352 | } 1353 | ], 1354 | "description": "The Semantic Versioner for PHP", 1355 | "keywords": [ 1356 | "semantic", 1357 | "semver", 1358 | "versioning" 1359 | ], 1360 | "support": { 1361 | "issues": "https://github.com/vierbergenlars/php-semver/issues", 1362 | "source": "https://github.com/vierbergenlars/php-semver/tree/master" 1363 | }, 1364 | "time": "2017-07-11T09:53:59+00:00" 1365 | } 1366 | ], 1367 | "packages-dev": [ 1368 | { 1369 | "name": "doctrine/instantiator", 1370 | "version": "1.4.1", 1371 | "source": { 1372 | "type": "git", 1373 | "url": "https://github.com/doctrine/instantiator.git", 1374 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" 1375 | }, 1376 | "dist": { 1377 | "type": "zip", 1378 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", 1379 | "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", 1380 | "shasum": "" 1381 | }, 1382 | "require": { 1383 | "php": "^7.1 || ^8.0" 1384 | }, 1385 | "require-dev": { 1386 | "doctrine/coding-standard": "^9", 1387 | "ext-pdo": "*", 1388 | "ext-phar": "*", 1389 | "phpbench/phpbench": "^0.16 || ^1", 1390 | "phpstan/phpstan": "^1.4", 1391 | "phpstan/phpstan-phpunit": "^1", 1392 | "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", 1393 | "vimeo/psalm": "^4.22" 1394 | }, 1395 | "type": "library", 1396 | "autoload": { 1397 | "psr-4": { 1398 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 1399 | } 1400 | }, 1401 | "notification-url": "https://packagist.org/downloads/", 1402 | "license": [ 1403 | "MIT" 1404 | ], 1405 | "authors": [ 1406 | { 1407 | "name": "Marco Pivetta", 1408 | "email": "ocramius@gmail.com", 1409 | "homepage": "https://ocramius.github.io/" 1410 | } 1411 | ], 1412 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 1413 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 1414 | "keywords": [ 1415 | "constructor", 1416 | "instantiate" 1417 | ], 1418 | "support": { 1419 | "issues": "https://github.com/doctrine/instantiator/issues", 1420 | "source": "https://github.com/doctrine/instantiator/tree/1.4.1" 1421 | }, 1422 | "funding": [ 1423 | { 1424 | "url": "https://www.doctrine-project.org/sponsorship.html", 1425 | "type": "custom" 1426 | }, 1427 | { 1428 | "url": "https://www.patreon.com/phpdoctrine", 1429 | "type": "patreon" 1430 | }, 1431 | { 1432 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 1433 | "type": "tidelift" 1434 | } 1435 | ], 1436 | "time": "2022-03-03T08:28:38+00:00" 1437 | }, 1438 | { 1439 | "name": "hamcrest/hamcrest-php", 1440 | "version": "v2.0.1", 1441 | "source": { 1442 | "type": "git", 1443 | "url": "https://github.com/hamcrest/hamcrest-php.git", 1444 | "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" 1445 | }, 1446 | "dist": { 1447 | "type": "zip", 1448 | "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", 1449 | "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", 1450 | "shasum": "" 1451 | }, 1452 | "require": { 1453 | "php": "^5.3|^7.0|^8.0" 1454 | }, 1455 | "replace": { 1456 | "cordoval/hamcrest-php": "*", 1457 | "davedevelopment/hamcrest-php": "*", 1458 | "kodova/hamcrest-php": "*" 1459 | }, 1460 | "require-dev": { 1461 | "phpunit/php-file-iterator": "^1.4 || ^2.0", 1462 | "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" 1463 | }, 1464 | "type": "library", 1465 | "extra": { 1466 | "branch-alias": { 1467 | "dev-master": "2.1-dev" 1468 | } 1469 | }, 1470 | "autoload": { 1471 | "classmap": [ 1472 | "hamcrest" 1473 | ] 1474 | }, 1475 | "notification-url": "https://packagist.org/downloads/", 1476 | "license": [ 1477 | "BSD-3-Clause" 1478 | ], 1479 | "description": "This is the PHP port of Hamcrest Matchers", 1480 | "keywords": [ 1481 | "test" 1482 | ], 1483 | "support": { 1484 | "issues": "https://github.com/hamcrest/hamcrest-php/issues", 1485 | "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" 1486 | }, 1487 | "time": "2020-07-09T08:09:16+00:00" 1488 | }, 1489 | { 1490 | "name": "mockery/mockery", 1491 | "version": "1.5.1", 1492 | "source": { 1493 | "type": "git", 1494 | "url": "https://github.com/mockery/mockery.git", 1495 | "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" 1496 | }, 1497 | "dist": { 1498 | "type": "zip", 1499 | "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", 1500 | "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", 1501 | "shasum": "" 1502 | }, 1503 | "require": { 1504 | "hamcrest/hamcrest-php": "^2.0.1", 1505 | "lib-pcre": ">=7.0", 1506 | "php": "^7.3 || ^8.0" 1507 | }, 1508 | "conflict": { 1509 | "phpunit/phpunit": "<8.0" 1510 | }, 1511 | "require-dev": { 1512 | "phpunit/phpunit": "^8.5 || ^9.3" 1513 | }, 1514 | "type": "library", 1515 | "extra": { 1516 | "branch-alias": { 1517 | "dev-master": "1.4.x-dev" 1518 | } 1519 | }, 1520 | "autoload": { 1521 | "psr-0": { 1522 | "Mockery": "library/" 1523 | } 1524 | }, 1525 | "notification-url": "https://packagist.org/downloads/", 1526 | "license": [ 1527 | "BSD-3-Clause" 1528 | ], 1529 | "authors": [ 1530 | { 1531 | "name": "Pádraic Brady", 1532 | "email": "padraic.brady@gmail.com", 1533 | "homepage": "http://blog.astrumfutura.com" 1534 | }, 1535 | { 1536 | "name": "Dave Marshall", 1537 | "email": "dave.marshall@atstsolutions.co.uk", 1538 | "homepage": "http://davedevelopment.co.uk" 1539 | } 1540 | ], 1541 | "description": "Mockery is a simple yet flexible PHP mock object framework", 1542 | "homepage": "https://github.com/mockery/mockery", 1543 | "keywords": [ 1544 | "BDD", 1545 | "TDD", 1546 | "library", 1547 | "mock", 1548 | "mock objects", 1549 | "mockery", 1550 | "stub", 1551 | "test", 1552 | "test double", 1553 | "testing" 1554 | ], 1555 | "support": { 1556 | "issues": "https://github.com/mockery/mockery/issues", 1557 | "source": "https://github.com/mockery/mockery/tree/1.5.1" 1558 | }, 1559 | "time": "2022-09-07T15:32:08+00:00" 1560 | }, 1561 | { 1562 | "name": "myclabs/deep-copy", 1563 | "version": "1.11.0", 1564 | "source": { 1565 | "type": "git", 1566 | "url": "https://github.com/myclabs/DeepCopy.git", 1567 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" 1568 | }, 1569 | "dist": { 1570 | "type": "zip", 1571 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", 1572 | "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", 1573 | "shasum": "" 1574 | }, 1575 | "require": { 1576 | "php": "^7.1 || ^8.0" 1577 | }, 1578 | "conflict": { 1579 | "doctrine/collections": "<1.6.8", 1580 | "doctrine/common": "<2.13.3 || >=3,<3.2.2" 1581 | }, 1582 | "require-dev": { 1583 | "doctrine/collections": "^1.6.8", 1584 | "doctrine/common": "^2.13.3 || ^3.2.2", 1585 | "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" 1586 | }, 1587 | "type": "library", 1588 | "autoload": { 1589 | "files": [ 1590 | "src/DeepCopy/deep_copy.php" 1591 | ], 1592 | "psr-4": { 1593 | "DeepCopy\\": "src/DeepCopy/" 1594 | } 1595 | }, 1596 | "notification-url": "https://packagist.org/downloads/", 1597 | "license": [ 1598 | "MIT" 1599 | ], 1600 | "description": "Create deep copies (clones) of your objects", 1601 | "keywords": [ 1602 | "clone", 1603 | "copy", 1604 | "duplicate", 1605 | "object", 1606 | "object graph" 1607 | ], 1608 | "support": { 1609 | "issues": "https://github.com/myclabs/DeepCopy/issues", 1610 | "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" 1611 | }, 1612 | "funding": [ 1613 | { 1614 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 1615 | "type": "tidelift" 1616 | } 1617 | ], 1618 | "time": "2022-03-03T13:19:32+00:00" 1619 | }, 1620 | { 1621 | "name": "phar-io/manifest", 1622 | "version": "2.0.3", 1623 | "source": { 1624 | "type": "git", 1625 | "url": "https://github.com/phar-io/manifest.git", 1626 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53" 1627 | }, 1628 | "dist": { 1629 | "type": "zip", 1630 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", 1631 | "reference": "97803eca37d319dfa7826cc2437fc020857acb53", 1632 | "shasum": "" 1633 | }, 1634 | "require": { 1635 | "ext-dom": "*", 1636 | "ext-phar": "*", 1637 | "ext-xmlwriter": "*", 1638 | "phar-io/version": "^3.0.1", 1639 | "php": "^7.2 || ^8.0" 1640 | }, 1641 | "type": "library", 1642 | "extra": { 1643 | "branch-alias": { 1644 | "dev-master": "2.0.x-dev" 1645 | } 1646 | }, 1647 | "autoload": { 1648 | "classmap": [ 1649 | "src/" 1650 | ] 1651 | }, 1652 | "notification-url": "https://packagist.org/downloads/", 1653 | "license": [ 1654 | "BSD-3-Clause" 1655 | ], 1656 | "authors": [ 1657 | { 1658 | "name": "Arne Blankerts", 1659 | "email": "arne@blankerts.de", 1660 | "role": "Developer" 1661 | }, 1662 | { 1663 | "name": "Sebastian Heuer", 1664 | "email": "sebastian@phpeople.de", 1665 | "role": "Developer" 1666 | }, 1667 | { 1668 | "name": "Sebastian Bergmann", 1669 | "email": "sebastian@phpunit.de", 1670 | "role": "Developer" 1671 | } 1672 | ], 1673 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 1674 | "support": { 1675 | "issues": "https://github.com/phar-io/manifest/issues", 1676 | "source": "https://github.com/phar-io/manifest/tree/2.0.3" 1677 | }, 1678 | "time": "2021-07-20T11:28:43+00:00" 1679 | }, 1680 | { 1681 | "name": "phar-io/version", 1682 | "version": "3.2.1", 1683 | "source": { 1684 | "type": "git", 1685 | "url": "https://github.com/phar-io/version.git", 1686 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" 1687 | }, 1688 | "dist": { 1689 | "type": "zip", 1690 | "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 1691 | "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", 1692 | "shasum": "" 1693 | }, 1694 | "require": { 1695 | "php": "^7.2 || ^8.0" 1696 | }, 1697 | "type": "library", 1698 | "autoload": { 1699 | "classmap": [ 1700 | "src/" 1701 | ] 1702 | }, 1703 | "notification-url": "https://packagist.org/downloads/", 1704 | "license": [ 1705 | "BSD-3-Clause" 1706 | ], 1707 | "authors": [ 1708 | { 1709 | "name": "Arne Blankerts", 1710 | "email": "arne@blankerts.de", 1711 | "role": "Developer" 1712 | }, 1713 | { 1714 | "name": "Sebastian Heuer", 1715 | "email": "sebastian@phpeople.de", 1716 | "role": "Developer" 1717 | }, 1718 | { 1719 | "name": "Sebastian Bergmann", 1720 | "email": "sebastian@phpunit.de", 1721 | "role": "Developer" 1722 | } 1723 | ], 1724 | "description": "Library for handling version information and constraints", 1725 | "support": { 1726 | "issues": "https://github.com/phar-io/version/issues", 1727 | "source": "https://github.com/phar-io/version/tree/3.2.1" 1728 | }, 1729 | "time": "2022-02-21T01:04:05+00:00" 1730 | }, 1731 | { 1732 | "name": "phpunit/php-code-coverage", 1733 | "version": "9.2.19", 1734 | "source": { 1735 | "type": "git", 1736 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 1737 | "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" 1738 | }, 1739 | "dist": { 1740 | "type": "zip", 1741 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", 1742 | "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", 1743 | "shasum": "" 1744 | }, 1745 | "require": { 1746 | "ext-dom": "*", 1747 | "ext-libxml": "*", 1748 | "ext-xmlwriter": "*", 1749 | "nikic/php-parser": "^4.14", 1750 | "php": ">=7.3", 1751 | "phpunit/php-file-iterator": "^3.0.3", 1752 | "phpunit/php-text-template": "^2.0.2", 1753 | "sebastian/code-unit-reverse-lookup": "^2.0.2", 1754 | "sebastian/complexity": "^2.0", 1755 | "sebastian/environment": "^5.1.2", 1756 | "sebastian/lines-of-code": "^1.0.3", 1757 | "sebastian/version": "^3.0.1", 1758 | "theseer/tokenizer": "^1.2.0" 1759 | }, 1760 | "require-dev": { 1761 | "phpunit/phpunit": "^9.3" 1762 | }, 1763 | "suggest": { 1764 | "ext-pcov": "*", 1765 | "ext-xdebug": "*" 1766 | }, 1767 | "type": "library", 1768 | "extra": { 1769 | "branch-alias": { 1770 | "dev-master": "9.2-dev" 1771 | } 1772 | }, 1773 | "autoload": { 1774 | "classmap": [ 1775 | "src/" 1776 | ] 1777 | }, 1778 | "notification-url": "https://packagist.org/downloads/", 1779 | "license": [ 1780 | "BSD-3-Clause" 1781 | ], 1782 | "authors": [ 1783 | { 1784 | "name": "Sebastian Bergmann", 1785 | "email": "sebastian@phpunit.de", 1786 | "role": "lead" 1787 | } 1788 | ], 1789 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 1790 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 1791 | "keywords": [ 1792 | "coverage", 1793 | "testing", 1794 | "xunit" 1795 | ], 1796 | "support": { 1797 | "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", 1798 | "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" 1799 | }, 1800 | "funding": [ 1801 | { 1802 | "url": "https://github.com/sebastianbergmann", 1803 | "type": "github" 1804 | } 1805 | ], 1806 | "time": "2022-11-18T07:47:47+00:00" 1807 | }, 1808 | { 1809 | "name": "phpunit/php-file-iterator", 1810 | "version": "3.0.6", 1811 | "source": { 1812 | "type": "git", 1813 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 1814 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" 1815 | }, 1816 | "dist": { 1817 | "type": "zip", 1818 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 1819 | "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", 1820 | "shasum": "" 1821 | }, 1822 | "require": { 1823 | "php": ">=7.3" 1824 | }, 1825 | "require-dev": { 1826 | "phpunit/phpunit": "^9.3" 1827 | }, 1828 | "type": "library", 1829 | "extra": { 1830 | "branch-alias": { 1831 | "dev-master": "3.0-dev" 1832 | } 1833 | }, 1834 | "autoload": { 1835 | "classmap": [ 1836 | "src/" 1837 | ] 1838 | }, 1839 | "notification-url": "https://packagist.org/downloads/", 1840 | "license": [ 1841 | "BSD-3-Clause" 1842 | ], 1843 | "authors": [ 1844 | { 1845 | "name": "Sebastian Bergmann", 1846 | "email": "sebastian@phpunit.de", 1847 | "role": "lead" 1848 | } 1849 | ], 1850 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1851 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1852 | "keywords": [ 1853 | "filesystem", 1854 | "iterator" 1855 | ], 1856 | "support": { 1857 | "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", 1858 | "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" 1859 | }, 1860 | "funding": [ 1861 | { 1862 | "url": "https://github.com/sebastianbergmann", 1863 | "type": "github" 1864 | } 1865 | ], 1866 | "time": "2021-12-02T12:48:52+00:00" 1867 | }, 1868 | { 1869 | "name": "phpunit/php-invoker", 1870 | "version": "3.1.1", 1871 | "source": { 1872 | "type": "git", 1873 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1874 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" 1875 | }, 1876 | "dist": { 1877 | "type": "zip", 1878 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1879 | "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", 1880 | "shasum": "" 1881 | }, 1882 | "require": { 1883 | "php": ">=7.3" 1884 | }, 1885 | "require-dev": { 1886 | "ext-pcntl": "*", 1887 | "phpunit/phpunit": "^9.3" 1888 | }, 1889 | "suggest": { 1890 | "ext-pcntl": "*" 1891 | }, 1892 | "type": "library", 1893 | "extra": { 1894 | "branch-alias": { 1895 | "dev-master": "3.1-dev" 1896 | } 1897 | }, 1898 | "autoload": { 1899 | "classmap": [ 1900 | "src/" 1901 | ] 1902 | }, 1903 | "notification-url": "https://packagist.org/downloads/", 1904 | "license": [ 1905 | "BSD-3-Clause" 1906 | ], 1907 | "authors": [ 1908 | { 1909 | "name": "Sebastian Bergmann", 1910 | "email": "sebastian@phpunit.de", 1911 | "role": "lead" 1912 | } 1913 | ], 1914 | "description": "Invoke callables with a timeout", 1915 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1916 | "keywords": [ 1917 | "process" 1918 | ], 1919 | "support": { 1920 | "issues": "https://github.com/sebastianbergmann/php-invoker/issues", 1921 | "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" 1922 | }, 1923 | "funding": [ 1924 | { 1925 | "url": "https://github.com/sebastianbergmann", 1926 | "type": "github" 1927 | } 1928 | ], 1929 | "time": "2020-09-28T05:58:55+00:00" 1930 | }, 1931 | { 1932 | "name": "phpunit/php-text-template", 1933 | "version": "2.0.4", 1934 | "source": { 1935 | "type": "git", 1936 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1937 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" 1938 | }, 1939 | "dist": { 1940 | "type": "zip", 1941 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1942 | "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", 1943 | "shasum": "" 1944 | }, 1945 | "require": { 1946 | "php": ">=7.3" 1947 | }, 1948 | "require-dev": { 1949 | "phpunit/phpunit": "^9.3" 1950 | }, 1951 | "type": "library", 1952 | "extra": { 1953 | "branch-alias": { 1954 | "dev-master": "2.0-dev" 1955 | } 1956 | }, 1957 | "autoload": { 1958 | "classmap": [ 1959 | "src/" 1960 | ] 1961 | }, 1962 | "notification-url": "https://packagist.org/downloads/", 1963 | "license": [ 1964 | "BSD-3-Clause" 1965 | ], 1966 | "authors": [ 1967 | { 1968 | "name": "Sebastian Bergmann", 1969 | "email": "sebastian@phpunit.de", 1970 | "role": "lead" 1971 | } 1972 | ], 1973 | "description": "Simple template engine.", 1974 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1975 | "keywords": [ 1976 | "template" 1977 | ], 1978 | "support": { 1979 | "issues": "https://github.com/sebastianbergmann/php-text-template/issues", 1980 | "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" 1981 | }, 1982 | "funding": [ 1983 | { 1984 | "url": "https://github.com/sebastianbergmann", 1985 | "type": "github" 1986 | } 1987 | ], 1988 | "time": "2020-10-26T05:33:50+00:00" 1989 | }, 1990 | { 1991 | "name": "phpunit/php-timer", 1992 | "version": "5.0.3", 1993 | "source": { 1994 | "type": "git", 1995 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1996 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" 1997 | }, 1998 | "dist": { 1999 | "type": "zip", 2000 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 2001 | "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", 2002 | "shasum": "" 2003 | }, 2004 | "require": { 2005 | "php": ">=7.3" 2006 | }, 2007 | "require-dev": { 2008 | "phpunit/phpunit": "^9.3" 2009 | }, 2010 | "type": "library", 2011 | "extra": { 2012 | "branch-alias": { 2013 | "dev-master": "5.0-dev" 2014 | } 2015 | }, 2016 | "autoload": { 2017 | "classmap": [ 2018 | "src/" 2019 | ] 2020 | }, 2021 | "notification-url": "https://packagist.org/downloads/", 2022 | "license": [ 2023 | "BSD-3-Clause" 2024 | ], 2025 | "authors": [ 2026 | { 2027 | "name": "Sebastian Bergmann", 2028 | "email": "sebastian@phpunit.de", 2029 | "role": "lead" 2030 | } 2031 | ], 2032 | "description": "Utility class for timing", 2033 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 2034 | "keywords": [ 2035 | "timer" 2036 | ], 2037 | "support": { 2038 | "issues": "https://github.com/sebastianbergmann/php-timer/issues", 2039 | "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" 2040 | }, 2041 | "funding": [ 2042 | { 2043 | "url": "https://github.com/sebastianbergmann", 2044 | "type": "github" 2045 | } 2046 | ], 2047 | "time": "2020-10-26T13:16:10+00:00" 2048 | }, 2049 | { 2050 | "name": "phpunit/phpunit", 2051 | "version": "9.5.27", 2052 | "source": { 2053 | "type": "git", 2054 | "url": "https://github.com/sebastianbergmann/phpunit.git", 2055 | "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38" 2056 | }, 2057 | "dist": { 2058 | "type": "zip", 2059 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a2bc7ffdca99f92d959b3f2270529334030bba38", 2060 | "reference": "a2bc7ffdca99f92d959b3f2270529334030bba38", 2061 | "shasum": "" 2062 | }, 2063 | "require": { 2064 | "doctrine/instantiator": "^1.3.1", 2065 | "ext-dom": "*", 2066 | "ext-json": "*", 2067 | "ext-libxml": "*", 2068 | "ext-mbstring": "*", 2069 | "ext-xml": "*", 2070 | "ext-xmlwriter": "*", 2071 | "myclabs/deep-copy": "^1.10.1", 2072 | "phar-io/manifest": "^2.0.3", 2073 | "phar-io/version": "^3.0.2", 2074 | "php": ">=7.3", 2075 | "phpunit/php-code-coverage": "^9.2.13", 2076 | "phpunit/php-file-iterator": "^3.0.5", 2077 | "phpunit/php-invoker": "^3.1.1", 2078 | "phpunit/php-text-template": "^2.0.3", 2079 | "phpunit/php-timer": "^5.0.2", 2080 | "sebastian/cli-parser": "^1.0.1", 2081 | "sebastian/code-unit": "^1.0.6", 2082 | "sebastian/comparator": "^4.0.8", 2083 | "sebastian/diff": "^4.0.3", 2084 | "sebastian/environment": "^5.1.3", 2085 | "sebastian/exporter": "^4.0.5", 2086 | "sebastian/global-state": "^5.0.1", 2087 | "sebastian/object-enumerator": "^4.0.3", 2088 | "sebastian/resource-operations": "^3.0.3", 2089 | "sebastian/type": "^3.2", 2090 | "sebastian/version": "^3.0.2" 2091 | }, 2092 | "suggest": { 2093 | "ext-soap": "*", 2094 | "ext-xdebug": "*" 2095 | }, 2096 | "bin": [ 2097 | "phpunit" 2098 | ], 2099 | "type": "library", 2100 | "extra": { 2101 | "branch-alias": { 2102 | "dev-master": "9.5-dev" 2103 | } 2104 | }, 2105 | "autoload": { 2106 | "files": [ 2107 | "src/Framework/Assert/Functions.php" 2108 | ], 2109 | "classmap": [ 2110 | "src/" 2111 | ] 2112 | }, 2113 | "notification-url": "https://packagist.org/downloads/", 2114 | "license": [ 2115 | "BSD-3-Clause" 2116 | ], 2117 | "authors": [ 2118 | { 2119 | "name": "Sebastian Bergmann", 2120 | "email": "sebastian@phpunit.de", 2121 | "role": "lead" 2122 | } 2123 | ], 2124 | "description": "The PHP Unit Testing framework.", 2125 | "homepage": "https://phpunit.de/", 2126 | "keywords": [ 2127 | "phpunit", 2128 | "testing", 2129 | "xunit" 2130 | ], 2131 | "support": { 2132 | "issues": "https://github.com/sebastianbergmann/phpunit/issues", 2133 | "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.27" 2134 | }, 2135 | "funding": [ 2136 | { 2137 | "url": "https://phpunit.de/sponsors.html", 2138 | "type": "custom" 2139 | }, 2140 | { 2141 | "url": "https://github.com/sebastianbergmann", 2142 | "type": "github" 2143 | }, 2144 | { 2145 | "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", 2146 | "type": "tidelift" 2147 | } 2148 | ], 2149 | "time": "2022-12-09T07:31:23+00:00" 2150 | }, 2151 | { 2152 | "name": "sebastian/cli-parser", 2153 | "version": "1.0.1", 2154 | "source": { 2155 | "type": "git", 2156 | "url": "https://github.com/sebastianbergmann/cli-parser.git", 2157 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" 2158 | }, 2159 | "dist": { 2160 | "type": "zip", 2161 | "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", 2162 | "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", 2163 | "shasum": "" 2164 | }, 2165 | "require": { 2166 | "php": ">=7.3" 2167 | }, 2168 | "require-dev": { 2169 | "phpunit/phpunit": "^9.3" 2170 | }, 2171 | "type": "library", 2172 | "extra": { 2173 | "branch-alias": { 2174 | "dev-master": "1.0-dev" 2175 | } 2176 | }, 2177 | "autoload": { 2178 | "classmap": [ 2179 | "src/" 2180 | ] 2181 | }, 2182 | "notification-url": "https://packagist.org/downloads/", 2183 | "license": [ 2184 | "BSD-3-Clause" 2185 | ], 2186 | "authors": [ 2187 | { 2188 | "name": "Sebastian Bergmann", 2189 | "email": "sebastian@phpunit.de", 2190 | "role": "lead" 2191 | } 2192 | ], 2193 | "description": "Library for parsing CLI options", 2194 | "homepage": "https://github.com/sebastianbergmann/cli-parser", 2195 | "support": { 2196 | "issues": "https://github.com/sebastianbergmann/cli-parser/issues", 2197 | "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" 2198 | }, 2199 | "funding": [ 2200 | { 2201 | "url": "https://github.com/sebastianbergmann", 2202 | "type": "github" 2203 | } 2204 | ], 2205 | "time": "2020-09-28T06:08:49+00:00" 2206 | }, 2207 | { 2208 | "name": "sebastian/code-unit", 2209 | "version": "1.0.8", 2210 | "source": { 2211 | "type": "git", 2212 | "url": "https://github.com/sebastianbergmann/code-unit.git", 2213 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" 2214 | }, 2215 | "dist": { 2216 | "type": "zip", 2217 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", 2218 | "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", 2219 | "shasum": "" 2220 | }, 2221 | "require": { 2222 | "php": ">=7.3" 2223 | }, 2224 | "require-dev": { 2225 | "phpunit/phpunit": "^9.3" 2226 | }, 2227 | "type": "library", 2228 | "extra": { 2229 | "branch-alias": { 2230 | "dev-master": "1.0-dev" 2231 | } 2232 | }, 2233 | "autoload": { 2234 | "classmap": [ 2235 | "src/" 2236 | ] 2237 | }, 2238 | "notification-url": "https://packagist.org/downloads/", 2239 | "license": [ 2240 | "BSD-3-Clause" 2241 | ], 2242 | "authors": [ 2243 | { 2244 | "name": "Sebastian Bergmann", 2245 | "email": "sebastian@phpunit.de", 2246 | "role": "lead" 2247 | } 2248 | ], 2249 | "description": "Collection of value objects that represent the PHP code units", 2250 | "homepage": "https://github.com/sebastianbergmann/code-unit", 2251 | "support": { 2252 | "issues": "https://github.com/sebastianbergmann/code-unit/issues", 2253 | "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" 2254 | }, 2255 | "funding": [ 2256 | { 2257 | "url": "https://github.com/sebastianbergmann", 2258 | "type": "github" 2259 | } 2260 | ], 2261 | "time": "2020-10-26T13:08:54+00:00" 2262 | }, 2263 | { 2264 | "name": "sebastian/code-unit-reverse-lookup", 2265 | "version": "2.0.3", 2266 | "source": { 2267 | "type": "git", 2268 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 2269 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" 2270 | }, 2271 | "dist": { 2272 | "type": "zip", 2273 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 2274 | "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", 2275 | "shasum": "" 2276 | }, 2277 | "require": { 2278 | "php": ">=7.3" 2279 | }, 2280 | "require-dev": { 2281 | "phpunit/phpunit": "^9.3" 2282 | }, 2283 | "type": "library", 2284 | "extra": { 2285 | "branch-alias": { 2286 | "dev-master": "2.0-dev" 2287 | } 2288 | }, 2289 | "autoload": { 2290 | "classmap": [ 2291 | "src/" 2292 | ] 2293 | }, 2294 | "notification-url": "https://packagist.org/downloads/", 2295 | "license": [ 2296 | "BSD-3-Clause" 2297 | ], 2298 | "authors": [ 2299 | { 2300 | "name": "Sebastian Bergmann", 2301 | "email": "sebastian@phpunit.de" 2302 | } 2303 | ], 2304 | "description": "Looks up which function or method a line of code belongs to", 2305 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 2306 | "support": { 2307 | "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", 2308 | "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" 2309 | }, 2310 | "funding": [ 2311 | { 2312 | "url": "https://github.com/sebastianbergmann", 2313 | "type": "github" 2314 | } 2315 | ], 2316 | "time": "2020-09-28T05:30:19+00:00" 2317 | }, 2318 | { 2319 | "name": "sebastian/comparator", 2320 | "version": "4.0.8", 2321 | "source": { 2322 | "type": "git", 2323 | "url": "https://github.com/sebastianbergmann/comparator.git", 2324 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a" 2325 | }, 2326 | "dist": { 2327 | "type": "zip", 2328 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", 2329 | "reference": "fa0f136dd2334583309d32b62544682ee972b51a", 2330 | "shasum": "" 2331 | }, 2332 | "require": { 2333 | "php": ">=7.3", 2334 | "sebastian/diff": "^4.0", 2335 | "sebastian/exporter": "^4.0" 2336 | }, 2337 | "require-dev": { 2338 | "phpunit/phpunit": "^9.3" 2339 | }, 2340 | "type": "library", 2341 | "extra": { 2342 | "branch-alias": { 2343 | "dev-master": "4.0-dev" 2344 | } 2345 | }, 2346 | "autoload": { 2347 | "classmap": [ 2348 | "src/" 2349 | ] 2350 | }, 2351 | "notification-url": "https://packagist.org/downloads/", 2352 | "license": [ 2353 | "BSD-3-Clause" 2354 | ], 2355 | "authors": [ 2356 | { 2357 | "name": "Sebastian Bergmann", 2358 | "email": "sebastian@phpunit.de" 2359 | }, 2360 | { 2361 | "name": "Jeff Welch", 2362 | "email": "whatthejeff@gmail.com" 2363 | }, 2364 | { 2365 | "name": "Volker Dusch", 2366 | "email": "github@wallbash.com" 2367 | }, 2368 | { 2369 | "name": "Bernhard Schussek", 2370 | "email": "bschussek@2bepublished.at" 2371 | } 2372 | ], 2373 | "description": "Provides the functionality to compare PHP values for equality", 2374 | "homepage": "https://github.com/sebastianbergmann/comparator", 2375 | "keywords": [ 2376 | "comparator", 2377 | "compare", 2378 | "equality" 2379 | ], 2380 | "support": { 2381 | "issues": "https://github.com/sebastianbergmann/comparator/issues", 2382 | "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" 2383 | }, 2384 | "funding": [ 2385 | { 2386 | "url": "https://github.com/sebastianbergmann", 2387 | "type": "github" 2388 | } 2389 | ], 2390 | "time": "2022-09-14T12:41:17+00:00" 2391 | }, 2392 | { 2393 | "name": "sebastian/complexity", 2394 | "version": "2.0.2", 2395 | "source": { 2396 | "type": "git", 2397 | "url": "https://github.com/sebastianbergmann/complexity.git", 2398 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" 2399 | }, 2400 | "dist": { 2401 | "type": "zip", 2402 | "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", 2403 | "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", 2404 | "shasum": "" 2405 | }, 2406 | "require": { 2407 | "nikic/php-parser": "^4.7", 2408 | "php": ">=7.3" 2409 | }, 2410 | "require-dev": { 2411 | "phpunit/phpunit": "^9.3" 2412 | }, 2413 | "type": "library", 2414 | "extra": { 2415 | "branch-alias": { 2416 | "dev-master": "2.0-dev" 2417 | } 2418 | }, 2419 | "autoload": { 2420 | "classmap": [ 2421 | "src/" 2422 | ] 2423 | }, 2424 | "notification-url": "https://packagist.org/downloads/", 2425 | "license": [ 2426 | "BSD-3-Clause" 2427 | ], 2428 | "authors": [ 2429 | { 2430 | "name": "Sebastian Bergmann", 2431 | "email": "sebastian@phpunit.de", 2432 | "role": "lead" 2433 | } 2434 | ], 2435 | "description": "Library for calculating the complexity of PHP code units", 2436 | "homepage": "https://github.com/sebastianbergmann/complexity", 2437 | "support": { 2438 | "issues": "https://github.com/sebastianbergmann/complexity/issues", 2439 | "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" 2440 | }, 2441 | "funding": [ 2442 | { 2443 | "url": "https://github.com/sebastianbergmann", 2444 | "type": "github" 2445 | } 2446 | ], 2447 | "time": "2020-10-26T15:52:27+00:00" 2448 | }, 2449 | { 2450 | "name": "sebastian/diff", 2451 | "version": "4.0.4", 2452 | "source": { 2453 | "type": "git", 2454 | "url": "https://github.com/sebastianbergmann/diff.git", 2455 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" 2456 | }, 2457 | "dist": { 2458 | "type": "zip", 2459 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", 2460 | "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", 2461 | "shasum": "" 2462 | }, 2463 | "require": { 2464 | "php": ">=7.3" 2465 | }, 2466 | "require-dev": { 2467 | "phpunit/phpunit": "^9.3", 2468 | "symfony/process": "^4.2 || ^5" 2469 | }, 2470 | "type": "library", 2471 | "extra": { 2472 | "branch-alias": { 2473 | "dev-master": "4.0-dev" 2474 | } 2475 | }, 2476 | "autoload": { 2477 | "classmap": [ 2478 | "src/" 2479 | ] 2480 | }, 2481 | "notification-url": "https://packagist.org/downloads/", 2482 | "license": [ 2483 | "BSD-3-Clause" 2484 | ], 2485 | "authors": [ 2486 | { 2487 | "name": "Sebastian Bergmann", 2488 | "email": "sebastian@phpunit.de" 2489 | }, 2490 | { 2491 | "name": "Kore Nordmann", 2492 | "email": "mail@kore-nordmann.de" 2493 | } 2494 | ], 2495 | "description": "Diff implementation", 2496 | "homepage": "https://github.com/sebastianbergmann/diff", 2497 | "keywords": [ 2498 | "diff", 2499 | "udiff", 2500 | "unidiff", 2501 | "unified diff" 2502 | ], 2503 | "support": { 2504 | "issues": "https://github.com/sebastianbergmann/diff/issues", 2505 | "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" 2506 | }, 2507 | "funding": [ 2508 | { 2509 | "url": "https://github.com/sebastianbergmann", 2510 | "type": "github" 2511 | } 2512 | ], 2513 | "time": "2020-10-26T13:10:38+00:00" 2514 | }, 2515 | { 2516 | "name": "sebastian/environment", 2517 | "version": "5.1.4", 2518 | "source": { 2519 | "type": "git", 2520 | "url": "https://github.com/sebastianbergmann/environment.git", 2521 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" 2522 | }, 2523 | "dist": { 2524 | "type": "zip", 2525 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", 2526 | "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", 2527 | "shasum": "" 2528 | }, 2529 | "require": { 2530 | "php": ">=7.3" 2531 | }, 2532 | "require-dev": { 2533 | "phpunit/phpunit": "^9.3" 2534 | }, 2535 | "suggest": { 2536 | "ext-posix": "*" 2537 | }, 2538 | "type": "library", 2539 | "extra": { 2540 | "branch-alias": { 2541 | "dev-master": "5.1-dev" 2542 | } 2543 | }, 2544 | "autoload": { 2545 | "classmap": [ 2546 | "src/" 2547 | ] 2548 | }, 2549 | "notification-url": "https://packagist.org/downloads/", 2550 | "license": [ 2551 | "BSD-3-Clause" 2552 | ], 2553 | "authors": [ 2554 | { 2555 | "name": "Sebastian Bergmann", 2556 | "email": "sebastian@phpunit.de" 2557 | } 2558 | ], 2559 | "description": "Provides functionality to handle HHVM/PHP environments", 2560 | "homepage": "http://www.github.com/sebastianbergmann/environment", 2561 | "keywords": [ 2562 | "Xdebug", 2563 | "environment", 2564 | "hhvm" 2565 | ], 2566 | "support": { 2567 | "issues": "https://github.com/sebastianbergmann/environment/issues", 2568 | "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" 2569 | }, 2570 | "funding": [ 2571 | { 2572 | "url": "https://github.com/sebastianbergmann", 2573 | "type": "github" 2574 | } 2575 | ], 2576 | "time": "2022-04-03T09:37:03+00:00" 2577 | }, 2578 | { 2579 | "name": "sebastian/exporter", 2580 | "version": "4.0.5", 2581 | "source": { 2582 | "type": "git", 2583 | "url": "https://github.com/sebastianbergmann/exporter.git", 2584 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" 2585 | }, 2586 | "dist": { 2587 | "type": "zip", 2588 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 2589 | "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", 2590 | "shasum": "" 2591 | }, 2592 | "require": { 2593 | "php": ">=7.3", 2594 | "sebastian/recursion-context": "^4.0" 2595 | }, 2596 | "require-dev": { 2597 | "ext-mbstring": "*", 2598 | "phpunit/phpunit": "^9.3" 2599 | }, 2600 | "type": "library", 2601 | "extra": { 2602 | "branch-alias": { 2603 | "dev-master": "4.0-dev" 2604 | } 2605 | }, 2606 | "autoload": { 2607 | "classmap": [ 2608 | "src/" 2609 | ] 2610 | }, 2611 | "notification-url": "https://packagist.org/downloads/", 2612 | "license": [ 2613 | "BSD-3-Clause" 2614 | ], 2615 | "authors": [ 2616 | { 2617 | "name": "Sebastian Bergmann", 2618 | "email": "sebastian@phpunit.de" 2619 | }, 2620 | { 2621 | "name": "Jeff Welch", 2622 | "email": "whatthejeff@gmail.com" 2623 | }, 2624 | { 2625 | "name": "Volker Dusch", 2626 | "email": "github@wallbash.com" 2627 | }, 2628 | { 2629 | "name": "Adam Harvey", 2630 | "email": "aharvey@php.net" 2631 | }, 2632 | { 2633 | "name": "Bernhard Schussek", 2634 | "email": "bschussek@gmail.com" 2635 | } 2636 | ], 2637 | "description": "Provides the functionality to export PHP variables for visualization", 2638 | "homepage": "https://www.github.com/sebastianbergmann/exporter", 2639 | "keywords": [ 2640 | "export", 2641 | "exporter" 2642 | ], 2643 | "support": { 2644 | "issues": "https://github.com/sebastianbergmann/exporter/issues", 2645 | "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" 2646 | }, 2647 | "funding": [ 2648 | { 2649 | "url": "https://github.com/sebastianbergmann", 2650 | "type": "github" 2651 | } 2652 | ], 2653 | "time": "2022-09-14T06:03:37+00:00" 2654 | }, 2655 | { 2656 | "name": "sebastian/global-state", 2657 | "version": "5.0.5", 2658 | "source": { 2659 | "type": "git", 2660 | "url": "https://github.com/sebastianbergmann/global-state.git", 2661 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" 2662 | }, 2663 | "dist": { 2664 | "type": "zip", 2665 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", 2666 | "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", 2667 | "shasum": "" 2668 | }, 2669 | "require": { 2670 | "php": ">=7.3", 2671 | "sebastian/object-reflector": "^2.0", 2672 | "sebastian/recursion-context": "^4.0" 2673 | }, 2674 | "require-dev": { 2675 | "ext-dom": "*", 2676 | "phpunit/phpunit": "^9.3" 2677 | }, 2678 | "suggest": { 2679 | "ext-uopz": "*" 2680 | }, 2681 | "type": "library", 2682 | "extra": { 2683 | "branch-alias": { 2684 | "dev-master": "5.0-dev" 2685 | } 2686 | }, 2687 | "autoload": { 2688 | "classmap": [ 2689 | "src/" 2690 | ] 2691 | }, 2692 | "notification-url": "https://packagist.org/downloads/", 2693 | "license": [ 2694 | "BSD-3-Clause" 2695 | ], 2696 | "authors": [ 2697 | { 2698 | "name": "Sebastian Bergmann", 2699 | "email": "sebastian@phpunit.de" 2700 | } 2701 | ], 2702 | "description": "Snapshotting of global state", 2703 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 2704 | "keywords": [ 2705 | "global state" 2706 | ], 2707 | "support": { 2708 | "issues": "https://github.com/sebastianbergmann/global-state/issues", 2709 | "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" 2710 | }, 2711 | "funding": [ 2712 | { 2713 | "url": "https://github.com/sebastianbergmann", 2714 | "type": "github" 2715 | } 2716 | ], 2717 | "time": "2022-02-14T08:28:10+00:00" 2718 | }, 2719 | { 2720 | "name": "sebastian/lines-of-code", 2721 | "version": "1.0.3", 2722 | "source": { 2723 | "type": "git", 2724 | "url": "https://github.com/sebastianbergmann/lines-of-code.git", 2725 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" 2726 | }, 2727 | "dist": { 2728 | "type": "zip", 2729 | "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", 2730 | "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", 2731 | "shasum": "" 2732 | }, 2733 | "require": { 2734 | "nikic/php-parser": "^4.6", 2735 | "php": ">=7.3" 2736 | }, 2737 | "require-dev": { 2738 | "phpunit/phpunit": "^9.3" 2739 | }, 2740 | "type": "library", 2741 | "extra": { 2742 | "branch-alias": { 2743 | "dev-master": "1.0-dev" 2744 | } 2745 | }, 2746 | "autoload": { 2747 | "classmap": [ 2748 | "src/" 2749 | ] 2750 | }, 2751 | "notification-url": "https://packagist.org/downloads/", 2752 | "license": [ 2753 | "BSD-3-Clause" 2754 | ], 2755 | "authors": [ 2756 | { 2757 | "name": "Sebastian Bergmann", 2758 | "email": "sebastian@phpunit.de", 2759 | "role": "lead" 2760 | } 2761 | ], 2762 | "description": "Library for counting the lines of code in PHP source code", 2763 | "homepage": "https://github.com/sebastianbergmann/lines-of-code", 2764 | "support": { 2765 | "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", 2766 | "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" 2767 | }, 2768 | "funding": [ 2769 | { 2770 | "url": "https://github.com/sebastianbergmann", 2771 | "type": "github" 2772 | } 2773 | ], 2774 | "time": "2020-11-28T06:42:11+00:00" 2775 | }, 2776 | { 2777 | "name": "sebastian/object-enumerator", 2778 | "version": "4.0.4", 2779 | "source": { 2780 | "type": "git", 2781 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 2782 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" 2783 | }, 2784 | "dist": { 2785 | "type": "zip", 2786 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", 2787 | "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", 2788 | "shasum": "" 2789 | }, 2790 | "require": { 2791 | "php": ">=7.3", 2792 | "sebastian/object-reflector": "^2.0", 2793 | "sebastian/recursion-context": "^4.0" 2794 | }, 2795 | "require-dev": { 2796 | "phpunit/phpunit": "^9.3" 2797 | }, 2798 | "type": "library", 2799 | "extra": { 2800 | "branch-alias": { 2801 | "dev-master": "4.0-dev" 2802 | } 2803 | }, 2804 | "autoload": { 2805 | "classmap": [ 2806 | "src/" 2807 | ] 2808 | }, 2809 | "notification-url": "https://packagist.org/downloads/", 2810 | "license": [ 2811 | "BSD-3-Clause" 2812 | ], 2813 | "authors": [ 2814 | { 2815 | "name": "Sebastian Bergmann", 2816 | "email": "sebastian@phpunit.de" 2817 | } 2818 | ], 2819 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 2820 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 2821 | "support": { 2822 | "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", 2823 | "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" 2824 | }, 2825 | "funding": [ 2826 | { 2827 | "url": "https://github.com/sebastianbergmann", 2828 | "type": "github" 2829 | } 2830 | ], 2831 | "time": "2020-10-26T13:12:34+00:00" 2832 | }, 2833 | { 2834 | "name": "sebastian/object-reflector", 2835 | "version": "2.0.4", 2836 | "source": { 2837 | "type": "git", 2838 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 2839 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" 2840 | }, 2841 | "dist": { 2842 | "type": "zip", 2843 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2844 | "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", 2845 | "shasum": "" 2846 | }, 2847 | "require": { 2848 | "php": ">=7.3" 2849 | }, 2850 | "require-dev": { 2851 | "phpunit/phpunit": "^9.3" 2852 | }, 2853 | "type": "library", 2854 | "extra": { 2855 | "branch-alias": { 2856 | "dev-master": "2.0-dev" 2857 | } 2858 | }, 2859 | "autoload": { 2860 | "classmap": [ 2861 | "src/" 2862 | ] 2863 | }, 2864 | "notification-url": "https://packagist.org/downloads/", 2865 | "license": [ 2866 | "BSD-3-Clause" 2867 | ], 2868 | "authors": [ 2869 | { 2870 | "name": "Sebastian Bergmann", 2871 | "email": "sebastian@phpunit.de" 2872 | } 2873 | ], 2874 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 2875 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 2876 | "support": { 2877 | "issues": "https://github.com/sebastianbergmann/object-reflector/issues", 2878 | "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" 2879 | }, 2880 | "funding": [ 2881 | { 2882 | "url": "https://github.com/sebastianbergmann", 2883 | "type": "github" 2884 | } 2885 | ], 2886 | "time": "2020-10-26T13:14:26+00:00" 2887 | }, 2888 | { 2889 | "name": "sebastian/recursion-context", 2890 | "version": "4.0.4", 2891 | "source": { 2892 | "type": "git", 2893 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 2894 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" 2895 | }, 2896 | "dist": { 2897 | "type": "zip", 2898 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", 2899 | "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", 2900 | "shasum": "" 2901 | }, 2902 | "require": { 2903 | "php": ">=7.3" 2904 | }, 2905 | "require-dev": { 2906 | "phpunit/phpunit": "^9.3" 2907 | }, 2908 | "type": "library", 2909 | "extra": { 2910 | "branch-alias": { 2911 | "dev-master": "4.0-dev" 2912 | } 2913 | }, 2914 | "autoload": { 2915 | "classmap": [ 2916 | "src/" 2917 | ] 2918 | }, 2919 | "notification-url": "https://packagist.org/downloads/", 2920 | "license": [ 2921 | "BSD-3-Clause" 2922 | ], 2923 | "authors": [ 2924 | { 2925 | "name": "Sebastian Bergmann", 2926 | "email": "sebastian@phpunit.de" 2927 | }, 2928 | { 2929 | "name": "Jeff Welch", 2930 | "email": "whatthejeff@gmail.com" 2931 | }, 2932 | { 2933 | "name": "Adam Harvey", 2934 | "email": "aharvey@php.net" 2935 | } 2936 | ], 2937 | "description": "Provides functionality to recursively process PHP variables", 2938 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 2939 | "support": { 2940 | "issues": "https://github.com/sebastianbergmann/recursion-context/issues", 2941 | "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" 2942 | }, 2943 | "funding": [ 2944 | { 2945 | "url": "https://github.com/sebastianbergmann", 2946 | "type": "github" 2947 | } 2948 | ], 2949 | "time": "2020-10-26T13:17:30+00:00" 2950 | }, 2951 | { 2952 | "name": "sebastian/resource-operations", 2953 | "version": "3.0.3", 2954 | "source": { 2955 | "type": "git", 2956 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 2957 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" 2958 | }, 2959 | "dist": { 2960 | "type": "zip", 2961 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2962 | "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", 2963 | "shasum": "" 2964 | }, 2965 | "require": { 2966 | "php": ">=7.3" 2967 | }, 2968 | "require-dev": { 2969 | "phpunit/phpunit": "^9.0" 2970 | }, 2971 | "type": "library", 2972 | "extra": { 2973 | "branch-alias": { 2974 | "dev-master": "3.0-dev" 2975 | } 2976 | }, 2977 | "autoload": { 2978 | "classmap": [ 2979 | "src/" 2980 | ] 2981 | }, 2982 | "notification-url": "https://packagist.org/downloads/", 2983 | "license": [ 2984 | "BSD-3-Clause" 2985 | ], 2986 | "authors": [ 2987 | { 2988 | "name": "Sebastian Bergmann", 2989 | "email": "sebastian@phpunit.de" 2990 | } 2991 | ], 2992 | "description": "Provides a list of PHP built-in functions that operate on resources", 2993 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 2994 | "support": { 2995 | "issues": "https://github.com/sebastianbergmann/resource-operations/issues", 2996 | "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" 2997 | }, 2998 | "funding": [ 2999 | { 3000 | "url": "https://github.com/sebastianbergmann", 3001 | "type": "github" 3002 | } 3003 | ], 3004 | "time": "2020-09-28T06:45:17+00:00" 3005 | }, 3006 | { 3007 | "name": "sebastian/type", 3008 | "version": "3.2.0", 3009 | "source": { 3010 | "type": "git", 3011 | "url": "https://github.com/sebastianbergmann/type.git", 3012 | "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" 3013 | }, 3014 | "dist": { 3015 | "type": "zip", 3016 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", 3017 | "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", 3018 | "shasum": "" 3019 | }, 3020 | "require": { 3021 | "php": ">=7.3" 3022 | }, 3023 | "require-dev": { 3024 | "phpunit/phpunit": "^9.5" 3025 | }, 3026 | "type": "library", 3027 | "extra": { 3028 | "branch-alias": { 3029 | "dev-master": "3.2-dev" 3030 | } 3031 | }, 3032 | "autoload": { 3033 | "classmap": [ 3034 | "src/" 3035 | ] 3036 | }, 3037 | "notification-url": "https://packagist.org/downloads/", 3038 | "license": [ 3039 | "BSD-3-Clause" 3040 | ], 3041 | "authors": [ 3042 | { 3043 | "name": "Sebastian Bergmann", 3044 | "email": "sebastian@phpunit.de", 3045 | "role": "lead" 3046 | } 3047 | ], 3048 | "description": "Collection of value objects that represent the types of the PHP type system", 3049 | "homepage": "https://github.com/sebastianbergmann/type", 3050 | "support": { 3051 | "issues": "https://github.com/sebastianbergmann/type/issues", 3052 | "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" 3053 | }, 3054 | "funding": [ 3055 | { 3056 | "url": "https://github.com/sebastianbergmann", 3057 | "type": "github" 3058 | } 3059 | ], 3060 | "time": "2022-09-12T14:47:03+00:00" 3061 | }, 3062 | { 3063 | "name": "sebastian/version", 3064 | "version": "3.0.2", 3065 | "source": { 3066 | "type": "git", 3067 | "url": "https://github.com/sebastianbergmann/version.git", 3068 | "reference": "c6c1022351a901512170118436c764e473f6de8c" 3069 | }, 3070 | "dist": { 3071 | "type": "zip", 3072 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", 3073 | "reference": "c6c1022351a901512170118436c764e473f6de8c", 3074 | "shasum": "" 3075 | }, 3076 | "require": { 3077 | "php": ">=7.3" 3078 | }, 3079 | "type": "library", 3080 | "extra": { 3081 | "branch-alias": { 3082 | "dev-master": "3.0-dev" 3083 | } 3084 | }, 3085 | "autoload": { 3086 | "classmap": [ 3087 | "src/" 3088 | ] 3089 | }, 3090 | "notification-url": "https://packagist.org/downloads/", 3091 | "license": [ 3092 | "BSD-3-Clause" 3093 | ], 3094 | "authors": [ 3095 | { 3096 | "name": "Sebastian Bergmann", 3097 | "email": "sebastian@phpunit.de", 3098 | "role": "lead" 3099 | } 3100 | ], 3101 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 3102 | "homepage": "https://github.com/sebastianbergmann/version", 3103 | "support": { 3104 | "issues": "https://github.com/sebastianbergmann/version/issues", 3105 | "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" 3106 | }, 3107 | "funding": [ 3108 | { 3109 | "url": "https://github.com/sebastianbergmann", 3110 | "type": "github" 3111 | } 3112 | ], 3113 | "time": "2020-09-28T06:39:44+00:00" 3114 | }, 3115 | { 3116 | "name": "theseer/tokenizer", 3117 | "version": "1.2.1", 3118 | "source": { 3119 | "type": "git", 3120 | "url": "https://github.com/theseer/tokenizer.git", 3121 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" 3122 | }, 3123 | "dist": { 3124 | "type": "zip", 3125 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", 3126 | "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", 3127 | "shasum": "" 3128 | }, 3129 | "require": { 3130 | "ext-dom": "*", 3131 | "ext-tokenizer": "*", 3132 | "ext-xmlwriter": "*", 3133 | "php": "^7.2 || ^8.0" 3134 | }, 3135 | "type": "library", 3136 | "autoload": { 3137 | "classmap": [ 3138 | "src/" 3139 | ] 3140 | }, 3141 | "notification-url": "https://packagist.org/downloads/", 3142 | "license": [ 3143 | "BSD-3-Clause" 3144 | ], 3145 | "authors": [ 3146 | { 3147 | "name": "Arne Blankerts", 3148 | "email": "arne@blankerts.de", 3149 | "role": "Developer" 3150 | } 3151 | ], 3152 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 3153 | "support": { 3154 | "issues": "https://github.com/theseer/tokenizer/issues", 3155 | "source": "https://github.com/theseer/tokenizer/tree/1.2.1" 3156 | }, 3157 | "funding": [ 3158 | { 3159 | "url": "https://github.com/theseer", 3160 | "type": "github" 3161 | } 3162 | ], 3163 | "time": "2021-07-28T10:34:58+00:00" 3164 | } 3165 | ], 3166 | "aliases": [], 3167 | "minimum-stability": "stable", 3168 | "stability-flags": { 3169 | "klaussilveira/gitter": 20 3170 | }, 3171 | "prefer-stable": false, 3172 | "prefer-lowest": false, 3173 | "platform": { 3174 | "php": ">=7.3" 3175 | }, 3176 | "platform-dev": [], 3177 | "platform-overrides": { 3178 | "php": "7.3.0" 3179 | }, 3180 | "plugin-api-version": "2.3.0" 3181 | } 3182 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Console/Application.php: -------------------------------------------------------------------------------- 1 | add(new CompareCommand()); 35 | $commands[] = $this->add(new SuggestCommand()); 36 | return $commands; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Console/Command/BaseCommand.php: -------------------------------------------------------------------------------- 1 | getOption('config'); 27 | $this->config = $configPath ? Configuration::fromFile($configPath) : Configuration::defaults('php-semver-checker-git'); 28 | $inputMerger = new InputMerger(); 29 | $inputMerger->merge($input, $this->config); 30 | 31 | // Set overrides 32 | LevelMapping::setOverrides($this->config->getLevelMapping()); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Console/Command/CompareCommand.php: -------------------------------------------------------------------------------- 1 | setName('compare') 23 | ->setDescription('Compare a set of files to determine what semantic versioning change needs to be done') 24 | ->setDefinition([ 25 | new InputArgument('before', InputArgument::REQUIRED, 'A branch/tag/commit to check'), 26 | new InputArgument('after', InputArgument::REQUIRED, 'A branch/tag/commit to against'), 27 | new InputOption('include-before', null, InputOption::VALUE_OPTIONAL, 'List of paths to include (comma separated)'), 28 | new InputOption('include-after', null, InputOption::VALUE_OPTIONAL, 'List of paths to include (comma separated)'), 29 | new InputOption('exclude-before', null, InputOption::VALUE_REQUIRED, 'List of paths to exclude (comma separated)'), 30 | new InputOption('exclude-after', null, InputOption::VALUE_REQUIRED, 'List of paths to exclude (comma separated)'), 31 | new InputOption('config', null, InputOption::VALUE_REQUIRED, 'A configuration file to configure php-semver-checker-git'), 32 | new InputOption('to-json', null, InputOption::VALUE_REQUIRED, 'Output the result to a JSON file') 33 | ]); 34 | } 35 | 36 | protected function execute(InputInterface $input, OutputInterface $output) 37 | { 38 | $startTime = microtime(true); 39 | 40 | $targetDirectory = getcwd(); 41 | $commitBefore = $this->config->get('before'); 42 | $commitAfter = $this->config->get('after'); 43 | 44 | $includeBefore = $this->config->get('include-before'); 45 | $excludeBefore = $this->config->get('exclude-before'); 46 | 47 | $includeAfter = $this->config->get('include-after'); 48 | $excludeAfter = $this->config->get('exclude-after'); 49 | 50 | $finder = new Finder(); 51 | $sourceFilter = new SourceFilter(); 52 | $beforeScanner = new Scanner(); 53 | $afterScanner = new Scanner(); 54 | 55 | $client = new Client(); 56 | 57 | $repository = $client->getRepository($targetDirectory); 58 | 59 | $modifiedFiles = $repository->getModifiedFiles($commitBefore, $commitAfter); 60 | $modifiedFiles = array_filter($modifiedFiles, function ($modifiedFile) { 61 | return substr($modifiedFile, -4) === '.php'; 62 | }); 63 | 64 | $initialBranch = $repository->getCurrentBranch(); 65 | 66 | $repository->checkout($commitBefore . ' --'); 67 | 68 | $sourceBefore = $finder->findFromString($targetDirectory, $includeBefore, $excludeBefore); 69 | $sourceBeforeMatchedCount = count($sourceBefore); 70 | $sourceBefore = $sourceFilter->filter($sourceBefore, $modifiedFiles); 71 | $progress = new ProgressBar($output, count($sourceBefore)); 72 | foreach ($sourceBefore as $file) { 73 | $beforeScanner->scan($file); 74 | $progress->advance(); 75 | } 76 | 77 | $progress->clear(); 78 | 79 | $repository->checkout($commitAfter . ' --'); 80 | 81 | $sourceAfter = $finder->findFromString($targetDirectory, $includeAfter, $excludeAfter); 82 | $sourceAfterMatchedCount = count($sourceAfter); 83 | $sourceAfter = $sourceFilter->filter($sourceAfter, $modifiedFiles); 84 | $progress = new ProgressBar($output, count($sourceAfter)); 85 | foreach ($sourceAfter as $file) { 86 | $afterScanner->scan($file); 87 | $progress->advance(); 88 | } 89 | 90 | $progress->clear(); 91 | 92 | if ($initialBranch) { 93 | $repository->checkout($initialBranch); 94 | } 95 | 96 | $progress->clear(); 97 | 98 | $registryBefore = $beforeScanner->getRegistry(); 99 | $registryAfter = $afterScanner->getRegistry(); 100 | 101 | $analyzer = new Analyzer(); 102 | $report = $analyzer->analyze($registryBefore, $registryAfter); 103 | 104 | $reporter = new Reporter($report); 105 | $reporter->setFullPath(true); 106 | $reporter->output($output); 107 | 108 | $toJson = $this->config->get('to-json'); 109 | if ($toJson) { 110 | $commitBeforeHash = $repository->getCommit($commitBefore)->getHash(); 111 | $commitAfterHash = $repository->getCommit($commitAfter)->getHash(); 112 | $jsonReporter = new JsonReporter($report, $toJson, $commitBeforeHash, $commitAfterHash); 113 | $jsonReporter->output(); 114 | } 115 | 116 | $duration = microtime(true) - $startTime; 117 | $output->writeln(''); 118 | $output->writeln('[Scanned files] Before: ' . count($sourceBefore) . ' ('.$sourceBeforeMatchedCount.' unfiltered), After: ' . count($sourceAfter) . ' ('.$sourceAfterMatchedCount.' unfiltered)'); 119 | $output->writeln('Time: ' . round($duration, 3) . ' seconds, Memory: ' . round(memory_get_peak_usage() / 1024 / 1024, 3) . ' MB'); 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Console/Command/SuggestCommand.php: -------------------------------------------------------------------------------- 1 | setName('suggest')->setDescription('Compare a semantic versioned tag against a commit and provide a semantic version suggestion')->setDefinition([ 30 | new InputOption('include-before', null, InputOption::VALUE_REQUIRED, 'List of paths to include (comma separated)'), 31 | new InputOption('include-after', null, InputOption::VALUE_REQUIRED, 'List of paths to include (comma separated)'), 32 | new InputOption('exclude-before', null, InputOption::VALUE_REQUIRED, 'List of paths to exclude (comma separated)'), 33 | new InputOption('exclude-after', null, InputOption::VALUE_REQUIRED, 'List of paths to exclude (comma separated)'), 34 | new InputOption('tag', 't', InputOption::VALUE_REQUIRED, 'A tag to test against (latest by default)'), 35 | new InputOption('against', 'a', InputOption::VALUE_REQUIRED, 'What to test against the tag (HEAD by default)'), 36 | new InputOption('allow-detached', 'd', InputOption::VALUE_NONE, 'Allow suggest to start from a detached HEAD'), 37 | new InputOption('details', null, InputOption::VALUE_NONE, 'Report the changes on which the suggestion is based'), 38 | new InputOption('config', null, InputOption::VALUE_REQUIRED, 'A configuration file to configure php-semver-checker-git'), 39 | ]); 40 | } 41 | 42 | /** 43 | * @param string $directory 44 | * @return \Gitter\Repository 45 | */ 46 | private function getRepository($directory) 47 | { 48 | $client = new Client(); 49 | return $client->getRepository($directory); 50 | } 51 | 52 | /** 53 | * @param \Symfony\Component\Console\Input\InputInterface $input 54 | * @param \Symfony\Component\Console\Output\OutputInterface $output 55 | * @return int 56 | */ 57 | protected function execute(InputInterface $input, OutputInterface $output) 58 | { 59 | $startTime = microtime(true); 60 | 61 | $targetDirectory = getcwd(); 62 | $against = $this->config->get('against') ?: 'HEAD'; 63 | 64 | $repository = $this->getRepository($targetDirectory); 65 | 66 | $tag = $this->getInitialTag($repository); 67 | 68 | if ($tag === null) { 69 | $output->writeln('No tags to suggest against'); 70 | return 1; 71 | } 72 | 73 | $output->writeln('Testing ' . $against . ' against tag: ' . $tag . ''); 74 | 75 | $sourceFileProcessor = new SourceFileProcessor( 76 | new SourceFilter(), 77 | $repository, 78 | $output, 79 | new Finder(), 80 | $targetDirectory, 81 | $repository->getModifiedFiles($tag, $against) 82 | ); 83 | 84 | $initialBranch = $repository->getCurrentBranch(); 85 | 86 | if ( ! $this->config->get('allow-detached') && ! $initialBranch) { 87 | $output->writeln('You are on a detached HEAD, aborting.'); 88 | $output->writeln('If you still wish to run against a detached HEAD, use --allow-detached.'); 89 | return -1; 90 | } 91 | $after = $sourceFileProcessor->processFileList( 92 | $against, 93 | $this->config->get('include-after'), 94 | $this->config->get('exclude-after') 95 | ); 96 | $before = $sourceFileProcessor->processFileList( 97 | $tag, 98 | $this->config->get('include-before'), 99 | $this->config->get('exclude-before') 100 | ); 101 | // Reset repository to initial branch 102 | if ($initialBranch) { 103 | $repository->checkout($initialBranch); 104 | } 105 | 106 | $analyzer = new Analyzer(); 107 | $report = $analyzer->analyze($before->getScanner()->getRegistry(), $after->getScanner()->getRegistry()); 108 | 109 | $tag = new SemanticVersion($tag); 110 | $newTag = $this->getNextTag($report, $tag); 111 | 112 | $output->write( 113 | [ 114 | '', 115 | 'Initial semantic version: ' . $tag . '', 116 | 'Suggested semantic version: ' . $newTag . '', 117 | ], 118 | true 119 | ); 120 | 121 | if ($this->config->get('details')) { 122 | $reporter = new Reporter($report); 123 | $reporter->output($output); 124 | } 125 | 126 | $duration = microtime(true) - $startTime; 127 | $output->write( 128 | [ 129 | '', 130 | '[Scanned files] Before: ' . $before->getFilteredCount() . ' (' . $before->getUnfilteredCount() . ' unfiltered), After: ' . $after->getFilteredCount() . ' (' . $after->getUnfilteredCount() . ' unfiltered)', 131 | 'Time: ' . round($duration, 3) . ' seconds, Memory: ' . round(memory_get_peak_usage() / 1024 / 1024, 3) . ' MB', 132 | ], 133 | true 134 | ); 135 | return 0; 136 | } 137 | 138 | /** 139 | * @param \PHPSemVerChecker\Report\Report $report 140 | * @param \vierbergenlars\SemVer\version $tag 141 | * @return \vierbergenlars\SemVer\version 142 | */ 143 | private function getNextTag(Report $report, SemanticVersion $tag) 144 | { 145 | $newTag = new SemanticVersion($tag); 146 | $suggestedLevel = $report->getSuggestedLevel(); 147 | if ($suggestedLevel === Level::NONE) { 148 | return $newTag; 149 | } 150 | if ($newTag->getPrerelease()) { 151 | $newTag->inc('prerelease'); 152 | return $newTag; 153 | } 154 | if ($newTag->getMajor() < 1 && $suggestedLevel === Level::MAJOR) { 155 | $newTag->inc('minor'); 156 | return $newTag; 157 | } 158 | $newTag->inc(strtolower(Level::toString($suggestedLevel))); 159 | return $newTag; 160 | } 161 | 162 | /** 163 | * @param \Gitter\Repository $repository 164 | * @return null|string 165 | */ 166 | private function getInitialTag(Repository $repository) 167 | { 168 | $tag = $this->config->get('tag'); 169 | if ($tag === null) { 170 | return $this->findLatestTag($repository); 171 | } 172 | return $this->findTag($repository, $tag); 173 | } 174 | 175 | /** 176 | * @param \Gitter\Repository $repository 177 | * @return string|null 178 | */ 179 | protected function findLatestTag(Repository $repository) 180 | { 181 | return $this->findTag($repository, '*'); 182 | } 183 | 184 | /** 185 | * @param \Gitter\Repository $repository 186 | * @param string $tag 187 | * @return string|null 188 | */ 189 | protected function findTag(Repository $repository, $tag) 190 | { 191 | $tags = (array)$repository->getTags(); 192 | $tags = $this->filterTags($tags); 193 | 194 | $tagExpression = new SemanticExpression($tag); 195 | 196 | try { 197 | // Throws an exception if it cannot find a matching version 198 | $satisfyingTag = $tagExpression->maxSatisfying($tags); 199 | } catch (SemanticVersionException $e) { 200 | return null; 201 | } 202 | 203 | return $this->getMappedVersionTag($tags, $satisfyingTag); 204 | } 205 | 206 | /** 207 | * @param array $tags 208 | * @return array 209 | */ 210 | private function filterTags(array $tags) 211 | { 212 | $filteredTags = []; 213 | foreach ($tags as $tag) { 214 | try { 215 | new SemanticVersion($tag); 216 | $filteredTags[] = $tag; 217 | } catch (SemanticVersionException $e) { 218 | // Do nothing 219 | } 220 | } 221 | return $filteredTags; 222 | } 223 | 224 | /** 225 | * @param string[] $tags 226 | * @param \vierbergenlars\SemVer\version|string|null $versionTag 227 | * @return string|null 228 | */ 229 | private function getMappedVersionTag(array $tags, $versionTag) 230 | { 231 | foreach ($tags as $tag) { 232 | try { 233 | if (SemanticVersion::eq($versionTag, $tag)) { 234 | return $tag; 235 | } 236 | } catch (RuntimeException $e) { 237 | // Do nothing 238 | } 239 | } 240 | return null; 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Filter/SourceFilter.php: -------------------------------------------------------------------------------- 1 | unfilteredCount = count($unfiltered); 43 | $this->filteredCount = count($filtered); 44 | $this->filtered = $filtered; 45 | $this->unfiltered = $unfiltered; 46 | $this->scanner = $scanner; 47 | } 48 | 49 | /** 50 | * @return \PHPSemVerChecker\Scanner\Scanner 51 | */ 52 | public function getScanner() 53 | { 54 | return $this->scanner; 55 | } 56 | 57 | /** 58 | * @return string[] 59 | */ 60 | public function getFiltered() 61 | { 62 | return $this->filtered; 63 | } 64 | 65 | /** 66 | * @return int 67 | */ 68 | public function getFilteredCount() 69 | { 70 | return $this->filteredCount; 71 | } 72 | 73 | /** 74 | * @return int 75 | */ 76 | public function getUnfilteredCount() 77 | { 78 | return $this->unfilteredCount; 79 | } 80 | 81 | /** 82 | * @return string[] 83 | */ 84 | public function getUnfiltered() 85 | { 86 | return $this->unfiltered; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Reporter/JsonReporter.php: -------------------------------------------------------------------------------- 1 | report = $report; 40 | $this->path = $path; 41 | $this->beforeHash = $beforeHash; 42 | $this->afterHash = $afterHash; 43 | $this->filesystem = $filesystem ?: new Filesystem(); 44 | $this->baseJsonReporter = new BaseJsonReporter($report, $path); 45 | } 46 | 47 | /** 48 | * @return array 49 | */ 50 | public function getOutput() 51 | { 52 | $output = []; 53 | $output['before'] = $this->beforeHash; 54 | $output['after'] = $this->afterHash; 55 | $output['delta'] = $this->baseJsonReporter->getOutput(); 56 | 57 | return $output; 58 | } 59 | 60 | public function output() 61 | { 62 | $this->filesystem->write($this->path, json_encode($this->getOutput(), JSON_PRETTY_PRINT)); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/Repository/Git.php: -------------------------------------------------------------------------------- 1 | getGit()->{'checkout'}($this->getRepositoryPath(), [$commit, '--']); 12 | } 13 | } -------------------------------------------------------------------------------- /src/PHPSemVerCheckerGit/SourceFileProcessor.php: -------------------------------------------------------------------------------- 1 | repository = $repository; 56 | $this->output = $output; 57 | $this->finder = $finder; 58 | $this->filter = $filter; 59 | $this->directory = $directory; 60 | foreach($modifiedFiles as $file) { 61 | if(substr($file, -4) === '.php') { 62 | $this->modifiedFiles[] = $file; 63 | } 64 | } 65 | } 66 | 67 | /** 68 | * @param string $commitIdentifier 69 | * @param $include 70 | * @param $exclude 71 | * @return \PHPSemVerCheckerGit\ProcessedFileList 72 | */ 73 | public function processFileList($commitIdentifier, $include, $exclude) 74 | { 75 | $scanner = new Scanner(); 76 | $this->repository->checkout($commitIdentifier . ' --'); 77 | $unfiltered = $this->finder->findFromString($this->directory, $include, $exclude); 78 | $source = $this->filter->filter($unfiltered, $this->modifiedFiles); 79 | $this->scanFileList($scanner, $source); 80 | return new ProcessedFileList($unfiltered, $source, $scanner); 81 | } 82 | 83 | /** 84 | * @param \PHPSemVerChecker\Scanner\Scanner $scanner 85 | * @param array $files 86 | */ 87 | private function scanFileList(Scanner $scanner, array $files) 88 | { 89 | $progress = new ProgressBar($this->output, count($files)); 90 | foreach ($files as $file) { 91 | $scanner->scan($file); 92 | $progress->advance(); 93 | } 94 | $progress->clear(); 95 | } 96 | } --------------------------------------------------------------------------------